王爽汇编问题检测点6。1

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:04:02
题目是用内存 0:0~0:15单元中的内容改写程序中的数据(第一行的数据),数据传送用栈进行,

Assembly code
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0 ;5个字单元用作栈空间
start:mov ax,cs
mov ss,ax
mov sp,26
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:push [bx]
pop cs:[bx]
add bx,2
loop s

mov ax,4c00h
int 21h
codesg ends
end start

我一步步的Debug 发现运行到程序还没结束前
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
上的数据都改为 0:0~0:15单元上的数据了,
但当程序结束后,数据就改变了,为什么会这样呢?
如下图所示

debug的问题
中断的时候会用到栈
或者debug在运行的时候用到栈了
把讲中断的那部分看看
和栈有关的程序最好别用debug调试,而是用程序本身显示运行结果
也可以用断点的方式运行,用法:
-G 断点(绝对地址,如0B16:0200,或者只写偏移的)
运行到断点停止,这样debug就不会捣乱了