|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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:[0],offset s ;将标号s的偏移地址(IP)放入内存地址ss:0处(字形数据)
- mov ss:[2],cs ;将(cs)放入内存地址ss:2处(字形数据)
- call dword ptr ss:[0] ;跳转到((ss)*10+2):((ss)*10+0) [(cs):(标号s的偏移地址)]
- nop ;无意义
- s: mov ax,offset s
- sub ax,ss:[0CH] ;(ax)=标号s的偏移地址 (ax)=(ax)-((ss)*10+CH)
- mov bx,cs
- sub bx,ss:[0EH] ;(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:[0CH]和ss:[0EH]是call语句入栈的数据
|
-
问题:第3步栈内被写入
-
第一步:栈内正常
|