JMP指令的机器码问题?
求教这个JMP的机器嘛,与0123H这个IP地址是如何对应的? 系统是翻译过去的 只是说这个数据表示这个指令 http://www.doc88.com/p-1127282654994.html
谢谢楼的回答,这个图我看过,也知道如何换算,但这里的IP应该是0123H,但这个FF260000,换成二进制,是00100110吗? 小佛天下 发表于 2017-1-6 19:48
谢谢楼的回答,这个图我看过,也知道如何换算,但这里的IP应该是0123H,但这个FF260000,换成二进制,是001 ...
ff26 应该是固定的,表示这种寻址方式
后面的0000,表示这种寻址方式的偏移地址
哦,但如果FF26是固定的,0000是偏移地址,但这个程序运行的结果是IP=0123H,也就是说,JMP转到0123的,这个在机器码中没有体现吗?
挺有意思 ,在ds:里换了好几个值,但JMP的机器码都没有变,依然是FF260000,这是为什么会固定的? 引自《汇编金手指》:
<2> 段内间接转移指令: JMP OPRD
例如: JMP BP ; 转向(SS):(BP)
JMP JNEAR ; 转向(CS):(BX)+JNEAR
JMP WORD PTR ; 转向(CS):(BX)+(DI)
<4> 段间间接转移指令:JMP OPRD其中的OPRD为存储器双字操作数.段间间接转移只能通过存储器操作数来实现.
例如:指令JMP DWORD PTR,其操作数是一个双字类型的存储器操作数,它指向数据段DS,段内偏移为(BX).从这个DS:BX开始的前两个字节中,存放了目标地址的段内偏移值,后两个字节中,存放了目标地址所在的新的段的段基址,分别将它们送至IP及CS,便形成了新的转移地址.
楼主的指令 JMP WORD PTR DS:
实际上在编译器内只能认为是“段内”跳转,因为读取的是WORD字单元,但是又强制指定了DS段。本应执行的跳转是指向CS:0的,但是这里因为强制指定了DS段,所以出现了奇怪的现象……至于FF26这个段地址如何而来,只有天知道……
正确的指令应该是: jmp dword 或者jmp dword ds:
这样才能读取ds:0中的段地址与偏移地址!
{:10_266:}{:10_266:}来赚点积分.....
那个jmp word ptr ds:所对应的机器码是FF260000是在合理不过了,编译时总不会先找出ds:存放的值再跳到那个地址吧,这个代码是通用的阿,记录成跳转到ds:所存放的值的位置是最适合也跟原本写的代码最相关的阿,跟里面存放什么没关系吧,代码并没有先后顺序的关系阿,可以直接跳转到那段执行,而没有先去对ds:赋值阿
页:
[1]