风剑河 发表于 2012-2-16 22:37:12

请教关于试验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 该贴已经同步到 风剑河的微博

风剑河 发表于 2012-2-16 23:37:09

不会挂图片,我把程序出问题时的提示信息写出来,如下:
命令提示符- debug 56.exe
NTVDM CPU 遇到无效的指令
CS:0000 IP:00770P:f0 37 05 10 02 选择“关闭”终止应用程序

没个正样 发表于 2012-2-17 05:00:19

本帖最后由 没个正样 于 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个字节的栈来存储二个字型的数据,就可正确地通过!

风剑河 发表于 2012-2-17 09:06:32

通过不是目的,我想知道为啥会出现那些情况……

风剑河 发表于 2012-2-18 00:34:36

:'(高手大哥些,有人能帮帮我吗?求解答~~~

风剑河 发表于 2012-2-21 21:15:21

没人帮我解决疑问,继续求助中……

痛彻心扉 发表于 2012-11-21 19:29:48

ewo 也正看呢 应该是栈段最少要分配16个字节 你强制弄小的话 应该就出错了
页: [1]
查看完整版本: 请教关于试验5的问题