增加sp的值会改变栈内的数据?sp的值变化引起的栈内数据变化

qnapjiujiu 2014-12-26 02:36:11
ASSUME CS:CODES,SS:STACKS

STACKS SEGMENT
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
STACKS ENDS

codes segment
START:
MOV AX,STACKS
MOV SS,AX
mov sp,16

mov bp,sp
sub sp,6
mov word ptr [bp-6],0001
mov word ptr [bp-4],0002
mov word ptr [bp-2],0000
push [bp-2]
push [bp-4]
push [bp-6]

call addr1
;add sp,6;此处如果不注释掉的话,栈内的数据会有很大的改变,这是为什么?
inc word ptr [bp-2]

MOV AH,4CH
INT 21H

addr1: push bp
mov bp,sp
mov ax,[bp+4]
add ax,[bp+6]
mov [bp+14],ax
mov sp,bp
pop bp
ret

CODES ENDS
END START


这个程序时有汇编实现c=a+b,参数存在栈里面。但是有个问题:运行add sp,6前后,栈内的数据会有很大变化(如图),不清楚这个变化是由什么引起的,请大家帮我解析一下,万分感谢!
...全文
235 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qnapjiujiu 2014-12-26
  • 打赏
  • 举报
回复
引用 3 楼 zara 的回复:
单步中断是个整体性的过程(进入,处理,退出),完成前后 sp 当然是要恢复保持一致的,就和调用个软中断或正常的子程一样,否则用户的堆栈不就乱套了。
好的,明白了,谢谢zara
zara 2014-12-26
  • 打赏
  • 举报
回复
单步中断是个整体性的过程(进入,处理,退出),完成前后 sp 当然是要恢复保持一致的,就和调用个软中断或正常的子程一样,否则用户的堆栈不就乱套了。
qnapjiujiu 2014-12-26
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
单步中断功能用的吧;你这堆栈太小,没出异常已属幸运的了。
这栈确实小了,我是为了可以方便的查看栈内信息 是不是sp增加了,cpu认为栈内之前sp指向的空间可以用了,就把一些单步中断的信息压栈了?可是为什么sp还是没有变得?难道单步中断压栈不改变sp的值吗?
zara 2014-12-26
  • 打赏
  • 举报
回复
单步中断功能用的吧;你这堆栈太小,没出异常已属幸运的了。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