题目
在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串“welcome to masm!”。
源代码
assume ds:code
data segment
;要显示的字符串内容
db 'welcome to masm!'
data ends
code segment
start: ;设置数据段地址
mov ax,data
mov ds,ax
mov ax,0B800H ;B800H显示缓冲区的起始地址
mov es,ax
mov bx,0 ;字符串内容的偏移地址,每次增加1
;缓冲区的偏移地址,每次增加2
;深入分析:
;需显示在屏幕中间,由材料可得每1行有80个字符占160个字节,而显示
;的字符串字节+属性字节,共32个字节,所以,要达到水平居中的效果
;开始值应该为(160 - 32)/ 2 =64
mov bp,64
mov cx,16;循环16次
a: mov al,ds:[bx] ;取得字符串的字节数据
mov ah,02H ;字符串黑底绿色
;(垂直居中,由材料可得共25行,要显示3行字符串,一行有160个字符((25-3)/2)* 160 = 6E0H)
mov es:[bp+6E0H],ax ;显示在第11行上
mov ah,42H ;字符串绿底红色
mov es:[bp+780H],ax ;显示在第12行上(6E0H + A0 = 780H)
mov ah,71H ;字符串白底蓝色
mov es:[bp+820H],ax ;显示在第13行上(780H + A0 = 820H)
;累加操作
inc bx
add bp,2
loop a
mov ax,4C00H
int 21H
code ends
end start