检测点 10.2
下面的程序执行后,ax 中的数值为多少?
内存地址 机器码 汇编指令
1000:0 B8 00 00 mov ax,0
1000:3 E8 01 00 call s
1000:6 40 inc ax
1000:7 58 s: pop ax
程序执行过程如下:
1. 在 IP=0 处读取 mov ax,0 指令,由于该指令占用 3 个字节,所以执行 (IP)=(IP)+3=3,然后执行该指令,于是 (ax)=0。
2. 在 IP=3 处读取 call s 指令,由于该指令占用 3 个字节,所以执行 (IP)=(IP)+3=6,然后执行该指令,即将 IP 压栈:
(sp)=(sp)-2
((ss)*16+(sp))=(IP)=6
然后程序跳至标号 s 处,即 (IP)=7,读取 s 标号处的指令 pop ax;由于该指令占用 1 个字节,所以执行 (IP)=(IP)+1=8,然后执行 pop ax 指令。由于栈顶元素数据的值为刚才压栈的数据值 6,所以 (ax)=6。
可见,程序执行后,AX 寄存器中存储的数据值为 6。