. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第9章中181页程序9.3问题  [已解决] 回复[ 4次 ]   点击[ 367次 ]  
powlin1991
[帖 主]   [ 发表时间:2012-03-23 14:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:5
注册日期:2012-03-22 15:34
刚看到程序9.3
assume cs: code
code segment
start:   mov ax,0
         mov bx,0
         jmp far ptr s
         db 256 dup (0)
       s:add ax,1
         inc ax
code ends
end start

有一个问题想请教一下:
    图下面的文字中叙述:jmp far ptr s 所对应的机器码为 EA 0B 01 BD 0B,其中包含转移的目的地址。
    那么我的问题就是,jmp下面被定义了256个0,我们又是如何得知这个机器码里面有转移的目的地址呢?
    小问题,谢谢解释。
e56004474
[第1楼]   [ 回复时间:2012-03-23 17:55 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
jmp far ptr s 

指明是段间 转移了,0B 01 BD 0B,是CS=0bbdH,ip=010bH.
far prt 指明了用标号的段、偏移地址修改cs和ip了。
powlin1991
[第2楼]   [ 回复时间:2012-03-23 22:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:5
注册日期:2012-03-22 15:34
回复:[第1楼]
------------------
你好,我的意思是s这句,我们是如何得知它的偏移地址在jmp far ptr s的机器码中呢?
如果是自己算就显得很麻烦,所以我想应该是有方法知道的,但是我不大清楚。
kingsgg
[第3楼]   [ 回复时间:2012-03-23 23:41 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:6
注册日期:2012-02-25 16:01
我的理解是这样的,far ptr 这句书中已早有说明是段间转移,又称远转移,然后再看图,JMP FAR PTR 这句指令的地址是0BBD:0006,后边EA0B01B0已经好明显说给我们知,他要转移的地址,如果说中间相隔的256个字节,我是这样理解的,010B-0006=105,十进制是261,当CPU读入jmp far prt s指令到寄存器的时候,IP将指向下一条指令(0BBD:000B),就是说jmp far prt s 指令占5个字节,261-5=256,刚好是下条指令db 256 dup (0)的长度,所以cpu执行jmp far prt s 指令就会去到0BBD:010B的地址处.
本人也是新手,不知理解得对不对,请各位老师点评!
powlin1991
[第4楼]   [ 回复时间:2012-03-27 17:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:5
注册日期:2012-03-22 15:34
此贴由 贴主 于 [ 2012-03-27 17:24 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(e56004474):2分   3楼(kingsgg):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved