8023az 发表于 2013-2-17 05:10:29

求好心人运行程序,实验九!

各位高手好,我的系统是win7 64位的,不能用debug 看运行结果。
学到了汇编的实验九,试着编了一下程序,不能看结果让我很不爽。所以我把代码贴上来,请好心人运行一下,看能不能出结果。
小弟不才,不知有没有错误,如有请您指出!
出了结果请截图,多谢!
assume cs:code,ds:data

data segment
        dd 60h,02h,77h,02h,65h,02h,6ch,02h,63h,02h,6fh,02h,6dh,02h,65h,02h,0,02h,74h,02h,6fh,02h,0,02h,6dh,02h,61h,02h,73h,02h,6dh,02h,21h,02h,60h,02h ; 定义为黑底绿字
        dd 60h,24h,77h,24h,65h,24h,6ch,24h,63h,24h,6fh,24h,6dh,24h,65h,24h,0,24h,74h,24h,6fh,24h,0,24h,6dh,24h,61h,24h,73h,24h,6dh,24h,21h,24h,60h,24h ; 定义为绿底红字
        dd 60h,71h,77h,71h,65h,71h,6ch,71h,63h,71h,6fh,71h,6dh,71h,65h,71h,0,71h,74h,71h,6fh,71h,0,71h,6dh,71h,61h,71h,73h,71h,6dh,71h,21h,71h,60h,71h ; 定义为白底蓝色
data ends

code segment

start:mov ax,data
                mov ds,ax
                mov ax,b800h
                mov es,ax; 把段地址为es的当做显存段地址
                mov si,0
                mov bx,0
       
                mov cx,36 ; data中的数据一行为36个字节
        s:mov ax,ds:
                mov es:,ax ; 把ds中的数据赋值给显存
                inc bx
                inc si ; 逐一赋值
                loop s ; dos应该显示黑底绿字
               
                add bx,1 ; ds中的数据是连续的
                add si,124 ; 显存es中的数据不连续,一共有80列,160个字节,赋值了36个,还有124个需要跳过,到显存的第二行第一个字节
               
                mov cx,36
        s1: mov ax,ds:
                mov es:,ax
                inc bx
                inc si
                loop s1 ; dos应该显示绿底红字
               
                add bx,1
                add si,124 ; 到显存的第三行第一个字节
               
                mov cx,36
        s2: mov ax,ds:
                mov es:,ax
                inc bx
                inc si
                loop s2 ; dos应该显示白底蓝色
               
                mov ax,4c00h
                int 21h
code ends
end start
                再次跪谢!

七月之变 发表于 2013-2-17 05:10:30

我给出修正后的代码assume cs:code,ds:data

data segment
      db 60h,02h,77h,02h,65h,02h,6ch,02h,63h,02h,6fh,02h,6dh,02h,65h,02h,0,02h,74h,02h,6fh,02h,0,02h,6dh,02h,61h,02h,73h,02h,6dh,02h,21h,02h,60h,02h ; 定义为黑底绿字
      db 60h,24h,77h,24h,65h,24h,6ch,24h,63h,24h,6fh,24h,6dh,24h,65h,24h,0,24h,74h,24h,6fh,24h,0,24h,6dh,24h,61h,24h,73h,24h,6dh,24h,21h,24h,60h,24h ; 定义为绿底红字
      db 60h,71h,77h,71h,65h,71h,6ch,71h,63h,71h,6fh,71h,6dh,71h,65h,71h,0,71h,74h,71h,6fh,71h,0,71h,6dh,71h,61h,71h,73h,71h,6dh,71h,21h,71h,60h,71h ; 定义为白底蓝色
data ends

code segment

start:mov ax,data
                mov ds,ax
                mov ax,0b800h
                mov es,ax; 把段地址为es的当做显存段地址
                mov si,0
                mov bx,0
      
                mov cx,36 ; data中的数据一行为36个字节
      s:mov al,ds:
                mov es:,al ; 把ds中的数据赋值给显存
                inc bx
                inc si ; 逐一赋值
                loop s ; dos应该显示黑底绿字
               
                add si,124 ; 显存es中的数据不连续,一共有80列,160个字节,赋值了36个,还有124个需要跳过,到显存的第二行第一个字节
               
                mov cx,36
      s1: mov al,ds:
                mov es:,al
                inc bx
                inc si
                loop s1 ; dos应该显示绿底红字
               
                add si,124 ; 到显存的第三行第一个字节
               
                mov cx,36
      s2: mov al,ds:
                mov es:,al
                inc bx
                inc si
                loop s2 ; dos应该显示白底蓝色
               
                mov ax,4c00h
                int 21h
code ends
end start
               

季末、梨花雨落 发表于 2013-2-17 09:33:07

装个虚拟机吧。我的win7也没有debug。用VM或者VBox装个XP自己试验多好....

七月之变 发表于 2013-2-19 11:19:09


这是运行结果。还有13行的数字,应该是0b800h

8023az 发表于 2013-2-19 22:24:55

季末、梨花雨落 发表于 2013-2-17 09:33 static/image/common/back.gif
装个虚拟机吧。我的win7也没有debug。用VM或者VBox装个XP自己试验多好....

嗯!有道理,谢谢啦

8023az 发表于 2013-2-19 22:25:27

七月之变 发表于 2013-2-19 11:19 static/image/common/back.gif
这是运行结果。还有13行的数字,应该是0b800h

额,我这都错的找不到边儿了。谢谢啦!大神,能看出来哪里有问题吗?

七月之变 发表于 2013-2-20 12:10:52

你没分清楚ax与al的区别。
mov ax,ds:
mov es:,ax
这个是取一个字,也就是两个字节,应该改成
mov al, ds:
mov es:,al
下面的也是一样。

七月之变 发表于 2013-2-20 16:44:07

还有两个问题。
第一个是定义数据应该是db,而不是dd
第二个是add si,124应该是add si , 125

七月之变 发表于 2013-2-20 16:52:02

还有一个错误。。。
你的inc bx是后执行的,所以你的loop后面的add bx, 1是不需要的,要了就错了……
(不好意思。前面都是目测,实际测试过才发现)

七月之变 发表于 2013-2-20 16:53:15

那这样的话,add si, 124就是对的了。

8023az 发表于 2013-2-20 21:24:59

七月之变 发表于 2013-2-20 16:53 static/image/common/back.gif
那这样的话,add si, 124就是对的了。

多谢七月之变!我现在知道自己那里有问题了,谢谢你的耐心解释!
路漫漫其修远兮,我们上下而求索
页: [1]
查看完整版本: 求好心人运行程序,实验九!