. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  检测点9.1(3)疑惑中,请高手解答  [已解决] 回复[ 4次 ]   点击[ 555次 ]  
tinyparticle
[帖 主] [ 发表时间:2009-07-27 22:54 ] 
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26
用Debug查看内存,结果如下:
2000:1000 BE 00 06 00 00 00 ......
则此时,CPU执行指令:
mov ax,2000h
mov es,ax
jmp dword ptr es:[1000h]
后,(cs)=?,(ip)=?

jmp dword ptr为段间转移,高位存放段地址,低位存放偏移地址
(cs)=(内存单元地址+2),(ip)=(内存单元地址)

疑问一:
根据书P16,对于寄存器AX,AH为高位,AL为低位,前1字节为高位,后1字节为低位
那么对于书P182,高位存放段地址,低位存放偏移地址
(cs)=(内存单元地址+2),(ip)=(内存单元地址)
前2个字节为低位,后2个字节为高位,怎么理解

据书P16,推算出(cs)=00beh,(ip)=0006h
据书P182,推算出(cs)=0006h,(ip)=00beh



疑问二:
尝试用debug跟踪,出现错误,debug给出的答案是(cs)不变,(ip)=1000h


Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.

C:\DOCUME~1\SNUSER>debug
-r es
ES 0BF9
:2000
-e 2000:1000 be 00 06 00 00 00
-a
0BF9:0100 mov ax,2000
0BF9:0103 mov es,ax
0BF9:0105 jmp dword ptr es:[1000]
                        ^ Error
0BF9:0105 jmp dword ptr 2000:1000
0BF9:0108
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0BF9  ES=2000  SS=0BF9  CS=0BF9  IP=0100   NV UP EI PL NZ NA PO NC
0BF9:0100 B80020        MOV     AX,2000
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0BF9  ES=2000  SS=0BF9  CS=0BF9  IP=0103   NV UP EI PL NZ NA PO NC
0BF9:0103 8EC0          MOV     ES,AX
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0BF9  ES=2000  SS=0BF9  CS=0BF9  IP=0105   NV UP EI PL NZ NA PO NC
0BF9:0105 E9F80E        JMP     1000
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0BF9  ES=2000  SS=0BF9  CS=0BF9  IP=1000   NV UP EI PL NZ NA PO NC
0BF9:1000 E475          IN      AL,75
-
tinyparticle
[第4楼] [ 回复时间:2009-07-28 18:36 ] 
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26
此贴由 贴主 于 [ 2009-07-28 18:36 ] 结贴。 结贴原因:问题已解决
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved