assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,b
mov ss,ax
mov sp,10h
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
------解决方案--------------------------------------------------------
代码完全无错。但是你得知道汇编语言在以下几个方面比较麻烦。
1、不同CPU的指令系统不一致。
2、编译器和连接器对指令系统和伪代码的支持不一致。
3、调试工具对指令系统和伪代码的支持不统一。
这一切归根结底在于CPU的不断更新,指令系统也不断变化;编译器也在更新,支持的伪代码也在不断变化。
所以学汇编语言,理清楚你学的内容所适用的场合是非常重要的,当然这也是学习汇编之所以令人郁闷的地方。
------解决方案--------------------------------------------------------
这个问题这半年出现过多次了。
可能是由于Windows下运行的DOS本身也要使用部分栈空间的缘故,造成程序中的栈溢出。
把栈定义的大一点即可。