题目
编程:在屏幕中间分别显示绿色、绿底红字,白底蓝字的字符串’welcome to masm!’。
具体的材料知识参考课本
分析
两层循环,外层循环控制显示的行,内层循环控制每一行中数据的复制,需要用到的数据在data段中定义好,方便循环,熟练运用各种寄存器来灵活地定位地址是结题的必要条件,寄存器不够用的话就用栈暂存。
代码
assume cs:code,ds:data
data segment
db 'welcome to masm!'
dw 06e0h,0780h,0820h ;显存第一页第12、13、14行的起始偏移地址
db 02h,24h,71h ;绿色,绿底红字,白底蓝字的属性机器码
data ends
code segment
start:
mov ax,data
mov ds,ax ;ds 存放 data 的段地址
mov ax,0B800h
mov es,ax ;es 存放显存第一页的段地址
mov bx,0 ;bx 存放 样式属性 的相对地址
mov bp,0 ;bp 存放 行数偏移地址 的相对地址
mov cx,3 ;外层循环3次
s: ;外层循环,控制行数
push cx
mov cx,16 ;内层循环16次
mov di,0 ;di 存放 data中字符偏移地址
mov si,64 ;si 存放 显存中每行存第一个字符的起始偏移地址