Auckland 发表于 2013-2-19 10:47:55

关于jmp指令对应的机器码求教前辈

本帖最后由 Auckland 于 2013-2-19 10:49 编辑

assume cs:code
data segment
                db 0,0,0
data ends

code segment
      start:mov ax,data
                              mov ds,ax
                              mov bx,0
                              jmp word ptr
                              
code ends

end      start

在debug中编译

请问为jmp word ptr 对应的机器码FF6701中的6701该怎么理解,请熟悉汇编的朋友解释下谢谢!!

メ㊣逆ご帅☆ 发表于 2013-2-19 14:55:04

我特意把BX+1这个地址中的值改了改,机器码还是没变,应该和那个无关
那么67应该是BX的意思吧,01应该就是后面的+01了
FF67 01       JMP
FF67 02       JMP

Auckland 发表于 2013-2-21 09:42:53

メ㊣逆ご帅☆ 发表于 2013-2-19 14:55 static/image/common/back.gif
我特意把BX+1这个地址中的值改了改,机器码还是没变,应该和那个无关
那么67应该是BX的意思吧,01应该就是 ...

我查了下资料,发现那个67在opcode中的意思是表示要操作的数据是16位。还是谢谢你!!!

メ㊣逆ご帅☆ 发表于 2013-2-21 10:08:36

Auckland 发表于 2013-2-21 09:42 static/image/common/back.gif
我查了下资料,发现那个67在opcode中的意思是表示要操作的数据是16位。还是谢谢你!!!

哦,感谢你告诉我哈。
补充知识

メ㊣逆ご帅☆ 发表于 2013-2-21 10:12:39

Auckland 发表于 2013-2-21 09:42 static/image/common/back.gif
我查了下资料,发现那个67在opcode中的意思是表示要操作的数据是16位。还是谢谢你!!!

不过我有一个疑问,为什么

67变成66了,应该还有其他意思吧。

青草 发表于 2013-2-24 08:29:15

jmp word ptr 对应的机器码FF6701中的6701该怎么理解,

FF 67 01 后面的67 01   高地址在后 低地址在前 翻过来看看0167 就是你要跳到目的地址的偏移或位移,至于0167怎么来的 应该看下"DS:BX+1"处的值是多少从你的原码里看的话 应该是你的数据段出错了 就是你定义的数据段是空的 可DEBUG加载时你的数据段内有数据,还有那个0167应该为段内近转移 所以0167表示后移167个字的位移 段内近转移是16位位移   我说的也不一定对 你可以考虚 debug单步跟踪下看看先跟踪到“mov bx,0”处 在debug中用查看内存命令D 看一下你定义的数据段是否为空 从你源码来看 你的目的是实现代码跳到第一行 形成一个死循环 但实际你却向后跳出去了 注意错误就出现在你的数据段是否为空上面不知道到对不对你一步步跟踪下看看


页: [1]
查看完整版本: 关于jmp指令对应的机器码求教前辈