王爽检测点6.1的问题
assume cs:codesgcodesg 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:} 我说几句,,,
首先,你那个o77c绝对不是cs的值,从内存里的内容看,应该是code段起始的段地址的值..不过因为程序
入口是start,所以cs的值在start标号处。(关于这个可能我是忘了,可能是cs的值的确是那段数据的段地
址的值,ip不是0罢了。。。)
还有,0:0不是中断向量表?所以它怎么改了实在不知道,你把中断向量表数据移动到那里了,肯定就变了
呗...
还有,你为毛不设置栈... zjk 发表于 2016-3-16 18:08
我说几句,,,
首先,你那个o77c绝对不是cs的值,从内存里的内容看,应该是code段起始的段地址的值..不 ...
谢谢兄弟。
1、我是学过一次汇编语言,但现在只是以第1章到第6章的知识来解释。
2、077C是CS寄存器的值。
3、我不设置栈是因为题目是个填空题{:10_262:}
4、你说起中断向量表我有点印象了,不过那是后面的知识,我还没复习到,记起的东西不多。
再次感谢兄弟。
页:
[1]