奇怪的事情
本帖最后由 f393 于 2017-7-20 17:05 编辑问题10.5中,第二小题。题目是:“下列程序执行后,ax和bx中的数值为多少?”
给的代码:
assume cs:code
data segment
dw 8 dup (0) ;定义8个0
data ends
code segment
start: mov ax,data
mov ss,ax ;定义data段为栈段
mov sp,16 ;将栈顶指针指向ss:16
mov word ptr ss:,offset s ;将标号s的偏移地址(IP)放入内存地址ss:0处(字形数据)
mov ss:,cs ;将(cs)放入内存地址ss:2处(字形数据)
call dword ptr ss: ;跳转到((ss)*10+2):((ss)*10+0) [(cs):(标号s的偏移地址)]
nop ;无意义
s: mov ax,offset s
sub ax,ss: ;(ax)=标号s的偏移地址 (ax)=(ax)-((ss)*10+CH)
mov bx,cs
sub bx,ss: ;(bx)=(cs) (bx)=(bx)-((ss)*10+EH)
mov ax,4C00H
int 21H ;程序返回
code ends
end start
按照我的推论来说,两次的入栈都没有影响到ss:cH和ss:eH,那么ax就等于标号s的偏移地址,bx等于cs的值。
然而…… 为什么呢? call语句会入栈 ss:和ss:是call语句入栈的数据 那么,为什么会写入那么多数据 不清楚 em……{:10_269:}
页:
[1]