ArcherJhon 发表于 2012-5-15 18:08:26

汇编中CALL的地址和机器码那地址为什么不是一样的?

{:5_96:}我记得小甲鱼说过是什么位移算的.具体是怎样的忘记了。

谁能帮帮我{:5_111:}

宫志强 发表于 2012-5-16 20:54:27

call命令下   只有call 标号

宫志强 发表于 2012-5-16 21:00:35

call命令下 只有call 标号 即:
call s是依据位移进行转移的call指令
因为calls== push IP       jmp near ptr s   
即将IP压入堆栈中,然后是一个近转移 ,也就是说只有这一个call命令
其他的例如callax
相当于   push IP    jmp   16 位reg   

宫志强 发表于 2012-5-16 21:12:24

刚刚理解错你的意思了,重新解答:
你上面题目里所说的call中的地址是 要跳往(jmp)地址的ip或者 cs:ip
而你上面题目里的机器码有两种可能;
第一:如果是近转移或者短转移,则这个机器码是标号地址与call指令后第一个字节地址之差。
第二:如果是段间转移,例如call far ptr s,call ax, call    word   ptr   ds:【bx】 则你题目里所说的机器码和你题目里所说的地址是相同的。


希望能帮到你,写的有点乱,希望你自己调试一下。
页: [1]
查看完整版本: 汇编中CALL的地址和机器码那地址为什么不是一样的?