注册 登录
编程论坛 汇编论坛

debug报错,求高手帮忙解惑

bbsshuke 发布于 2016-11-04 01:57, 2629 次点击
最近比葫芦画瓢写了一个程序,可是刚开始就遇到麻烦了。debug的时候movsb这一条汇编语句进行不下去了。
报错:内存分配错误,加载不到command,系统终止。
求高手帮忙解惑,谢谢!
7 回复
#2
bbsshuke2016-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
bbsshuke2016-11-04 02:06
我是在win7安装的VM VirtualBox虚拟了一个XP系统,然后在虚拟的XP系统里面调试汇编代码。环境应该没问题,因为我单独写了一个程序验证movsb,表示这条语句没有问题。
#4
bbsshuke2016-11-04 02:10
回复 3楼 bbsshuke
只有本站会员才能查看附件,请 登录
#5
Valenciax2016-11-04 06:55
mov bx,0  ;好象不是0吧
mov es,bx

#6
bbsshuke2016-11-04 15:25
回复 5楼 Valenciax
没问题,例程就是这样的。就是要把数据写到这个地方。
#7
bbsshuke2016-11-04 16:13
我找到问题的原因了。不能往地址7E00H写数据!
我把地址改成17E00H就没问题了。
现在的问题是例程就是往7E00H里面写数据,为何我的系统就不行呢?
#8
Valenciax2016-11-04 20:14
若es=0,整个目的地址是
es:di = 0:7E00h,也可以换算成7E0:0h
看看debug里,cs的地址B55:???
7E0比B55低得多,那里可能是DEBUG本身或COMMAND的常驻部份
怎可能不Memory allocation error ?

1