用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
- |