Assembly VC+中SSE编码的内部函数与内联函数+;2K8

我以前为SSE做过一些内联ASM编码,即使对不懂ASM的人来说也不难。但我注意到MS也提供了包含许多这样的特殊说明的本质 是否存在特定的性能差异,或者是否有任何其他强有力的理由说明其中一个应该高于另一个 从标题中重复,这是专门针对VC++2008公开的本质,用于非托管的、本地的C++。 < P>在VisualC++中没有内联程序集用于X64。在x64上也可以使用intrinsic。如果要将代码移植到x64,则必须使用内部函数。内部函数与其等效的汇编指令相同,如果可能,应使用它们-编译器知道如何直

Assembly 从MASM/MASM64在编译时检测体系结构

如果目标体系结构是I386或AMD64,如何在编译时从ASM源文件中检测 我正在使用masm(ml.exe)/masm64(ml64.exe)来组装file32.asm和file64.asm。最好创建一个文件file.asm,该文件应包含file32.asm或file64.asm,具体取决于体系结构。理想情况下,我希望能够写出以下内容: IFDEF amd64 include file64.asm ELSE include file32.asm ENDIF IFDEF amd64 包括file6

Assembly MOV(%r11,%r12,1),%edx的含义是什么?

这个指令是做什么的 mov (%r11,%r12,1), %edx 看。上面说 在AT&T语法中,内存是 以以下方式引用 segment-override:signed-offset(base,index,scale) 页面下方有一些示例。我觉得这是最好的: GAS memory operand NASM memory operand ------------------ ------------------- (%ecx,%ebx,2) [ecx+ebx*2] AT&T语法

Assembly 如何通过BIOS中断以实模式处理键盘?

