assume cs:code,es:data,ss:stack
data segment
db 00000010B,00100100B,0110001B
data ends
stack segment
db 'welcome to masm!'
stack ends
code segment
start: mov ax,0b800h
mov ds,ax
mov ax,data
mov es,ax
mov ax,stack
mov ss,ax ;前面指令定义为显存缓冲区段DS字符属性段为ES字符段为SS
mov bx,0780h ;字符输出的行数第13行
mov di,0
mov dx,3 ;JCXZ指令的循环次数即三次完整字符的输出
mov si,0 ;字符输出的列变量
s0: mov ah,es:[di] ;将字符属性存入AH
dec dx ;每循环一次减1共三次循环
mov bp,0
mov cx,16
s: mov al,[bp] ;将字符按字节送义AL
mov [bx].32[si],al ;字符从33列送入显存缓冲区
mov [bx].32[si+1],ah ;字符属性从33列送入显存缓冲区
add si,2 ;循环一次向右移2列
inc bp ;循环一次字符段内存字节单元地址+1
loop s
inc di ;完成一次完整的字符输出,改变一次字符属性
mov cx,dx
jcxz s1 ;CX=0时跳转到S1
jmp short s0 ;位移到S0
s1: mov ax,4c00h
int 21h
code ends
end start |