1 assume cs:code
2 //推算a程序结束前ax与bx的值,使用call dword ptr指令
3 stack segment
4 dw 8 dup(0)
5 stack ends
6
7 code segment
8 start:
9 mov ax,stack
10 mov ss,ax
11 mov sp,16
12 mov word ptr ss:[0],offset s //由挂载程序可知标号s处IP=1A
13 mov ss:[2],cs //CS由机器决定,加入此处CS=1000h
14 call dword ptr ss:[0] //先压栈,此处IP取下一命令第一字节IP=19,把CS:IP=1000:19入栈,再取SS:0处值作为新IP,易知第一次取得IP=0;随后跳到程序第一条指令,直到SS:0处有值;此处易推得IP=19,即继续执行下面指令
15 nop
16 s:
17 mov ax,offset s //ax=1A
18 sub ax,ss:[0cH] //由之前入栈顺序可知SS:0C处值为19,所以ax=1A-19=1
19 mov bx,cs //bx=1000h
20 sub bx,ss:[0eH] //同上,所以bx=1000h-1000h=0
21 mov ax,4c00h
22 int 21h
23 code ends
24
25 end start