检测点10.5作业练习
(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:
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
code ends
end start
最终ax的值为3,这么有趣的程序,我就不解释了,大家去玩吧。
(2)下面的程序执行后,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:,offset s
mov ss:,cs
call dword ptr ss:
nop
s: mov ax,offset s
sub ax,ss:
mov bx,cs
sub bx,ss:
mov ax,4c00h
int 21h
code ends
end start
ax=1,bx=0;
大家直接上程序,细心分析吧。
能解释下第一个吗,为什么执行后存的下一条指令的偏移
双人旁 发表于 2020-3-18 17:47
能解释下第一个吗,为什么执行后存的下一条指令的偏移
这个程序在执行call word ptr ds:之前,程序中的cs的值已经入栈,ip的地址也已经准备好执行下一条程序了,然后ip值转移到ds:,ip的值就是指向下一条的指令,所以,直接向下执行了。但是程序就不会向下执行,{:5_109:} AX=(NOP+1)-(NOP)=1
BX=(CS)-(CS)=0 双人旁 发表于 2020-3-18 17:47
能解释下第一个吗,为什么执行后存的下一条指令的偏移
CALL指令的规定,因为如果要配合RET指令,要跳回去,跳哪里呢?就是CALL的下一条指令的地方,继续往下执行,所以,他只能压入下一条指令的偏移地址
页:
[1]