|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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,[bx]
mov cs:[bx],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:0000 60 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:0000 23 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:0000 60 10 00 F0 BB 13 AC 01 08 00 70 00 B1 13 AC 01
第5步:用d 077c:0 f 查看077C:0-f这段内存空间,其内的数据已经变化为:
077C:0000 60 10 00 F0 BB 13 AC 01 08 00 70 00 B1 13 AC 01
疑问??大大的疑问??
0:0-f 这内存空间内的数据怎么发生了变化?什么时候发生的变化?
我猜应该是debug或者操作系统引起,但是希望得到证实或者详细解释。
食堂开饭了,先吃饭
我说几句,,,
首先,你那个o77c绝对不是cs的值,从内存里的内容看,应该是code段起始的段地址的值..不过因为程序
入口是start,所以cs的值在start标号处。(关于这个可能我是忘了,可能是cs的值的确是那段数据的段地
址的值,ip不是0罢了。。。)
还有,0:0不是中断向量表?所以它怎么改了实在不知道,你把中断向量表数据移动到那里了,肯定就变了
呗...
还有,你为毛不设置栈...
|
|