我必须为我可以运行计算器的操作系统编写代码。它就像桌面计算器一样。为此,我正在阅读我已完成的引导加载程序处于实模式。在此之后,作者将解释保护模式。我不想使用保护模式。我没有时间做那件事。所以我想用bios中断在实模式下编写计算器。可能吗?我认为它可以写在引导加载程序的第二阶段(我不确定)。这意味着我不必使用内核(我不确定)。我不知道如何使用BIOS中断来处理键盘。谁能给我一个链接,这将有助于我在这方面?如果我上面假设的任何错误都是错误的,请纠正我。提前谢谢。您可以处理IRQ 1(通过x86控制器

Assembly 汇编语言中的求解函数

我是个汇编高手。 我需要解下一个函数y=x^2(a+b+c); a、 b,c-来自控制台的输入 结果x是写入文件所必需的。 我不要求为我解决这个问题,但可能有人与我共享有用的链接?尝试编写一些代码。您甚至可以用C编写一个函数,并查看生成的汇编程序代码(例如,如果在Linux上使用gcc,则使用gcc-S-fverbose asm)汇编的问题是没有真正的输入和输出函数。在标准编程语言中,您可以定义希望在屏幕上显示的内容。在你的例子X中,你定义了你想要用户输入的内容,在你的例子中,a,b,c。然后进

Assembly 当您使用ret指令从far过程返回时,sp等于什么

具体地说,在8086汇编中,如果SS=AC8D和SP=7A75,则在使用ret(指令代码CB)从far过程调用返回后,哪个SP将相等。没有给出其他信息。IP和CS从堆栈中弹出一个远返回,因此SP将增加2*2字节。取决于过程有多少参数。。。请试着回答问题。@m0skit0程序不起作用;I don’我什么时候没有任何论据?进入程序?退出程序?进入-退出协议完成了吗?@m0skit0,也是ss=AC8D,没有给出其他信息。然后检查Jens Björnhager的答案

Assembly 英特尔语法是[eax+;ebx],即AT&;T语法等价?

问题在 是关于汇编中的strlen,但它似乎是用AT&T语法编写的,不幸的是,我的汇编程序不支持这种语法 我只是好奇你如何将[eax+ebx]的语法翻译成英特尔的语法 所以 相当于 [eax + 4] 假设偏移值存储在%ebx中。 它的等价性是什么 [eax + ebx] ? 谢谢,[eax+ebx]应该翻译成(%eax,%ebx) AT&T语法中内存地址的完整语法为: offset(%reg1,%reg2,scale) 这相当于: [reg1 + reg2*scale + offset]

Assembly 如何在NASM中使用scanf?

我正在试图找出如何使用scanf获取用户输入。我知道如何使用printf:我所要做的就是将要在屏幕上写入的数据按如下方式推入堆栈: global _main extern _printf extern _scanf section .data msg db "Hi", 0 section .text _main: push ebp mov ebp, esp push msg call _printf mov esp, ebp pop ebp ret 但是我不

Assembly 针对intel x64 arch的Rex前缀解码

在英特尔文档中,表2-4显示了REX前缀位的重要性 有人能给我解释一下当W=0时如何解释吗?上面说0=由CS.D决定的操作数大小,但我不明白CS.D的意思 CS.D表示与当前代码段关联的段描述符的“默认操作大小”字段。这控制地址和操作数的默认大小,可以设置为默认为16位或32位操作数大小 在64位又称长模式(CS.L=1)中,CS.D=32位的唯一有效设置是,因此清除W位的REX前缀将默认操作数大小保留为32位。(操作数大小前缀可以将操作数大小覆盖到16位) 长模式下的默认地址大小为64位(指令

Assembly 什么';使用方括号读取NASM中的值时,默认的段寄存器是什么?

众所周知,我们可以使用NASM中的方括号读取地址值,例如: mov esi, [ebp +8] mov edi, [var] --> (var is a variable) 方括号中的值代表偏移地址,但当我们使用该格式读取值时,我们绝对需要一个段,无论是在实模式还是保护模式下,那么NASM使用的默认段寄存器是什么?我知道Windows使用平面模式,但如果我为不同的段寄存器(cs、ss、ds、es、fs、gs)设置不同的值,NASM将使用哪个段寄存器?我猜是ds,对吧?使用方括号中

Assembly 这是什么意思;。“对齐”;x86汇编指令到底做什么?

我将列出我不明白的部分,并向您展示我不明白的部分 首先 .Align指令 .对齐整数,填充。 .align指令使生成的下一个数据按整数字节对齐 1.~?:“意味着什么导致生成的下一个数据以整数字节对齐?”我可以推测生成的下一个数据是要进行寄存器传输的内存,不是吗?模意味着除法的剩余部分。我不理解“将以整数字节模对齐” 简单数据声明的剩余部分是什么?由剩余部分对齐生成的下一个数据如何有用?如果下一个数据是模对齐的,也就是说,下一个生成的数据,不管它的确切含义是什么,是整数的余数吗?这完全没有道理

Assembly 如何读取汇编中的整数

我是汇编新手,制作一个程序可以读取汇编中的数字,我可以从键盘读取,但在屏幕上打印时遇到问题,下面是代码 section .data x db "number is =%d",10,0 y db "number is =%d",10,0 section .text global main extern printf extern scanf extern read lea ebx ,[c1] push ebx push x call scanf mov ecx,c1 push

Assembly eax不';在mov之后不取参数

查看一些反汇编和第一个指令mov eax,DWORD PTR[ebp+0x8],即0xf7fda858 我迈出了一步,但eax没有改变。我读错了吗?我是gdb的新手,所以这当然是可能的 9: x/16xw $esp 0xffffd350: 0xf7fbdff4 0x00000000 0x00000000 0xffffd368 0xffffd360: 0x0804870a 0xf7fbdff4 0x00000000 0xf7e324d3 0xffffd370: 0x00000001

Assembly 如何组装ARM11内核

我有一块S3C6410板。S3C6410具有ARM1176JZF-S内核。 我尝试使用IAR v6.4?为该IC编译一个演示项目?。 项目中存在包含以下代码的程序集文件: IMPORT _main ; C entrypoint for Steppingstone loader. AREA |C$$code|, CODE, READONLY global Start Start b _main DCB

Assembly 将ARM部件助记符转换为字节

我是汇编语言的新手,我需要帮助理解助记符是如何直接转换成字节的 例如,我有一句台词说 b 0x00002B78 它位于内存地址0x00002A4处。如何将其转换为EA00004B(上述程序集的字节表示)?我的印象是,“EA00”表示组件的“b”分支部分,但是“004B”呢?如果有人能大致了解这一点和资源,以找到转换等,将不胜感激。我试着用谷歌搜索这个,但我真的不确定到底该用谷歌搜索什么。我在谷歌上搜索的内容没有任何帮助。您要查找的所有信息都在。如果您查找b指令,您将看到它的编码及其工作方式。以

Assembly 溢出vs携带标志,真正的基本术语

我一直在试图弄清楚溢出和携带(对于ARM7,但足够基本,我指的是适用于任何东西的术语) 我想我终于有了它——但我想检查一下我的“真正的基本理解”是否正确,所有的复杂性是否都消除了,它是否真的可以归结为: unsigned => V = 0 V = 1 => bit n is incorrect C = 1 => bit n+1 'exists' 谢谢,关于溢出,这些状态位与无符号vs Two补码有关 加法本身是符号独立的,这就是二补的美。一个逻辑块可用于无符号和有符号的

Assembly 两个32位有符号数的加法和移位乘法

我需要使用加法和移位将两个32位有符号数字相乘,并将64位数字存储在内存位置$0408-$040F。这两个数字存储在8位存储器中 movb #$1F, $0400 ; the first number is $1F230001 movb #$23, $0401 movb #$00, $0402 movb #$01, $0403 movb #$F8, $0404 ; the second number is $F8012346 movb #$01, $0405 movb #$23,

Assembly 切换前cpu中的值的情况

我知道,当一个示例汇编程序正在运行时,CPU正在逐个执行指令,实际上,由于是分时操作系统(例如Windows 7或XP),CPU正在所有程序之间切换并执行代码(从这个程序执行一个代码,然后从内存中的另一个程序执行一个代码) 当尚未完成该进程时,CPU在何处保留上次执行指令的寄存器值: program A: ( mov al,23h mov bl,32h ......... ......... ) program B: ( mov al,10h mov bl,12h )

Assembly 在MIPS宏中传递值

我一直在学习MIPS作为汇编的入门,最近开始使用宏。我想能够做的是将另一个宏生成的值,或任何特定寄存器中的任何值,传递到另一个宏中。即 .data .macro print_int(%x) #this macro prints a given integer %x li $v0, 1 li $a0, %x syscall .end_macro .macro terminate #this macro terminates a program li $v0

Assembly sparc程序集-添加和添加

我刚刚读了一些关于SPARC汇编的老课程,我不记得“add”和“addcc”指令之间的区别(比如sub和subcc) 你能给我解释一下这种区别吗 谢谢,cc后缀表示指令设置条件代码(Z、N、V标志)。因此,add执行添加而不设置条件代码,而addcc执行添加并设置条件代码

Assembly 如何用重复的字节值填充64位寄存器 我用Visual C++ 2010和MASM(“快速调用”约定)做一些X64程序集。

假设我有一个C++函数: extern "C" void fillArray(unsigned char* byteArray, unsigned char value); 指向数组的指针将以RCX为单位,字符值将以DL为单位 如何使用DL向RAX中填充值,以便如果我要mov qword ptr[RCX],RAX并按数组打印,所有值都将等于“char value” 请注意,我并没有试图编写我的编译器代码,我只是在学习。您可以乘以0x0101010101010101将最低的字节复制到所有其他字节

Assembly 确定X86程序集中的内存访问时间

我试图确定访问两个内存地址的时间,这两个地址之间有一个特定的增量。我的代码必须混合使用x86和C,并将“裸机”运行(没有任何操作系统;编辑:我实际上是在修改memtest),以获得最精确的结果 我比x86更习惯于ARM组装,因此我可能犯了一些错误(我想知道,为什么mov在x86中做了这么多不同的事情)。我的代码如下 inline unsigned timeread (ulong addr, ulong delta, int iter) { ulong daddr; int i;

Assembly 数据字符串

出于好奇,我一直在OSX上摆弄NASM,似乎遇到了一些问题。我试图将多个字符串及其长度存储在.data部分并打印出来 ; nasm -O0 -f macho64 -o problem.o problem.asm ; ld -macosx_version_min 10.7.0 problem.o -o problem ; ./problem section .data KmsgHello: db `Hello, assembly!\n` KmsgHelloLen:

Assembly 8086代码段的大小

我得到了CS、DS、SS、ES、SP、BP、SI、DI、AX、BX、CX、DX的寄存器值。如何查找代码段的十六进制字节大小?您不能 8086现在已经相当过时了,但有些龙还记得它。这是一个16位的处理器,但有20位的地址:4段寄存器(CS、DS、ES和SS)的值移位了4位,偏移量被添加到其中。总可寻址内存为1 MB 任何段的最大大小为65536字节(0x10000)。但处理器不知道代码段的实际大小。没有内存保护,它被允许在代码段的中间写入数据(可能是正确的或错误的),这取决于程序员知道为什么:-(

Assembly 读取键盘并使用微处理器显示

MTS-88.C和I/O板-08板上有8(八)个7段显示器和20个键盘。显示器编号为7-SEG.1至7-SEG.8,分别连接至端口B的PB7至PB0线路。要在7段显示器上显示字符,必须将字节写入端口B。MSB 4位是7段显示器的地址,LSB 4位是数据。因此,如果我们将58小时写入端口B,则第6个7段显示器将显示数据8 20个键盘从P01到P20编号,排列成5列4行。最右边的列连接到PB0,而最左边的列连接到PB4。最上面的行连接到PA0,而最下面的行连接到PA3。为了检测按键,首先必须通过向端

Assembly SM5 HLSL组件:在什么情况下,bfi&x2B;一个移位与两个移位和or/xor具有相同或更好的效率?

上下文:我正在重复进行逐位旋转,我发现标准旋转可以通过移位和bfi进行复制。注意:当我编译使用FXC的HLSL文件时,它为此使用了大量bfi指令 当我使用标准(shift、shift、xor)运行自己的着色器程序集的字节码,并使用shift/bfi rotate将其与自己的进行比较时,标准执行得更好 然而,在运行等效的FXC编译字节码时,我发现shift/bfi的性能与shift/shift/xor相当,甚至更好 是否有某种方法来构建shift/bfi,以最大限度地提高其性能?某种寄存器使用或指

Assembly 在NDISSM输出中,内存引用作为指令参数的含义是什么?

我正在用NDISAM反汇编程序。我的问题是,在调用指令和跳转之后,内存引用意味着什么 它们是相对于指令的还是从程序开始计算的?它们指的是NDISAM输出文本第一列中的地址吗?它指的是输出第一列中给出的地址,通常也是指令相对于文件开头的位置。程序不知道代码将加载到内存中的什么位置,因此通常无法告诉您目标在内存中的实际位置 请注意,这仅适用于近直接跳转和调用指令(包括条件Jcc跳转指令)的目标地址,因为这些地址是相对于指令编码的。其他指令中的地址不使用相对编码,因此显示的地址不引用第一列中的地址。相

Assembly 是否有一个通用的<;类型>;程序集中可以从标签推断类型的ptr指令?

汇编中是否有可以从标签推断类型的通用ptr指令 例如,我们有一个类型的变量,它可以是byte、word或dword,我想把它移到一个寄存器中,如果我们不知道它的类型,有没有办法 .data VAR1 dword 2 VAR2 byte 3 .code mov eax, ? ptr VAR1 mov eax, ? ptr VAR2 不是真的,您可能已经能够使用movsx,但是如果VAR1或VAR2与寄存器EAX的大小相同(32位),它就会抱怨。@RossRidge最近的一个回答可能会建议使用MA

Assembly 问题发生变化。word到。eq

我正在上关于微控制器的实验课(我们使用的是FRDM-KL25Z128),我在指令.word和.eq方面遇到了问题 首先,教授给我们的示例代码旨在使FRDM板上的红色LED闪烁,如下所示: 在修改代码使三个LED同时闪烁并发出白光之前,我们需要回答一些问题,但这不是问题所在 在代码的底部,所有寄存器地址都是用.word指令定义的(因为我们使用的是32位字)。其中一个问题是回答我们是否可以将指令.word替换为.eq 我的第一个想法是,是的,我可以将.word替换为.eq,因为最后一个指令是为标签指

Assembly 将值写入8087';将堆栈的顶部添加到内存中的变量

我刚刚在我的旧286计算机上安装了一个数学协处理器,我一直在汇编它的指令集 我拥有8086 CPU的《英特尔程序员参考》,其中有一个很长的章节介绍8087的编程。我从那一节学到了几乎所有我需要知道的东西,但它从来没有提到如何将一个值从8087的寄存器堆栈转移到内存变量中 除了弹出堆栈并在寄存器堆栈内交换数据外,似乎没有任何8087指令用于移动数据 那么,如何将st(0)转换为内存中的临时实数变量呢 您是否错过了FST的FST指令?对于拥有真正的286,您投了赞成票。对于8087的指令,您仍然可以

Assembly 提取地址未在字边界上对齐,MIPS32

我有一个简单的mips32程序: .text .globl main main: lw $s3,10 move $a0,$s3 li $v0,1 syscall li $v0,10 syscall #program termination 我所要做的就是加载并注册$s3编号10,然后打印它。Mars会毫无错误地组装它,但当我点击run时,我得到以下错误: Runtime exception at 0x00400000: fetch address not aligned on wor

Assembly 数据部分中的问号数据在IDA中是什么意思?

我使用IDA分析EXE,发现一些令人困惑的东西。.data部分应该包含初始化数据,因此每个位置都应该有如下内容: var_A db 0h var_B dw 12h 但是我有很多带问号的条目。e、 g .data:00000001400F1680 qword_1400F1680 dq ? ; DATA XREF: sub_14004F8B0+8Er .data:00000001400F1680

Assembly sparc汇编-添加i=0或i=1的指令

从第110页的添加说明: 如果i=0,则添加并添加cc计算“R[rs1]+R[rs2]”。如果i=1,则计算 “R[rs1]+符号(simm13)”。在任何一种情况下,总和都会写入R[rd]” 读取程序集时,如何知道I=0还是I=1?在反汇编代码中,助记符/操作码看起来没有任何变化。i”表示指令中的“立即”值。立即数是常数。你会看到这样的情况: add %g1, 59, %g1 这意味着“将常数59添加到g1,并将结果放入g1” 当i=0时,表示该参数不是立即数。所以这是一个登记册!您将在组装

Assembly 如何连接不在宏定义中的标签?(气体装配机中)

我想这样做: i=0 .rept 3 add rcx,[a?(i*2+1)] i=i+1 .endr 它应该输出以下内容: add rcx,[a1] add rcx,[a3] add rcx,[a5] 我找不到解决这个问题的办法。我不希望它包含在宏定义中。我不相信不使用宏或其他类型的预处理就可以解决这个问题。执行此操作的GNU汇编程序方法可能类似于: .altmacro .macro addmac val add rcx, [a\val] .endm .macro

Assembly tanenbaum计算机体系结构第6册的Hanoi汇编代码

我正在尝试运行tanenbaum计算机架构第6本书中的代码。我键入的代码与这本书完全相同。代码是: .686 .MODEL FLAT PUBLIC _towers EXTERN _printf:NEAR .CODE _towers: push ebp mov ebp, esp cmp [ebp + 8], 1 jne L1 mov eax, [ebp + 16] push eax mov eax, [ebp + 12]

Assembly x86 alp中的十六进制到Ascii转换

我目前正在学习alp(x86)。我最近偶然发现了一个程序,该程序用于显示存储在数组中的字符,基本上是十六进制形式。为了显示字符,我们应该将其转换为ascii,然后再显示它们 ;display procedure for 64bit display: mov rsi,char_answer+15 mov rcx,16 cnt: mov rdx,0 mov rbx,16h div rbx

Assembly 为什么LEA 0x89AB(%A0),%A0在68000程序集中是非法指令

这是编程卡: 为什么LEA 0x89AB(%A0),%A0在68000汇编中是非法指令?根据给出的示例,我推断16位立即数是符号扩展的。因此,我猜索引寻址模式中的16位偏移量也是有符号的。因此,0x89ab是一个无效的偏移量,因为它不适合16位有符号数字。似乎您将x86误认为是m68k(摩托罗拉68000)。它们在很多细节上都不同。寄存器A0来自m68k,但不是x86。@Netch:m68k有一条LEA指令,其助记符与x86相同@彼得科德斯见问题编辑历史:它最初在所有文本中包含“86”。这就是

Assembly 在NASM中RESB、RESW、RESD、RESQ分配多少字节?

DB以1字节为单位进行分配 DW以2字节为单位进行分配 DD以4字节为单位进行分配 DQ以8字节为单位进行分配 因此,我假设: RESB 1分配1个字节 RESW 1分配2个字节 RESD 1分配4个字节 RESQ 1分配8个字节 我说得对吗 报告没有说太多: 3.2.2 RESB和朋友:声明未初始化的数据 RESB、RESW、RESD、RESQ、REST、RESO、RESY和RESZ设计为: 用于模块的BSS部分:它们声明未初始化 存储空间。每个都接受一个操作数,即 字节、字、双字或任何要保

Assembly 手动为gdb创建调试符号

简介。对于我的编译器课程,我必须把一些语言翻译成汇编语言。现在我的代码有一个segfault,我很难调试它。拥有监视变量的能力将大大简化过程,但最终的asm代码只有寄存器及其派生 问题。如何手动为gdb创建调试符号?我相信我能传播所有必要的信息。将创建单独的文件还是将其作为asm的一部分?在前一种情况下,如何让gdb知道该文件 有一些手册的链接就足够了。我搜索了一个,只找到了“gcc-g”和一些关于单独生成符号文件的问题。它通常是asm的一部分,带有特殊指令以发出一部分调试信息。查看.c文件上的

Assembly 程序集8086中的阵列大小未知

我需要从用户那里获取字符串输入,但我不知道他将输入的字符串的大小,我需要在内存中准备一个数组作为字符串的大小,因为我使用的是中断21h,ah=0ah。 所以我的问题是,如果我不知道字符串的大小,如何获取字符串的输入? 我还能用别的中断吗?我搜索了,但什么也没找到。我建议您创建一个固定大小的缓冲区,并使用循环直接输入字符 通过这种方式,您可以检查用户输入的字节数,并在该数字超过缓冲区大小时终止 简言之: 创建具有足够大小的缓冲区 抓取一个字符直到 这是一次断线 输入的字符数将超过缓冲区 不要

Assembly 如何使用asm在C中执行DCD?

我正在尝试执行ARM C代码中的ASM指令DCD 0xf7f0a000 以下是我尝试过的方法和错误: __asm("DCD 0xf7f0a000"); 错误:#3061:无法识别的指令操作码 错误:隐式物理寄存器R0应定义为变量 错误:隐式物理寄存器R1应定义为变量 更新: ARM编译器版本:ARM编译器5.06更新6 PS:我正在尝试通过执行未定义的操作生成异常。ARMCC从供应商处获得了非常高质量的文档 您没有指定ARMCC的版本,很明显,自从我使用它(大约15年前)以来,情况发生了变化

Assembly Can a“;推动&x201D;说明';是否可以使用其他说明执行s操作?

目前在我看来,我们拥有“Push”这样的指令的唯一原因是用一条指令替换多个MOV和算术指令 是否有“推送”所做的事情不能通过更原始的指令来完成 “PUSH”只是编译成多条机器代码指令的单个助记符吗?PUSH是一条真正的机器指令(),而不仅仅是一条汇编宏/伪指令。例如,push-raxis的单字节编码为0x50 但是您可以使用其他指令来模拟它,如sub-rsp、8和mov存储。(这对于像x86这样的CISC机器是正常的!)例如,请参阅 为了精确地模拟它(不修改标志),可以使用LEA而不是ADD/S

Assembly nasm指令应为inb outb

编译以下nasm代码时出错: global _ports_read global _ports_write extern _ports_port extern _ports_data section .text bits 64 _ports_read: inb [_ports_data], [_ports_port] ret _ports_write: outb [_ports_data], [_ports_port] ret 错误是: .../ports

Assembly 程序集x86返回(ret)不工作

最近我开始学习汇编8086,主要是出于好奇 汇编中的输入只允许您键入一个字符,因此我尝试在汇编8086中制作一个程序,允许您输入多位数整数输入,以“空格”(“”)结束输入,然后添加数字并打印值 我看到可以使用push和pop将参数传递给过程,但我尝试使用它们使过程返回一些内容并将其存储到变量中,根据我对汇编8086的了解,我无法想象使用ret实现这一点的方法,所以…无论如何,我制作了一个过程,但是由于某些原因,过程末尾的ret似乎不起作用,并且过程运行了无限次 到目前为止的代码: .model

Assembly 我自己的引导加载程序出现问题,从.bin到.iso的文件转换失败

目前,我试图用nasm编写自己的引导程序,但并没有真正成功 问题是,我想将.bin文件转换为.iso或其他图像文件,以便VM识别它 但是我的转换程序说文件坏了 My.bin文件是在Linux下使用NASM编译器编译的,大小正好为512字节 nasm boot.asm -f bin -o boot.bin 我希望任何人都能帮助我= 先谢谢你 请向.iso致以最良好的敬意,因为这是一个过度的.iso,引导加载程序的填充使.bin与软盘扇区大小相同,因此请使用软盘映像: #Prepare an em

Assembly 需要帮助将正确的结果输入0500地址吗

编写一个汇编语言程序进行搜索 向后通过内存位置F454h-F503h 用于包含ASCII值的内存位置 对于小写字母“a”,将总数放入 位置0500h。让程序在凌晨2点开始 记忆。汇编程序,将其加载到 模拟器,运行它,并验证它是否工作 没错 循环: 注: 当我在分级机上运行时,我没有得到正确的结果,因此非常感谢您的帮助。有两件事需要考虑 您希望起始地址为F503h,结束地址为 是F454h 理想情况下,您的循环退出条件应该测试索引为零或负(BNE或BPL)。这是为了避免使用比较(CPX) 如果测

Assembly 为什么.COM程序中只有一个程序段,用于程序代码和堆栈?

我正在研究.EXE程序和.COM程序之间的区别。 EXE对我来说是合乎逻辑的,堆栈位于与程序代码相关的另一段中(事实上,堆栈是强制的,并用.stack指示此限制),因此,当我转到插入值时​​在堆栈中(在.EXE中),使用与程序不同的段,我不会混淆这两个 例如: SP = 0400 SS = 3996 CS = 3995 IP = 0000 堆栈的容量为1024字节(400h),并引用堆栈段3996h,这与代码段3995h不同。所以我确信数据不会被混淆 但我不明白的是,当我不得不处理.COM程序

Assembly 索引寻址的语法(以及通常的前导逗号)

我已经看到了以下关于如何在汇编中普遍使用索引地址的定义(摘自Group Up的《编程》一书): movl起始地址(,%INDEXREGISTER,WORDSIZE) 我在阵列上使用了类似的方法(我最近的问题)来执行以下操作: movl my_array(,%rdi,4), %r10 # move the int at the start of my_array into %r10 第一个逗号前的第一个元素是什么,或者通常为空?“起始地址”总是一个变量名,还是经常是其他名称?是否使用过绝对内存地

Assembly 将程序集寄存器视为无符号寄存器与有符号寄存器

所以我知道在汇编中,每个寄存器只包含一系列位。但是,这些位序列可以解释为有符号或无符号 有没有办法强制汇编程序将寄存器中的一系列位解释为无符号/有符号的?将全局无符号C变量加载到汇编寄存器后,所有寄存器最终都被解释为无符号量,但我需要将其解释为有符号量。您尚未指定CPU体系结构。但通常情况下,您会使用单独的说明。例如,在x86上,JB是“低于(未签名)时跳转”,而JL是“低于(签名)时跳转”。另一个好的副本:。我发现的大多数副本都是x86。我投了一个Z80一个;我见过一些MIPS,但在谷歌的第一

上一页   1   2    3   4   5   6  ... 下一页 最后一页 共 482 页