assume cs:code ds:data ss:stack ;实验9,题目容易读迷糊,大概意思就是让程序
;在屏幕中间显示3组不同颜色的'welcome to masm!'
data segment
;0123456789abcdef
db 'welcome to masm!'
db 00000010b ;绿色
db 00100100b ;绿底红色
db 01110001b ;白底蓝色
data ends
stack segment
db 16 dup (0)
stack ends
code segment
over: ;最后一步执行,其作用和实验八一样
mov ax,4c00h
int 21h
start: ;cs:ip指向这里开始运行,最开始不运行标识符 over
mov ax,data
mov ds,ax
mov bx,0b800h
mov es,bx
mov di,160*12+40 ;因为要显示在屏幕中间,所以得位移:每行160字节数*12行
; +40字节,同时也方便下面 目标偏移地址 的输入
mov bx,10h ;bx为颜色偏移地址
mov cx,3 ;颜色偏移地址bx自加3次后cx=0,执行下一条语句
allrow:
push cx
push di ;di为目标偏移地址,每次bx++时,自动 push di
mov si,0 ;si为welcome的w偏移地址,每次bx+1时si都置于0
mov cx,16 ;si++为16时cx=0,执行下一条语句
firstrow:
mov al,ds:[si]
mov ah,ds:[bx]
mov es:[di],ax
inc si
add di,2
loop firstrow
pop di ;(di)的出栈
pop cx ;压栈作用是把最外层的循环保存起来,这里是cx值的出栈
inc bx,1 ;bx++的每次循环依次转移 绿色,绿底红色,白底蓝色 的代码值到es中
loop allrow
jmp over
code ends
end start
笨鸟一只,哎