andyzn 发表于 2007-10-31 21:34

mik 发表于 2007-10-31 21:59

原帖由 andyzn 于 2007-10-31 21:34 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
pushb 0x01 指令执行后
esp应该是减少1,还是减少4呢?
是下面两种情况的哪种呢。
----

push 组合有以下:
push word / double word / quad word



若 push 0x1 (1 byte imme) 这种情形的话:

0x1 会被“带符号扩展至 word / double word /quad word”

至于何时为 word / double word /quad word?

生成的 push opcode 不变,会根据处理器当前的模式(16/32/64)或者定义的 stack segment descriptor 的 D/B 位而自动转化

[ 本帖最后由 mik 于 2007-10-31 22:28 编辑 ]

andyzn 发表于 2007-10-31 23:23

mik 发表于 2007-10-31 23:30

原帖由 andyzn 于 2007-10-31 23:23 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
象这样push byte al

不行!push al是错误的指令。 根本没有这个指令形式

andyzn 发表于 2007-10-31 23:40

mik 发表于 2007-11-03 18:38

原帖由 andyzn 于 2007-10-31 23:40 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
呵呵,知道了

这个是AT&T的语法

hoho

不是 AT&T 与 Intel 语法区别的问题,是 push 这条指令不支持操作数为 8 位寄存器的问题

folklore 发表于 2007-11-03 20:26

4-->code32
2-->code16

mik 发表于 2007-11-04 00:13

原帖由 folklore 于 2007-11-3 20:26 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
4-->code32
2-->code16

push 0x1 这条指令是不依赖编译模式的(.code32 / .code15)
页: [1]
查看完整版本: 请教AT&T汇编pushb指令