请教关于试验5的问题
在试验5的第二题中,有如下栈段:stack segment
dw 0,0
stack ends
我有几个问题不明白,请大家帮帮我!
1. 此处定义栈段的大小为4个字节,为什么在代码段中还将sp赋值为16,为什么不赋值为4呢?
2. 带着这个疑问,我将sp赋值为4,运行程序过程中提示CPU遇到无效指令,是什么原因呢?
file:///C:/Documents
我再将sp改为8,还是相同情况
file:///C:/Documents
3. 再将sp改为9,则在执行mov ss,ax时直接就跳出debug了,这又是什么原因呢?
4.对于5.2题的第4个问题,甲鱼大大的答案是16x(N/16+1),但是他举的两个例子,N=17和N=9,N=17的时候实际占有空间为32,N=9时实际占有空间为16;这两个例子和鱼大给的公式不太符合,是不是应该这样理解:设实际占有空间为X,X为16的倍数,且N<X<(N+16)
http://bbs.fishc.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 风剑河的微博 不会挂图片,我把程序出问题时的提示信息写出来,如下:
命令提示符- debug 56.exe
NTVDM CPU 遇到无效的指令
CS:0000 IP:00770P:f0 37 05 10 02 选择“关闭”终止应用程序 本帖最后由 没个正样 于 2012-2-17 05:01 编辑
试试这个。
assume cs:code,ds:data,ss:stack
data segment dw 0123h,0456hdata ends
stack segment db 0,0,0,0,0,0,0,0,0,0,0,0stack ends
code segmentstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,12 push ds: push ds: mov ax,4c00h int 21h
code endsend start声明定义12个字节的栈来存储二个字型的数据,就可正确地通过! 通过不是目的,我想知道为啥会出现那些情况…… :'(高手大哥些,有人能帮帮我吗?求解答~~~ 没人帮我解决疑问,继续求助中…… ewo 也正看呢 应该是栈段最少要分配16个字节 你强制弄小的话 应该就出错了
页:
[1]