您的位置:首页 > 编程语言

汇编语言 王爽(第三版) 实验3 编程、编译、连接、跟踪

2016-11-04 19:04 696 查看

已做好的准备

t1.asm文件已保存到C盘根目录下

masm 5.0 需要自己从网上下载,然后安装,已保存到C盘根目录下

执行过程中问题的出现与解决

进入DOS方式,显示
C:\DOCUME~1\ADMINI~1>
,此时如何进入C盘根目录?在后面输入
cd..
,会显示
C:\DOCUME~1
,即此时已回退到Documents文件夹,再次输入
cd..
,会显示
C:\>
,即此时到达C盘根目录,输入
cd masm
,显示
C:\MASM>
,即进入C盘根目录下的MASM文件夹;

编译过程,
Source filename [.ASM]
输入
t1
,按下几个ENTER,出现
Unable to open input file: t1.ASM
,问题在哪?仔细看了书,发现只有当asm文件在MASM文件夹下,才可以仅输入文件名,更改输入
c:\t1.asm
,编译成功;

Debug中
-d ds:10 18
是指查看1000:10~1000:18的内容

此实验源程序中的程序部分:

mov ax,2000H
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx

mov ax,4c00H
int 21H


根据我对程序的理解,程序的前四行是将2000H:0~2000H:9设置为栈,此时栈顶SS:SP指向2000AH,此时栈为空。第一个指令,pop ax,是弹出一个栈元素,从数据结构的学习中考虑,这样会导致错误,然而实际上并没有问题。

(摘自网络)

栈空间里没有内容,此时能弹堆栈?

首先说什么是栈空间,栈空间无非是一段由SS:SP指示的内存空间而已,一般情况下我们能够用栈操作指令访问它,当然,我们也可以用访问内存地址的任何一种合理方式访问这段空间。其次,我们说 栈空 表明的意思是:栈顶设置之初,我们没有栈操作的时候,这段空间的数据我们是未知的,所以通常也是没有用的,但是并不代表这时栈顶SS:SP所指向的内存字单元中没有数据!再有一点:无论是push还是pop操作,栈的操作在任何情况下都是有效的(但不一定在任何情况下都是合理的,对于不合理的栈操作正如问题 1 的回答中所讲,会有操作系统的干预。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: