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