+ -
当前位置:首页 → 问答吧 → 请问各位高手,一个关于汇编debug调试过程弹出窗口提示的问题

请问各位高手,一个关于汇编debug调试过程弹出窗口提示的问题

时间:2011-12-17

来源:互联网


  请问各位高手, 为什么下面的汇编程序,在编译连接之后,使用debug命令进行调试过程发现: 在执行push ax 指令之前,栈内存里6个连续内存单元为0,可是执行push ax 指令之后,却发现 栈内存里的内容,并不是自己所期望的进栈结果,而且无法继续执行 第二次进栈,并且弹出 一个对话框提示: 遇到无效指令,关闭, 忽略。

下面是本人 编写的简单汇编程序:

assume cs:code, ss:stack
stack segment ;数据段存储数据
  dw 0, 0, 0; 系统自动分配一段连续栈内存存储这些数据
stack ends

code segment ; 代码段存储代码
start: mov ax, stack
  mov ss, ax
  mov sp, 6
  mov ax, 1234H
  mov cx, 3
s0: push ax
  add ax, 2
  loop s0
  mov ax, 4c00H
  int 21H

code ends
end start

请问,各位, 哪里出问题了? 谢谢

作者: wenxian8   发布时间: 2011-12-17

你的sp太小,可能在虚拟DOS方式下栈顶部有几个字节B612是标志,不能使用。 

改为:

mov sp, 20

这个是我的帖子:
http://topic.csdn.net/u/20111217/11/6bb93e5a-c187-47aa-996b-ea1722e0112b.html?26013

作者: hztj2005   发布时间: 2011-12-17

sp的值大小是 6个 内存单元,刚好 够 存储 3个字型数据啊, 怎么会太小呢?

作者: wenxian8   发布时间: 2011-12-17

为什么 我把 sp的 值 从 6 更改为 12, 在debug调试过程中,就 没有弹出 提示窗口了? 我只是定义 3个 字型数据,那么占用 6个 连续内存单元啊? 应该是足够了啊

作者: wenxian8   发布时间: 2011-12-17

你用debug观察ss段的数据,会看到栈的顶部有几个字节B612,看来虚拟DOS方式,栈的实际大小比sp要小一点。

作者: hztj2005   发布时间: 2011-12-17

有点明白了, 可是 为什么会 突然出现 这些 字节B612 呢?

作者: wenxian8   发布时间: 2011-12-17