【发布时间】:2015-01-17 19:57:05
【问题描述】:
我正在尝试研究在程序集中定义标签之间的区别,这是一个示例
ALabel: db 'Testing'
AAnotherLabel: dw 'Testing'
现在,让我将它们加载到 32 位寄存器中:
mov eax, [ALabel]
mov ebx, [AAnotherLabel]
通过 gdb 调查,我发现 eax 和 ebx 的所有子寄存器都包含相同的值,请看这里:
info register eax
0x64636261 //dcba
info register ebx
0x64636261 //dcba
它们是一样的!
在 Jeff Duntemann 的书(Assembly Language step-by-step programming with Linux)中他展示了将字和双字放入寄存器的示例,但由于某种原因加载了偏移量(即像这样的值的地址)
DoubleString: dd 'Stop'
mov edx, DoubleString
对 edx 内容的调查显示它包含一个地址,可能是字符串中前四个字母的地址,与仅第一个字母的地址相对,尽管我在这里推测。
我想澄清一下这里到底发生了什么,这个语句实际上是否将字符串中第一个字母的地址加载到寄存器中:
Fin: db 'Final'
mov ecx, Fin
【问题讨论】: