【发布时间】:2021-05-28 13:17:39
【问题描述】:
我们是否将变量或寄存器括在括号中以指定汇编中的指针?
示例1;
MOV eax, array+4
LEA eax, [array+4]
示例2;
section .data
array DB 116,97
section .bss
variable RESB 0
section .text
global _start:
_start:
mov eax,[array]
;exit
mov eax,1
int 0x80
我在编译或运行上述代码时没有遇到任何错误。数组的零索引地址是否放在EAX寄存器中?
例子3;
INC [variable]
编译上述代码时,我收到“未指定操作大小”错误。以及为什么不能将命令用作INC variable?
示例4;
section .data
array DB 116,97
section .bss
variable RESB 97
section .text
global _start:
_start:
mov eax,4
mov ebx,1
mov ecx,variable
mov edx,1
int 0x80
;exit
mov eax,1
int 0x80
而且这段代码不工作。
【问题讨论】:
-
[]表示内存引用。没有它,它是一个可以是地址的文字数字。nasm不跟踪变量类型,因此如果无法推断,您需要告诉它大小。所以inc byte [variable]会起作用。inc variable将不起作用,因为它会尝试增加文字常量(variable的地址)。最后一个示例#4 正在运行,但您正在从variable打印一个零字节。也许你的意思是mov ecx, array。 -
我不明白你所说的#4 是什么意思。我到底错在哪里?谢谢你的其他事情。 @小丑
-
不清楚您希望示例 #4 做什么。它确实有效。它打印
variable的第一个字节,这是一个二进制零。也许你想要db 97而不是resb 97?这只能在.data中工作,因为.bss全为零。resb 97分配 97 个零。
标签: pointers assembly x86 nasm