编程论坛
注册
登录
编程论坛
→
汇编论坛
debug报错,求高手帮忙解惑
bbsshuke
发布于 2016-11-04 01:57, 2629 次点击
最近比葫芦画瓢写了一个程序,可是刚开始就遇到麻烦了。debug的时候movsb这一条汇编语句进行不下去了。
报错:内存分配错误,加载不到command,系统终止。
求高手帮忙解惑,谢谢!
7 回复
#2
bbsshuke
2016-11-04 02:00
程序代码:
assume
cs:
code,
ds:
data,
ss:
stack
data segment
db
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
data ends
stack segment
db
32
dup(
0
)
stack ends
code segment
start:
mov
ax,stack
mov
ss,ax
mov
sp,
32
mov
ax,data
mov
ds,ax
mov
si,
0
mov
bx,0H
mov
es,bx
mov
di,7E00H
mov
cx,
20
cld
rep
movsb
;
报错,系统不允许用户往地址7E00H写数据!
mov
ax,4C00H
int
21H
code ends
end start
[此贴子已经被作者于2016-11-4 16:17编辑过]
#3
bbsshuke
2016-11-04 02:06
我是在win7安装的VM VirtualBox虚拟了一个XP系统,然后在虚拟的XP系统里面调试汇编代码。环境应该没问题,因为我单独写了一个程序验证movsb,表示这条语句没有问题。
#4
bbsshuke
2016-11-04 02:10
回复 3楼 bbsshuke
只有本站会员才能查看附件,请
登录
#5
Valenciax
2016-11-04 06:55
mov bx,0 ;好象不是0吧
mov es,bx
#6
bbsshuke
2016-11-04 15:25
回复 5楼 Valenciax
没问题,例程就是这样的。就是要把数据写到这个地方。
#7
bbsshuke
2016-11-04 16:13
我找到问题的原因了。不能往地址7E00H写数据!
我把地址改成17E00H就没问题了。
现在的问题是例程就是往7E00H里面写数据,为何我的系统就不行呢?
#8
Valenciax
2016-11-04 20:14
若es=0,整个目的地址是
es:di = 0:7E00h,也可以换算成7E0:0h
看看debug里,cs的地址B55:???
7E0比B55低得多,那里可能是DEBUG本身或COMMAND的常驻部份
怎可能不Memory allocation error ?
1