無涯 发表于 2013-3-7 15:50:50

实验5.1

实验5.1第三问答案是不是不唯一呢,我做出来data段的段地址为X-2,stack的段的段地址也为X-2,而且data的数据在1449:0000,stack的地址是1449:0010,跟小甲鱼老师讲的有点不同啊
下面是实验的截图:

我的理解是:ds存放psp要占256字节,所以程序指定往ds存放数据的时候自动后移256个字节开始存放,所以刚好移到ss处,ss栈空间无奈只好继续往后移 。可是看小甲鱼的汇编视频似乎不是这样,数据直接从ds开始存放,貌似直接覆盖了psp的内容,这到底是怎么回事类?请各位大神赐教~~~谢谢!

顺便问一句,有没有什么讨论群加啊,每次有什么问题都要发论坛,有点麻烦,希望有更多机会与大家交流,谢谢

小新110 发表于 2013-3-7 15:50:51

debug里面显示的和他的问题其实是两回事。
他问题中的指的是程序中的标号,并不是段寄存器。
程序加载后,ds指向内存开始的地方,所以data segment的位置是ds+10H就是ss的值
本来如果没有定义两个字形数据的话,cs也应该等于ds+10H
但现在有了两个dw,所以cs等于ds+10H+2H,这就是debug里面的段的显示值

对于问题3,它问的是标号的地址,data segment的地址就是cs-2啦,因为有两个dw么
stack segment当然就是cs-1了

無涯 发表于 2013-3-7 15:51:38

自己顶一下,希望找到大神讲解{:5_105:}

無涯 发表于 2013-3-7 16:03:41

大神们=。={:5_107:}

無涯 发表于 2013-3-7 16:09:15

assume cs:code,ss:stack,ds:data

data segment
                dw 1234H,1234H,1234H,1234H,1234H,1234H,1234H,1234H
data ends
stack segment
                dw 0,0,0,0,0,0,0,0
stack ends

code segment
start:        mov ax,stack;
                mov ss,ax
                mov sp,16
                mov ax,data;
                mov ds,ax
                push ds:
                push ds:
                pop ds:
                pop ds:
                mov ax,4c00H;
                int 21h;
code ends
end start
这是代码

小小小小鱼 发表于 2013-3-7 19:07:56

第一PSP 肯定存在的~ 第2 你试验没有错误~1449:0010   1450:0000 还是 date段地址加1等于 stack段地址

小小小小鱼 发表于 2013-3-7 19:17:29

书写 错了 1449:0010=144A:0000进制写错了~~结果还一样
页: [1]
查看完整版本: 实验5.1