assume cs:code,ds:data,ss:stack
data segment
a db 'welcome to masm!' ;按照要求需要显示三遍
b db 82h,0a4h,0f1h ;每一遍显示对应的显示模式
data ends
stack segment
dw 0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,8
mov ax,data
mov ds,ax
mov ax,0b800h ;显存开始的位置
mov es,ax
;------------------------------------------------------------------
mov bx,0 ;用于定位行显示位置的
mov cx,3 ;显示三遍
mov bp,0 ;定位显示模式
;------------------------------------------------------------------
copy_s: ;显示字符串
push cx ;循环显示字符的时候还要用,所以暂存
mov cx,16 ;显示字符串的计数器,共16个
mov si,0 ;变址定位字符
mov di,0 ;变址定位需要显示的位置
copy_w: ;显示字符串的每个字符
mov al,ds:[si] ;字符放在显存的低位
mov ah,ds:[16+bp] ;字符属性放在显存的高位
mov es:[10*160+64+bx+di],ax ;将字符和属性写入显存
inc si ;取下个字符的计数器自增1
add di,2 ;写下个字符的计数器自加2
loop copy_w
add bx,160 ;写完一个字符串后,定位到下一行
inc bp
pop cx
loop copy_s
;------------------------------------------------------------------
mov ax,4c00h
int 21h
code ends
end start |