assume cs:codesg,es:excess,ss:stack
excess segment
db 'welcome to masm!'
excess ends
stack segment stack ;用堆栈保存行数和颜色效果
db 0ah,2h,0bh,24h,0ch,71h
stack ends
codesg segment
start:mov ax,0b800h
mov ds,ax
mov ax,excess
mov es,ax
mov ax,stack
mov ss,ax
mov sp,0
mov cx,3 ;循环三次,在三行显示三种颜色效果
color:pop dx
mov al,dl ;al保存行数
mov ah,dh ;ah保存颜色效果
mov di,cx ;di保存外围循环次数
;**********以下相当于(mov bx,al*160+64)******************
mov cx,160
mov bh,0
mov bl,al
mov ax,bx
a:add bx,ax
loop a
add bx,64
;**********用于计算bx(也就是定位屏幕中间)****************
mov si,0
mov cx,16
s:mov al,es:[si]
mov ds:[bx],al
mov byte ptr ds:[bx+1],ah ;颜色效果
inc si
add bx,2
loop s
mov cx,di ;用di保存外围循环次数
loop color
mov ax,4c00h
int 21h
codesg ends
end start |