已做好的准备
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 的回答中所讲,会有操作系统的干预。)