题目:补全程序,实现从内存1000:0000处开始执行指令。 assume cs:codesg stacksg segment db 16 dup(0) stacksg ends codesg segment mov ax,4c00h int 21h start: mov ax,stacksg mov ss,ax mov sp,16 mov ax,_____ push ax mov ax,_____ push ax mov bx,0 retf codesg ends end start 分析:这里的关键是要明白retf指令,他是相当于pop ip 和pop cs。他是用栈里面的值来修改ip和cs。 所以源代码如下: assume cs:codesg stacksg segment db 16 dup(0) stacksg ends codesg segment mov ax,4c00h int 21h start: mov ax,stacksg mov ss,ax mov sp,16 mov ax,1000h push ax mov ax,0 push ax mov bx,0 retf codesg ends end start 调试过程如下: -r AX=0000 BX=0000 CX=0029 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=0005 NV UP EI PL NZ NA PO NC 144D:0005 B84C14 MOV AX,144C -u 144D:0005 B84C14 MOV AX,144C 144D:0008 8ED0 MOV SS,AX 144D:000A BC1000 MOV SP,0010 144D:000D B80010 MOV AX,1000 144D:0010 50 PUSH AX 144D:0011 B80000 MOV AX,0000 144D:0014 50 PUSH AX 144D:0015 BB0000 MOV BX,0000 144D:0018 CB RETF 144D:0019 FA CLI 144D:001A C45EF8 LES BX,[BP-08] 144D:001D 26 ES: 144D:001E 8A470C MOV AL,[BX+0C] 144D:0021 2AE4 SUB AH,AH 144D:0023 40 INC AX 144D:0024 50 PUSH AX -t AX=144C BX=0000 CX=0029 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=0008 NV UP EI PL NZ NA PO NC 144D:0008 8ED0 MOV SS,AX -t AX=144C BX=0000 CX=0029 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=000D NV UP EI PL NZ NA PO NC 144D:000D B80010 MOV AX,1000 -t AX=1000 BX=0000 CX=0029 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=0010 NV UP EI PL NZ NA PO NC 144D:0010 50 PUSH AX -t AX=1000 BX=0000 CX=0029 DX=0000 SP=000E BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=0011 NV UP EI PL NZ NA PO NC 144D:0011 B80000 MOV AX,0000 -t AX=0000 BX=0000 CX=0029 DX=0000 SP=000E BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=0014 NV UP EI PL NZ NA PO NC 144D:0014 50 PUSH AX -t AX=0000 BX=0000 CX=0029 DX=0000 SP=000C BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=0015 NV UP EI PL NZ NA PO NC 144D:0015 BB0000 MOV BX,0000 -t AX=0000 BX=0000 CX=0029 DX=0000 SP=000C BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=144D IP=0018 NV UP EI PL NZ NA PO NC 144D:0018 CB RETF -t AX=0000 BX=0000 CX=0029 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=1000 IP=0000 NV UP EI PL NZ NA PO NC 1000:0000 C28AC3 RET C38A -t AX=0000 BX=0000 CX=0029 DX=0000 SP=C39C BP=0000 SI=0000 DI=0000 DS=143C ES=143C SS=144C CS=1000 IP=00B8 NV UP EI PL NZ NA PO NC 1000:00B8 3C2B CMP AL,2B