这个,是因为对同一指令的不同解释吧。比如leaesp,[esp]指令,实际结果和leaesp,[esp][00]与leaesp,[esp][00000000]是一样的,但却是三条不同指令:
leaesp,[esp];这是最简单的
leaesp,[esp][00];这个多了个多余的为00的disp8基址
leaesp,[esp][00000000];这个更夸张,用disp32格式来表示个00的多余的基址了
之所以有后面两种不同的表示方式,应该是在功能满足时,尽可能地让指令精简短小些吧。
高级语言的编译器,一般也应该是尽力适应更为精练的指令,生成8D642400:leaesp,[esp][00]这样的指令比较奇怪了。
象上面#6楼提及的8DA424,这是不完整的,完整的应该是8DA42400000000。当然了,译成这样的指令很让人抓狂的,一般来说,也是不应该的。 |