你e写入的2000:1000 没错误,并且用d查看了一下是很好的步骤。
但是下面a写入命令后却没有用u命令查看,恰恰是这里出错了!(要注意确认实验步骤要正确~)
-a
0B04:0100 mov ax,2000
0B04:0103 mov es,ax
0B04:0105 jmp dword ptr es:[1000]
^ Error
0B04:0105 jmp dword ptres:[1000] ---------这样debug也能通过,真是汗"
0B04:0109
-u
0B04:0100 B80020 MOV AX,2000
0B04:0103 8EC0 MOV ES,AX
0B04:0105 FF260010 JMP [1000] --------这里和要写的不一样啊,段地址变成ds了。并且还是jmp
我是用下面方法实验的,写了一个asm文件:
C:\masm>type q.asm
assume cs:code
code segment
start:
mov ax,2000h
mov es,ax
jmp dword ptr es:[1000h]
mov ax,4c00h --这两句也是没用的,上面都jmp跑/~啦
int 21h
code ends
end start
C:\masm>debug q.exe
-u
0B68:0000 B80020 MOV AX,2000
0B68:0003 8EC0 MOV ES,AX
0B68:0005 26 ES:
0B68:0006 FF2E0010 JMP FAR [1000]
0B68:000A B8004C MOV AX,4C00
0B68:000D CD21 INT 21
0B68:000F 90 NOP
0B68:0010 0056C4 ADD [BP-3C],DL
0B68:0013 5E POP SI
0B68:0014 06 PUSH ES
0B68:0015 26 ES:
0B68:0016 8B4708 MOV AX,[BX+08]
0B68:0019 8946F8 MOV [BP-08],AX
0B68:001C 26 ES:
0B68:001D 837F0600 CMP WORD PTR [BX+06],+00
-e 2000:1000 be 00 06 00 00 00
-t
AX=2000 BX=0000 CX=000F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B58 ES=0B58 SS=0B68 CS=0B68 IP=0003 NV UP EI PL NZ NA PO NC
0B68:0003 8EC0 MOV ES,AX
-t
AX=2000 BX=0000 CX=000F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B58 ES=2000 SS=0B68 CS=0B68 IP=0005 NV UP EI PL NZ NA PO NC
0B68:0005 26 ES:
0B68:0006 FF2E0010 JMP FAR [1000] ES:1000=00BE
/*ES:1000=00BE --这个看出读取数据是正确的。*/
-t
AX=2000 BX=0000 CX=000F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B58 ES=2000 SS=0B68 CS=0006 IP=00BE NV UP EI PL NZ NA PO NC
0006:00BE 00F0 ADD AL,DH
- |