Pan*_*der 2 x86 assembly gnu-assembler x86-16
我是汇编语言的新手.我最近陷入了悲惨的境地.我创建了一个示例汇编程序,如下所示:
head.h
#define _Length_ 0x0A
Run Code Online (Sandbox Code Playgroud)
电源
movw $_LENGTH_, %ax
movw _LENGTH_, %ax
Run Code Online (Sandbox Code Playgroud)
现在两个MOV语句有什么区别?斧头的价值是什么?
我正在使用Ubuntu和GAS汇编程序(AT&T语法).
提前致谢
$和%AT&T语法中的装饰器使得解析更简单(对于汇编程序,不一定是人类).
我假装你真的写了#define _LENGTH_ 0x0A而不是#define _Length_ 0x0A.
如果没有,则_LENGTH_汇编器将其视为外部符号,并且_Length_是您定义的宏,它永远不会在任何地方被替换,因此汇编器永远不会知道它存在.C预处理器与汇编器完全分离,就像在C中一样.
$总是意味着立即不变.所以movw $0x0A, %ax将0xA放入AX.
没有$作为操作数的数字或符号总是表示内存操作数. movw 0x0A, %ax是从地址[ds:0xA]到AX 的负载(使用NASM表示法作为有效地址).这几乎不是你想要的.
movw $undefined_symbol, %ax将汇编(用于objdump -drwC查看中的重定位信息.o),但在链接时失败.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |