代码如下:
assume cs:code
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax ;使标号data与ds连接
mov ax,0b800h
mov es,ax ;把显存地址放入es
mov si,0 ;偏移地址置为0
mov di,10*160+80 ;由一行80个字符站160字节,可设第十行的第八十个字节,即为中间
mov cx,16 ;设置循环次数,根据data段的数据长度。
s1: mov al,ds:[si] ;把data段里的字符放入低地址
mov ah,00000010b ;前景色为绿色,即字体为绿色
;由字符显示规则: 7 6 5 4 3 2 1 0
; BL R G B I R G B
; 闪烁 背景 高亮 前景
mov es:[di],ax ;把低地址和高地址合起来的数值放入显存,前面已经定义了es为存放显存地址的寄存器
inc si ;偏移地址向后移动1个字节
inc di ;显存地址向后移动一个字节
inc di ;要移动两个字节,做两次inc
loop s1 ;设置循环
mov si,0 ;si置0
mov di,11*160+80 ;十一行的中间位置
mov cx,16 ;设置循环量
s2: mov al,ds:[si]
mov ah,00100100b ;绿底红色
mov es:[di],ax ;放入显存
inc si ;偏移地址移动1
inc di ;显存偏移地址移动
inc di ;显存偏移地址移动
loop s2 ;设置循环变量
;初始化存放偏移地址的寄存器
mov si,0 ;si置0
mov di,12*160+80 ;第十二行
mov cx,16
s3:
mov al,ds:[si]
mov ah,10111100b
mov es:[di],ax
inc si
inc di
inc di
loop s3
mov si,0
mov di,9*160+80
mov cx,16
s4: mov al,ds:[si]
mov ah,01110001b
mov es:[di],ax
inc si
inc di
inc di
loop s4
mov ax,4c00h
int 21h ;查看完整的显示输入"-g 4c"
code ends
end start |