求好心人运行程序,实验九!
各位高手好,我的系统是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
再次跪谢! 我给出修正后的代码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
装个虚拟机吧。我的win7也没有debug。用VM或者VBox装个XP自己试验多好....
这是运行结果。还有13行的数字,应该是0b800h
季末、梨花雨落 发表于 2013-2-17 09:33 static/image/common/back.gif
装个虚拟机吧。我的win7也没有debug。用VM或者VBox装个XP自己试验多好....
嗯!有道理,谢谢啦 七月之变 发表于 2013-2-19 11:19 static/image/common/back.gif
这是运行结果。还有13行的数字,应该是0b800h
额,我这都错的找不到边儿了。谢谢啦!大神,能看出来哪里有问题吗?
你没分清楚ax与al的区别。
mov ax,ds:
mov es:,ax
这个是取一个字,也就是两个字节,应该改成
mov al, ds:
mov es:,al
下面的也是一样。 还有两个问题。
第一个是定义数据应该是db,而不是dd
第二个是add si,124应该是add si , 125 还有一个错误。。。
你的inc bx是后执行的,所以你的loop后面的add bx, 1是不需要的,要了就错了……
(不好意思。前面都是目测,实际测试过才发现) 那这样的话,add si, 124就是对的了。 七月之变 发表于 2013-2-20 16:53 static/image/common/back.gif
那这样的话,add si, 124就是对的了。
多谢七月之变!我现在知道自己那里有问题了,谢谢你的耐心解释!
路漫漫其修远兮,我们上下而求索
页:
[1]