一、实验目的
通过这个实验获得相关经验,为后续课程做铺垫。
二、实验内容
在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm!’。
三、解决思路
① 阅读实验内容,了解实验要求。
② 由材料提示,得所需3种字符属性:
(闪烁:BL)(背景:R G B)(高亮:I)(前景:R G B)
题目要求的属性为1,不要求的为0
绿色:00000010B==02H
绿底红色:00100100B==24H
白底蓝色:01110001B==71H
③ 推算出屏幕中央为:12、13、14行;32~47列。(经后续调试确定,从52列开始写入更靠近中央位置)
④ 在数据段中定义字符串’welcome to masm!'与所需3种属性的字节。
⑤ 使用内外循环,逐行编写。(外循环3次,内循环16次)
⑥ 调试修正。
四、实验过程
1.实验代码
assume cs:code,ds:data
data segment; 存储需要输入的数据
db 'welcome to masm!'; 16字节
db 02h,24h,71h; 绿色、绿底红字、白底蓝字
data ends
code segment
start:mov ax,0b878h; 从12行开始,取12、13、14行
mov ds,ax
mov ax,data
mov es,ax; es指向data
mov bx,0
mov cx,3; 外循环3次
s:mov dx,cx; 将cx存入dx
mov ah, es:[16+bx]; 存入字符属性
mov si,0
mov di,0
mov cx,16; 内循环16次
s1:mov al,es:[0+di]; 存入题目要求字符
mov ds:[52+si],al; 从52列开始
;计算得出12行32列,但在电脑中调试发现,在52列开始更符合居中要求,这个看电脑
mov byte ptr ds:[52+si+1],ah; 存入属性
inc di
add si,2; 交错存入字符、属性
loop s1; 循环存入单行
mov ax,ds
add ax,0ah
mov ds,ax; 进入下一行
inc bx; 换下一个属性
mov cx,dx; 从dx中导出原cx值至cx寄存器中
loop s
mov ax,4c00h
int 21h
code ends
end start
2.代码运行过程
首先编译连接,之后使用debug的U命令查看指令位置。
找到【mov ax,4c00h】,发现其位置为【076E:001A】。
使用G命令执行。