以下代码
section .data
Snippet db "KANGAROO"
section .text
global_start
_start:
mov ebx, Snippet
add byte [ebx], 32
将BX中的内存地址所引用的数字加32。但是,添加后的字节说明符是什么?我的书说这意味着我们只在EBX中向内存地址写入一个字节。但我不太明白这意味着什么(我是汇编程序的初学者)。将字节写入内存地址是什么意思?写多个字节意味着什么?
答案 0 :(得分:4)
byte [EBX],或者在microsoft汇编器的情况下,byte ptr [EBX]告诉汇编器EBX是指向字节大小的变量的指针。只有在使用立即值作为操作数时才需要定义这样的指针类型。如果使用寄存器作为操作数,则汇编器假定大小与寄存器相同,例如mov [ebx],al或mov [ebx],ax或mov [ebx],eax。
答案 1 :(得分:2)
并非所有add
都是相同的操作码。纳斯姆需要知道要发射哪个。如果您说add word [ebx], 32
,则会向[ebx]
和[ebx + 1]
添加16位32。同样适用于add dword [ebx], 32
。由于16位或32位32的高位将为零,因此在这种情况下实际上不会产生任何差异(存储32位需要更多的字节),但Nasm仍然需要知道要发出哪个操作码