各位高手好,我的系统是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:[bx]
- mov es:[si],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:[bx]
- mov es:[si],ax
- inc bx
- inc si
- loop s1 ; dos应该显示绿底红字
-
- add bx,1
- add si,124 ; 到显存的第三行第一个字节
-
- mov cx,36
- s2: mov ax,ds:[bx]
- mov es:[si],ax
- inc bx
- inc si
- loop s2 ; dos应该显示白底蓝色
-
- mov ax,4c00h
- int 21h
- code ends
- end start
-
复制代码 再次跪谢! |