当前位置: 代码迷 >> 汇编语言 >> 一个简单程序出错有关问题,求解
  详细解决方案

一个简单程序出错有关问题,求解

热度:7983   发布时间:2013-02-26 00:00:00.0
一个简单程序出错问题,求解
总是报错,代码如下,请帮忙定位问题,谢谢!

assume cs:coded7,ds:data,ss:stack

data segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh
data ends

stack segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends

coded7 segment
start:

mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov bx,0
mov cx,8

s:
push ds:[bx]
add bx,2
loop s

mov bx,0
mov cx,8

s1:
pop ds:[bx]
add bx,2
loop s1

mov ax,4c00h
int 21h

coded7 ends
end start


------解决方案--------------------------------------------------------
多定义点堆栈,太短了吧
------解决方案--------------------------------------------------------
我复制了一下你的代码,在我的机上运行了一下,没有问题
------解决方案--------------------------------------------------------
这个程序,直接运行问题不大,或者说出错几率较小;如果是单步调试,则几近必然。问题就在 #3楼 朋友所说的堆栈太小,被程序中的显式 push 指令完全占用,就没有适当的空间给中断了,尤其是中断时所需要的那连续的 3 个 word 空间,其它的 push/pop 等还可以通过 sp 的回绕来应付。
  相关解决方案