汇编程序32:检测点10.5(二)
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