TL; DR
是[memloc]
是指值还是地址?如果它是指任何一个,那么为什么它的值都是和的地址? (见下面的代码,行4和5)NASM - 这是地址,价值?
全部问题...
对不起,长的问题。 我很困惑在NASM标签解引用。以这个例子:
01| section .text
02| ; exiting the program with exit code "15"
03|
04| mov [memloc], 15 ; move 15 into memloc
05| push [memloc] ; push memloc on stack
06| mov eax, 1 ; prepare exit syscall
07| call kernel ; invoke syscall
08|
09| section .data
10| memloc: dd 0 ; let's say this is at address 0x1234
当我运行它时,它退出代码为15.它的工作原理!
...但是为什么?不应该memlock
没有大括号第4行,其中push
大概预计目的地?
例如:
在线路的mov
指令04
值15移动到memloc的ADDRESS:
mov [memloc], 15 ; move 15 into mem @memloc
但线05
推储存在memloc到堆栈的值:
push [memloc] ; push value @memloc on stack
那么,是[memloc]
的值(15
)还是地址(0x1234
)?理论上如果你mov memloc, 15
取而代之会发生什么?
预先感谢您。
如果操作对待它的操作数不同根据您是否把括号围绕它,然后我猜测我的问题是'机器代码如何区分地址和值?' –
它没有,这是你必须在它周围加上括号的原因。 – Siguza