ttxs_2013 发表于 2013-10-17 18:31:57

课后检测点的若干疑问

学习第六章第一、二节后,做课习题6.1检测点,发现存在几个问题还没弄懂,
第一:0:0:0:15中存放的数据是什么,去修改程序中数据是什么意思?
第二:假如dw定义的数据是10个字单元,那么偏移地址应该设置为0020H?16个字单元为什么是sp是0030H
第二题中,用栈进行传递数据
assume cs:codesg
codesg segment
   
    dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
    dw 0,0,0,0,0,0,0,0,0,0
start: mov ax,cs
         mov ss,ax
   mov sp,0020H
   
   mov ax,0
   mov ds,ax
   mov bx,0
   
   mov cx,8
s:push
   
   add bx,2
   loop s
   
   mov ax,4c00H
   int 21H
codesg ends
end start
中push 【bx】的段地址是CS还是DS?不明白段地址是怎样设置的,有数据段,有代码段,还有栈段?如何区分?有些混淆

tsembrace 发表于 2013-10-18 10:36:46

1、你甭管0:0~0:15中数据是什么。题意是要将该内存段数据写入程序中定义的8个字型内存空间。
2、你是在问栈段中栈顶偏移地址的设置?直接看检测点(2):cs:0~cs:0fH为原始数据空间,cs:10H~cs:19H为栈空间,初始为空,栈顶指向下一单元,在SS设为CS情况下,栈顶为(SP)=20H。
“16个字单元为什么是sp是0030H”?啥意思?谁说的?
3、段寄存器未显式说明默认为DS。

ttxs_2013 发表于 2013-10-18 12:37:07

tsembrace 发表于 2013-10-18 10:36 static/image/common/back.gif
1、你甭管0:0~0:15中数据是什么。题意是要将该内存段数据写入程序中定义的8个字型内存空间。
2、你是在 ...

“16个字单元为什么是sp是0030H”?啥意思?谁说的?
在课本140页的第六章程序6.3就是这样设置的,你看看。

tsembrace 发表于 2013-10-18 13:46:33

本帖最后由 tsembrace 于 2013-10-18 15:46 编辑

就看你说的程序6.3
codesg段开始两行
第一行定义了8个字空间存放数据   ;cs:0~cs:0fH
第二行定义了16个字空间作为逻辑上的栈段   ;cs:10H~cs:2FH为栈空间
上述8+16=24个字=48Byte
cs:10H~cs:2FH为栈空间,初始为空,栈顶指向下一单元,在SS设为CS情况下,栈顶为(SP)=30H。
好好看我2楼回答也就不难理解吧~

ttxs_2013 发表于 2013-10-19 22:50:37

tsembrace 发表于 2013-10-18 13:46 static/image/common/back.gif
就看你说的程序6.3
codesg段开始两行
第一行定义了8个字空间存放数据   ;cs:0~cs:0fH


明白,48个字节型单元应该是十进制,但在程序中应该用16进制表示。

ttxs_2013 发表于 2013-10-19 22:52:14

ttxs_2013 发表于 2013-10-19 22:50 static/image/common/back.gif
明白,48个字节型单元应该是十进制,但在程序中应该用16进制表示。

还想请教下,在程序中都有写栈入口start,但在编译后仍显示没有入口栈,这是怎么回事?

tsembrace 发表于 2013-10-20 14:18:32

ttxs_2013 发表于 2013-10-19 22:52 static/image/common/back.gif
还想请教下,在程序中都有写栈入口start,但在编译后仍显示没有入口栈,这是怎么回事?

start标记的是程序的入口,跟栈没关系。
好像即便程序里定义了栈段,编译还是会有警告无栈,这个具体我也不清楚。
页: [1]
查看完整版本: 课后检测点的若干疑问