assume cs:code,ds:data
data segment
d0 db 'welcome to masm'
; BL R G B I R G B
d1 db 00000010b,00100100b,01110001b
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0B800h ;显存缓冲区
mov es,ax
;计算字符串长度
mov bx,offset d0
mov bp,offset d1
sub bp,bx
mov cx,bp
mov bp,bx ;将拷贝初始地址和目的地址设为一致
mov si,0 ;si作为函数中使用的字母颜色在内存中的位置
s: mov di,1600 ;di作为字符串所处的行数,为160的倍数
mov al,ds:[bx]
;调用函数,并且每次调用后选择下一种颜色,作为下一次调用的si参数
call f
inc si
call f
inc si
call f
mov si,0 ;每输出完成一列的字符,将颜色位置si清空
inc bx
add bp,2
loop s
mov ax,4c00h
int 21h
;函数
f: push ax
mov es:[bp+60+di],al
mov al,ds:[d1+si]
mov es:[bp+1+60+di],al
add di,160
pop ax
ret
code ends
end start
实验9 根据材料编程
最新推荐文章于 2023-05-20 20:08:01 发布