win32汇编中, push 一个数 //编译器如何区分这个数是,地址,还是常数??

win32汇编中,函数调用中,
push 一个数 //编译器如何区分这个数是,地址,还是常数??
call xx

可能 ‘一个数‘为字符串的地址,也可能为常数,,编译器如何区分??

你去看看实际指令长什么样的你就明白了……这两条指令迥异
譬如
push [0ch] = FF 36 0C 00
push 0ch = 6A 0C
虽然都是push,但对应的指令其实是不同的,明白否?追问

你这种方法不行,,,

.386
.model flat,stdcall
option casemap :none

.data
x db 'adf'

.code
start:

xor eax,eax

;当为0 时,机器码 6A00
;当为00062250时,机器码6850220600
push 0 ;push 00062250

;机器码 6800204000
push offset x
xor eax,eax

ret
end start

追答

你是要写的时候区分,还是问编译器怎么区分的?
写的时候区分 那好办push [addr]这是地址的,push ins这是立即数的

追问

编译器是怎么区分,,立即数和地址的?

追答

http://blog.csdn.net/crazyvoice/article/details/5831857

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-04
地址和常数 都是一个值。 是一样的东西,
相似回答