关于汇编栈的问题
assume cs:code,ds:data,ss:stack data segmentdw 0123h,0234h,0345h,0456h,0567h,0678h,0789h,089ah
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,10h
mov ax,data
mov ds,ax
mov bx,0
mov cx,8
s: push
add bx,2
loop s
mov bx,0
mov cx,8
s0: pop
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
上边这个程序为什么可以编译链接,但运行时出错。我把栈段stack改成16个字单元空间,把sp改成20h,就不出错了。我就是不明白,定义的数据段是8个字的,用8个字的栈段来存放,应该能放下啊,为什么要用16个字的空间来存放呢?我是初学,所以一直想不明白,请鱼油们指教,谢谢了。
你用 g命令试一下,我没有单步调试。 :lol::lol::lol:加油加油。 不会,帮楼主顶上去 很好的资源 谢谢 你上面的代码运行正确啊,没有报错啊。我不懂你要问什么。 流行语 发表于 2014-10-14 11:57
你上面的代码运行正确啊,没有报错啊。我不懂你要问什么。
程序运行到第二个add bx,2 就直接跳出显示程序正常结束,没有一步一步调试到最后。用d命令查看栈段里的数据显示的是一些乱码和空的内容。本应该是把数据段里的数据压入栈段的。但检查结果并没有压进去。而且程序结束的过快。 流行语 发表于 2014-10-15 22:46
你用 g命令试一下,我没有单步调试。
用g命令能够顺利的完成程序,查看数据段的内容,是正确的。我原来看错了,用t命令单步调试,虽然结束的不正常,但结果是正确的,数据段完成了逆序存放。可我还是有些疑问,为什么用t命令调试时,单步到第一个循环的地5次命令add bx,2时,系统就显示遇到无效指令,请求关闭。用p命令就可以把循环过完。但到第二个循环的add bx,2时会一下跳过剩下的所有指令,显示的还是正常结束。 永远健康 发表于 2014-10-16 08:39
用g命令能够顺利的完成程序,查看数据段的内容,是正确的。我原来看错了,用t命令单步调试,虽然结束的不 ...
这个问题我也不太清楚。不好意思啊
页:
[1]