兰陵月 发表于 2016-3-16 17:39:47

王爽检测点6.1的问题

assume cs:codesg

codesg segment

    dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
               
start:       mov ax,0
               mov ds,ax
                  mov bx,0
                  
                  mov cx,8
        s:       mov ax,
                 mov cs:,ax      ;回答部分
                  add bx,2
                  loop s
                  
                  mov ax,4c00H
                  int 21H
                  
codesg ends

end start

本题我的回答符合书上的标准答案,但是在调试的时候出现一个问题。
运行环境:DOSbox0.74(16位模拟环境)
工具:debug(不是debug32)

debug加载程序后:
第1步:用d 0000:0000 000f 查看0:0-f这段内存空间,发现其内保存的数据为:
0000:000060 10 00 F0 08 00 70 00 08 00 70 00 08 00 70 00

第2步:用d 077c:0 f 查看077C:0-f这段内存空间,其内保存的数据为:(077C为CS的值,每人机器上不一样)
077C:000023 01 56 04 89 07 BC 0A EF 0D ED 0F BA 0C 87 09
与程序中预设的数据一样。

第3步:g 25,即直接运行到mov ax,4c00H这一步

第4步:用d 0000:0000 000f 查看0:0-f这段内存空间,发现其内保存的数据已经发生变化,为:
0000:000060 10 00 F0 BB 13 AC 01 08 00 70 00 B1 13 AC 01

第5步:用d 077c:0 f 查看077C:0-f这段内存空间,其内的数据已经变化为:
077C:000060 10 00 F0 BB 13 AC 01 08 00 70 00 B1 13 AC 01

疑问??大大的疑问??
0:0-f 这内存空间内的数据怎么发生了变化?什么时候发生的变化?
我猜应该是debug或者操作系统引起,但是希望得到证实或者详细解释。

食堂开饭了,先吃饭{:10_323:} {:10_323:}

zjk 发表于 2016-3-16 18:08:43

我说几句,,,

首先,你那个o77c绝对不是cs的值,从内存里的内容看,应该是code段起始的段地址的值..不过因为程序

入口是start,所以cs的值在start标号处。(关于这个可能我是忘了,可能是cs的值的确是那段数据的段地

址的值,ip不是0罢了。。。)

还有,0:0不是中断向量表?所以它怎么改了实在不知道,你把中断向量表数据移动到那里了,肯定就变了

呗...

还有,你为毛不设置栈...

兰陵月 发表于 2016-3-16 19:12:09

zjk 发表于 2016-3-16 18:08
我说几句,,,

首先,你那个o77c绝对不是cs的值,从内存里的内容看,应该是code段起始的段地址的值..不 ...

谢谢兄弟。
1、我是学过一次汇编语言,但现在只是以第1章到第6章的知识来解释。
2、077C是CS寄存器的值。
3、我不设置栈是因为题目是个填空题{:10_262:}
4、你说起中断向量表我有点印象了,不过那是后面的知识,我还没复习到,记起的东西不多。

再次感谢兄弟。
页: [1]
查看完整版本: 王爽检测点6.1的问题