永远健康 发表于 2014-10-13 22:15:39

关于汇编栈的问题

assume cs:code,ds:data,ss:stack data segment
      dw 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个字的空间来存放呢?我是初学,所以一直想不明白,请鱼油们指教,谢谢了。

流行语 发表于 2014-10-13 22:15:40

你用 g命令试一下,我没有单步调试。

零度C 发表于 2014-10-13 22:44:32

:lol::lol::lol:加油加油。

ilboyvm 发表于 2014-10-13 22:58:13

不会,帮楼主顶上去

网络学习 发表于 2014-10-14 00:22:09

很好的资源 谢谢

流行语 发表于 2014-10-14 11:57:21

你上面的代码运行正确啊,没有报错啊。我不懂你要问什么。

永远健康 发表于 2014-10-15 07:27:07

流行语 发表于 2014-10-14 11:57
你上面的代码运行正确啊,没有报错啊。我不懂你要问什么。

程序运行到第二个add bx,2   就直接跳出显示程序正常结束,没有一步一步调试到最后。用d命令查看栈段里的数据显示的是一些乱码和空的内容。本应该是把数据段里的数据压入栈段的。但检查结果并没有压进去。而且程序结束的过快。

永远健康 发表于 2014-10-16 08:39:25

流行语 发表于 2014-10-15 22:46
你用 g命令试一下,我没有单步调试。

用g命令能够顺利的完成程序,查看数据段的内容,是正确的。我原来看错了,用t命令单步调试,虽然结束的不正常,但结果是正确的,数据段完成了逆序存放。可我还是有些疑问,为什么用t命令调试时,单步到第一个循环的地5次命令add bx,2时,系统就显示遇到无效指令,请求关闭。用p命令就可以把循环过完。但到第二个循环的add bx,2时会一下跳过剩下的所有指令,显示的还是正常结束。

流行语 发表于 2014-10-16 12:06:27

永远健康 发表于 2014-10-16 08:39
用g命令能够顺利的完成程序,查看数据段的内容,是正确的。我原来看错了,用t命令单步调试,虽然结束的不 ...

这个问题我也不太清楚。不好意思啊

大个的糖果 发表于 2014-10-31 23:53:51

页: [1]
查看完整版本: 关于汇编栈的问题