(汇编区没人理):一个栈段为何在SS:SP指定后 莫名改变了内容?该怎么处理
(汇编区没人理):一个栈段为何在SS:SP指定后 莫名改变了内容?
是王爽教材 第6章 实验5(6)的题目。 是将a段中的前8个字 数据, 逆序压到b段中。
问: debug的时候 发现当执行完
mov ss,ax
mov sp,10h
查看下 b段中的内容, 发现已经不全是0了。 为什么会发生改变呢?
------解决方案--------------------
触发断点需要调用中断,中断的调用过程需要使用栈空间……
------解决方案--------------------
栈空间是个公共场所,栈空间不仅仅只是你push的时候用。
栈要设大点,不然容易出现错误。
------解决方案--------------------
因为debug的每一步都是中断,中断就要用栈
你可以看下栈里的值就是CS和IP
- Assembly code
assume cs:code, ss:b a segment dw 1,2,3,4,5,6,7,8,9,0ah, 0bh,0ch,0dh,0eh,0fh,0ffh a ends b segment dw 0,0,0,0,0,0,0,0 b ends code segment start: mov ax,a mov ds,ax mov ax,b mov ss,ax mov sp,10h mov bx,0 mov cx,8 s: push ds:[bx] add bx,2 loop s mov ax,4c00h int 21h code ends end start
是王爽教材 第6章 实验5(6)的题目。 是将a段中的前8个字 数据, 逆序压到b段中。
问: debug的时候 发现当执行完
mov ss,ax
mov sp,10h
查看下 b段中的内容, 发现已经不全是0了。 为什么会发生改变呢?
------解决方案--------------------
触发断点需要调用中断,中断的调用过程需要使用栈空间……
------解决方案--------------------
栈空间是个公共场所,栈空间不仅仅只是你push的时候用。
栈要设大点,不然容易出现错误。
------解决方案--------------------
因为debug的每一步都是中断,中断就要用栈
你可以看下栈里的值就是CS和IP