首页
社区
课程
招聘
[求助]movsb用法问题,高手进来
发表于: 2008-9-16 21:59 7817

[求助]movsb用法问题,高手进来

2008-9-16 21:59
7817
sourseg=2000h
toseg=0e000h

code segment
assume cs:code
start:
mov ax,sourseg
mov ds,ax
mov si,0
mov ax,toseg
mov es,ax
mov di,0
mov cx,100h
cld
rep movsb

mov        ax, 4c00h               
int        21h
code ends
end start
该程序将内存sourseg中数值移至toseg,程序可以编译,但不能正确执行,将toseg改为0d000及以下数值就能正确执行,请问这是为什么。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
0c000h,0d000h,0e000h都是DOS操作系统的预留空间,多用来映射硬件和BIOS,你所提到的0e000h一般是BIOS的映射地址即所谓的shadow rom。如果你的系统加载了网卡或其他的硬件设备或ems等使用高端内存的映射,这样,你连toseg改为0d000h都是不能正常运行的。
2008-9-16 22:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
晕,楼上的也太菜了,你没调试怎么知道不行,你试了就知道了
2008-9-16 22:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我用的是masm611,编译成功后可以用debug调试,当toseg=0e000h或0f000h是,地址es:0的数据是不变的,改为toseg=0d000h或以下数值,如09000h,地址es:0就等于ds:0的数值
2008-9-16 22:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
补充一点,用过BOCHS的,可以用它试一下,效果一样
2008-9-16 23:03
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
6
如果是c:0000,d:0000,e:0000
大概可以这么说。
2008-9-16 23:05
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
7
虚拟机内的IO操作完全不正确,不知道内存操作效果如何。
在家里,明天再试
2008-9-16 23:06
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
因为是VGA 显像Buffer
2008-9-16 23:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
没人知道吗,我还以为很简单
2008-9-16 23:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
如果象二楼说的,是DOS操作系统的预留空间,那么你用BOCHS不加载任何操作系统试试,结果是一样的
2008-9-16 23:23
0
雪    币: 242
活跃值: (463)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
11
原来bios和操作系统有关啊,

PS:来膜拜二楼的大牛的
2008-9-17 18:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
可能要挂一年了!!!!!!!!!!!!1
2008-9-17 19:15
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
13
你连代码的运行环境都不说。鬼才知道。
不要动不动就说别人菜。先想想自己有没有犯错误。
2008-9-17 20:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼上的,我用的是WINXP,编译工具用的是MASM611,够清楚了吧,麻烦你调试一下再回话,让我白高兴一场
2008-9-18 17:05
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
15


2008-9-18 20:00
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
16
WinXP
Radasm

错在哪里?????
2008-9-18 20:02
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
17
垃圾,你不要再叫了

看见你就烦
2008-9-18 20:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
楼上的,我用的你的方法也不行啊,会不会是编译器的问题,我用的是MASM611
2008-9-18 21:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我试过了还是不行
上传的附件:
2008-9-18 21:40
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
20


我只想到了一种可能,就是IBM的这块机子有个器件的Rom解码到这块地方
ntvdm或者其他虚拟机的内存映射机制不了解。

对于rom,不用特殊的方法一般写不进去
2008-9-18 22:02
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
21
不会是编译器的问题,放心

出来的机器码都一样
2008-9-18 22:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
看来只有这样解释了,楼上的谢了,会写操作系统吗,有机会互相交流一下
2008-9-18 23:08
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
23
看样子你是在WOW上运行的。
2008-9-19 09:32
0
游客
登录 | 注册 方可回帖
返回
//