希望这不是一个愚蠢的问题,但我试图围绕汇编指针.
究竟有什么区别:
mov eax, ebx
Run Code Online (Sandbox Code Playgroud)
和
mov [eax], ebx
Run Code Online (Sandbox Code Playgroud)
何时应该dword ptr [eax]使用?
另外,当我尝试这样做时,mov eax, [ebx]我得到一个编译错误,为什么会这样?
说明除非我们在将立即数添加到存储在内存地址的值时指定大小运算符(例如byte或dword),否则NASM 将返回错误消息。
section .data ; Section containing initialized data
memory_address: db "PIPPACHIP"
section .text ; Section containing code
global _start ; Linker needs this to find the entry point!
_start:
23 mov ebx, memory_address
24 add [ebx], 32
Run Code Online (Sandbox Code Playgroud)
………………………………………………………………………………………………………………………………………………………… ......
24: error: operation size not specified.
Run Code Online (Sandbox Code Playgroud)
公平的公平。
我很好奇为什么会这样。由于以下两段代码将产生相同的结果。
add byte [ebx], 32
或者
add dword [ebx], 32
那么它有什么区别呢?(除了对为什么在这种情况下使用 dword 没有多大意义之外)。仅仅是因为“NASM 这么说”吗?还是这里有一些我缺少的逻辑?
例如,如果汇编程序可以从寄存器名称解密操作数大小,add [ebx], eax那么为什么不对立即值执行相同的操作,即继续并预先计算立即值的大小。
什么要求意味着在将立即值添加到内存地址处的值时需要指定大小运算符?
NASM 版本 2.11.08 架构 x86