(1)下面的程序执行后,ax中的数值为多少?
assume cs:code
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0eh]
inc ax
inc ax
inc ax
mov ax,4c00H
int 21H
code ends
end start
执行call指令时,将下一条指令的地址入栈,然后转向栈中的地址。实际上程序是按照顺序执行的。ax初始值为0,三次加1后,最终结果为3。
下面的程序执行后,ax和bx中的数值为多少?
assume cs:code
data segment
dw 8 dup(0)
data ends
code segment
start:
mov ax,data
mov ss,ax
mov sp,16
mov word ptr ss:[0],offset s
mov ss:[2],cs
call dword ptr ss:[0]
nop
s:
mov ax,offset s
sub ax,ss:[0ch]
mov bx,cs
sub bx,ss:[0eh]
code ends
end start
首先将标号s处的地址存到ss:[0][1]处,接着将cs的地址存到ss:[2][3]处。执行call执行时,先将cs入栈,再将nop指令的地址入栈。其中ax中的值比ss:[0ch]中的值大1,bx中的值与ss:[0eh]中的值相等。结果ax=1,bx=0。
[ 游客 发表于 2009-06-04 09:29 ]
正确。