![]() |
#2
ansic2011-03-01 23:34
没有dos环境,没法给你测试,这是我以前写的。你参考一下。
![]() assume cs:code,ds:data data segment db 'welcome to masm!' db 02h,24h,71h data ends code segment start: mov ax,data ;指定数据段DS mov ds,ax mov ax,0b800h ;显示区域为附加段ES mov es,ax mov di,780h ;ES:DI起始行 mov bx,10h ;颜色属性,地址为:DS:[BX] mov cx,3 ;3个颜色 a: ;外循环对3中颜色循环, 依次是02,24h,71h push cx ;由于内循环要用到cx,故保存 push di ;保存初始行 mov si,0 :字符首地址ds:si mov cx,16 ;内循环开始,依次遍历16个字符 b: mov al,[si] ;将asacii放入al mov ah,[bx] ;将属性放入ah mov es:[di+40h],ax ;显示 inc si ;指向下一个字符 add di,2 ;指向下一个显示位置 loop b ;如cx=0,则内循环结束 pop di ;第一次循环结束,恢复初始行的值 pop cx ;恢复cx inc bx ;ds:[bx+1],指向下一个属性 add di,0a0h ;第二行 loop a ;外循环,如3个属性遍历完毕则跳出循环 mov ah,4ch int 21h code ends end start |

assume cs:code,ds:data,ss:stack
data segment
db'welcome to masm!'
db 00000010b,00100100b,01110001b
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,0010h
mov bx,0000h
mov ax,0b800h
mov es,ax
mov ax,0
mov di,0010h
mov cx,3
s: push cx
mov cx,16
mov si,0
s0: mov al,ds:[si]
mov ah,ds:[di]
mov es:[bx+07b6h],ax
inc si
add bx,2
loop s0
inc di
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
王爽的汇编语言一书中实验九的程序说是在屏幕上显示不同颜色的字,这是我写的,但是运行后屏幕上没有正确显示!请各位看一下!data segment
db'welcome to masm!'
db 00000010b,00100100b,01110001b
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,0010h
mov bx,0000h
mov ax,0b800h
mov es,ax
mov ax,0
mov di,0010h
mov cx,3
s: push cx
mov cx,16
mov si,0
s0: mov al,ds:[si]
mov ah,ds:[di]
mov es:[bx+07b6h],ax
inc si
add bx,2
loop s0
inc di
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
[ 本帖最后由 闭眼到天黑 于 2011-3-2 22:07 编辑 ]