课后检测点的若干疑问
学习第六章第一、二节后,做课习题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?不明白段地址是怎样设置的,有数据段,有代码段,还有栈段?如何区分?有些混淆
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。 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 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楼回答也就不难理解吧~ 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:50 static/image/common/back.gif
明白,48个字节型单元应该是十进制,但在程序中应该用16进制表示。
还想请教下,在程序中都有写栈入口start,但在编译后仍显示没有入口栈,这是怎么回事? ttxs_2013 发表于 2013-10-19 22:52 static/image/common/back.gif
还想请教下,在程序中都有写栈入口start,但在编译后仍显示没有入口栈,这是怎么回事?
start标记的是程序的入口,跟栈没关系。
好像即便程序里定义了栈段,编译还是会有警告无栈,这个具体我也不清楚。
页:
[1]