|
主题 : : 为了这个问题我0:39分还发贴 望大哥大姐解决 9.4章似乎说的不对 [待解决] |
回复[ 5次 ]
点击[ 228次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-04-12 00:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-18 15:24 |
9.3章说 jmp 标号 机器码中内容为 EA相对位移
但是我看到9.4时候 。。中的实例如下:
assume cs:codeseg
codeseg segment
start:mov ax,0
mov bx,0
jmp far ptr s
db 256 dup (0)
s:add ax,1
inc ax
codeseg ends
end start
我用按照书上说的用u查看debug 看到jmp指令后的第一个字节的地址为:000B
F:\asm>debug 94.exe
-u cs:0
0B8F:0000 B80000 MOV AX,0000
0B8F:0003 BB0000 MOV BX,0000
0B8F:0006 EA0B018F0B JMP 0B8F:010B
0B8F:000B 0000 ADD [BX+SI],AL
0B8F:000D 0000 ADD [BX+SI],AL
0B8F:000F 0000 ADD [BX+SI],AL
0B8F:0011 0000 ADD [BX+SI],AL
0B8F:0013 0000 ADD [BX+SI],AL
0B8F:0015 0000 ADD [BX+SI],AL
标号s处的地址为:010B
0B8F:0109 0000 ADD [BX+SI],AL
0B8F:010B 050100 ADD AX,0001
0B8F:010E 40 INC AX
按照9.3的说法是:EA位移 中的位移应该为 010B-000B
但是为什么直接就是s的地址?实在搞不懂。。。请大哥大姐们触发下。。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-04-12 09:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
0B8F:0006 EA0B018F0B JMP 0B8F:010B
1.不是书上错,就是你错
2.DEBUG上实验下jmp,jmp short,jmp far ptr看看三者的机器码有什么区别
3.0B8F:0006 EA0B018F0B JMP 0B8F:010B
注意0B8F:0006这个字节的值是EA,你再看看jmp,jmp short是不是也是0xEA
4.有问题先比较一下,多上google查资料,多上DEBUG实验^-^ | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-04-12 12:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-18 15:24 |
我是看了书后面的 jmp附录 反复看了9.3 9.4才写的这个问题 不是随便问的
想不通啊。。我的问题 上面写的很清楚 不过还是谢谢ersaariel | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-04-12 13:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
可能是书上写的不清楚吧EA0B018F0B(jmp far ptr)是绝对地址
而EBXX(jmp short)是相对位移
EAXX和EBXX不同 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-04-12 18:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-18 15:24 |
今天回来我又看了看书 你的说法印证了我的 2次理解。。问题解决ok
谢谢你了 我qq:6686496 好好向你学习 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-04-12 20:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
客气了^-^,论坛里有好多很不错的问题,有时间可以学习下 | | |