crazyid 发表于 2017-10-24 22:17:08

求助:修改0号中断程序出错

我的系统是win7 64位,用的dosbox v0.74,按照视频编写的修改0号中断程序,masm 程序时出错,如图(out ofmemory)请问如何解决?

crazyid 发表于 2017-10-24 22:21:33

这是程序代码
assume cs:code

code segment
start:
                                mov ax,cs
                                mov ds,ax
                                mov si,offset do0   ;设置ds:di指向源地址
                                mov ax,0
                                mov es,ax
                                mov di,200h                   ;设置es:di指向目的地址
                                mov cx,offset do0end - offset do0                ;设置cx为传输长度
                                cld                                                                                        ;设置传输方向为正
                                rep movsb
                               
                                mov ax,0
                                mov es,ax
                                mov word ptr es:,200h
                                mov word ptr es:,0
                               
                                mov ax,4c00h
                                int 21h
                               
                do0:
                                jmp short do0start
                                db "welcome to liuyanhao's room!"
                               
do0start:
                                mov ax,cs
                                mov ds,ax
                                mov si,202h   ;设置ds:si指向字符串
                               
                                mov ax,0b800h
                                mov es,ax
                                mov di,12*160+36*2   ;设置es:di指向显存空间的中间位置
                               
                                mov cx,21      ;设置cx为字符串长度
                               
                        s:
                          mov al,
                          mov es:,al
                          inc si
                          add di,1
                          mov al,02h    ;设置颜色
                          mov es:,al
                          add di,1
                          loop s
                          
                          mov ax,4c00h
                          int 21h
        do0end: nop
       
code ends
end start
                               

丶忘却的年少o 发表于 2017-10-24 22:31:19

代码18行,你写的逗号是中文吧?mov word ptr es:,0 就这句,逗号看一下

crazyid 发表于 2017-10-25 09:19:40

丶忘却的年少o 发表于 2017-10-24 22:31
代码18行,你写的逗号是中文吧?mov word ptr es:,0 就这句,逗号看一下

是的!O(∩_∩)O谢谢

已然就位 发表于 2017-10-25 10:54:48

丶忘却的年少o 发表于 2017-10-24 22:31
代码18行,你写的逗号是中文吧?mov word ptr es:,0 就这句,逗号看一下

do0start里不是已经有设置颜色了,那为什么s循环里还要设置颜色

丶忘却的年少o 发表于 2017-10-25 11:26:35

已然就位 发表于 2017-10-25 10:54
do0start里不是已经有设置颜色了,那为什么s循环里还要设置颜色

没有,那里面是设置的源地址和复制的地址。不过系统是自带白字的

已然就位 发表于 2017-10-25 13:30:50

丶忘却的年少o 发表于 2017-10-25 11:26
没有,那里面是设置的源地址和复制的地址。不过系统是自带白字的

我才发现这个dos还是不行,应该是一样的吧,为什么我会有错误

丶忘却的年少o 发表于 2017-10-25 13:45:46

已然就位 发表于 2017-10-25 13:30
我才发现这个dos还是不行,应该是一样的吧,为什么我会有错误

1. 你看你的代码上面文件名前面的保存图标是红色的,说明你没保存,
2. 你的指令为什么是逗号?masm shiyan.asm,注意,后缀是.asm不是,asm。

已然就位 发表于 2017-10-25 13:55:07

丶忘却的年少o 发表于 2017-10-25 13:45
1. 你看你的代码上面文件名前面的保存图标是红色的,说明你没保存,
2. 你的指令为什么是逗号?masm shi ...

这个大意了但还是一样,我改好了还是一样,和上面的图片没差

丶忘却的年少o 发表于 2017-10-25 14:11:56

已然就位 发表于 2017-10-25 13:55
这个大意了但还是一样,我改好了还是一样,和上面的图片没差

你start后面的:有感觉不对吗?是不是中文的:空这么开?

已然就位 发表于 2017-10-25 14:22:10

丶忘却的年少o 发表于 2017-10-25 14:11
你start后面的:有感觉不对吗?是不是中文的:空这么开?

还是一样,这个define start未定义是什么原因。不是XP系统难道真的不行吗

已然就位 发表于 2017-10-25 14:43:48

丶忘却的年少o 发表于 2017-10-25 14:11
你start后面的:有感觉不对吗?是不是中文的:空这么开?

不是dos的问题,好像是程序的问题。我用其他程序可以通过 。我再找找原因谢谢了
页: [1]
查看完整版本: 求助:修改0号中断程序出错