回 帖 发 新 帖 刷新版面

主题:问下大家~~地址差是以字节为单位的吗??

RT~~
还有个问题:一般一条指令长度为多少呢?是固定的值还是有变化的啊??@@[em1]

回复列表 (共10个回复)

沙发

问下大家~~地址差是以字节为单位的吗??
不是

8086物理地址:20bit,不是字节长度
不过8086的偏移地址、段地址、IO地址是字节长度

一般一条指令长度为多少呢
是固定值,都是16bit
你还没有看完教科书啊,书上写的明明白白,教科书快被我翻烂叻~~

板凳

呵呵,不好意思啊....
关键是有些问题不是很懂,比如:
[color=FF0000]短转移中,以字节作为地址差因为一个字节表示的地址差范围是-128~127,所以如果以转移指令本身为基准的话,短转移的范围在-126~129之间[/color]
这句话我就不是很明白,差的那个"2"....
有位朋友给我回的内容是:
[color=0000FF]以无条件转移指令的下一条指令为基准的话,那么短转移的范围就是-128至+127;如果以无条件转移指令本身为基准的话,那么短转移的范围就是-126至+129.总之就是一个指令长度的问题
其次,地址差是以字节为单位的(你所说的-128~127,-126~129实际上就是256,亦即相差(地址差)256个字节),-128~-126刚好相差2,亦即2个字节(即通常情况下一条指令的长度)[/color]
所以我就又有点搞不懂了....不是说一个字节可以表示的范围是-128~127吗?这不是已经换成10进制的了吗?这种情况下差的"2"表示2个字节啊???

3 楼

举个例子,下面的是源代码:
code segment
    assume cs:code
start:
    mov ax,1
    jmp L1
    mov ax,2
L1:
    mov ax,4c00h
    int    21h
code    ends
    end    start
下面的是DEBUG的结果,也就是源代码对应的机器语言。
1435:0000 B80100        MOV     AX,0001
1435:0003 EB03          JMP     0008
1435:0005 B80200        MOV     AX,0002
1435:0008 B8004C        MOV     AX,4C00
1435:000B CD21          INT     21
-
对比一下,你应该很明显的看到,对于短跳转Jmp L1对应的机器指令是EB03H.
短转移指令jmp 对应的机器指令是EBH,后面的03H是偏移量,也就是问的问题的关键所在。
03H是这样计算出来的:
03h=Offset L1(也就是0008h)-刚执行完jmp指令后的ip数值(也就是0005h).
要说明的是,如果是长转移,jmp指令的机器代码不是0EBH,具体多少自己可以debug看看。
对于Intel 的CPU指令,不同的指令有不同的长度。

4 楼

谢谢楼上的!
能不能针对我用"红色"标出的那段话给我解释以下呢??谢谢[em1]

5 楼

上面我已经解释的很清楚了,想一下EB03H中的03是怎么来的。
想清楚了,你的所有问题都解决了。
其实,这个过程是编译器完成的,我们大可以不必理会。

6 楼

03H是目标地址(0008H)减去JMP指令的下一条指令的地址(0005H)得到的是吧??
这是以下一条指令为基准,如果以JMP指令本身为基准的话
两种情况下的-128~127与-126~129之间相差的"2"..真的,我还是不太明白..只是想弄明白点...也许你觉得这样已经很清楚了,可我真的还是不太懂..挺急的,呵呵,太菜了....-_



7 楼

就想你理解的一样,2就是短转移指令的长度。
你在哪个地方要用到这个知识点?

8 楼

噢,其实就是在看书的时候看到这个了,就是杨季文编的<<80x86汇编语言程序设计教程>>,想来想去也不明白..感觉非常不爽~~呵呵
书的作者先是说:
[color=0000FF]如果地址差是一个字节,那么以无条件转移指令的下一条指令为基准的话,那么短转移的范围就是-128至+127[/color]
这个我可以理解,-128~127刚好是一个字节表示的范围嘛,可他马上又说:
[color=0000FF][color=FF0000]如果以无条件转移指令本身为基准的话,那么短转移的范围当然就是-126至+129[/color][/color]
介个....-_我就想怎么差2呢??这个"2"应该是10进制下的"2"吧??一条短转移指令的长度是"2"??感觉作者的意思好像就是只要是这种情况,都会是相差"2",短转移指令的长度总是"2"吗??指令长度有用10进制表示的吗??
PS:楼上如果被偶的"BC问题"搞得快崩溃的话,我先在这边说声不好意思哈~呵呵

9 楼

我建议看沈美明,温冬婵的《80X86汇编语言程序设计》,
网上还有一本很好的汇编电子书,地址:
http://www.mdjx.net/course/hep/huibianyuyan/course.htm
更多的基本资料可以去www.aogosoft.com下载。

10 楼

恩,谢谢楼上的!!
[em1]

我来回复

您尚未登录,请登录后再回复。点此登录或注册