本帖最后由 tsembrace 于 2011-10-23 14:44 编辑 assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start : mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0b872h
mov bx,0
mov cx,3
s:push cx
push ax
push bx
mov es,ax
mov si,0
mov di,0
mov cx,10h
s1:
mov al,ds:[di]
mov es:[si],al
add si,2
inc di
loop s1 ;第一次循环将字符值赋给指定区域
pop bx
mov al,ds:[bx+16] ;调出预设的第一行字符属性值,传给al
;mov di,1 ;di=1啥意思?这句无意义,删除--------------------------
inc bx ;bx=2,使下次循环指向第二行的字符属性值;但这句放在s2循环结束的后面更合适一些
mov cx,10h
mov si,1
s2:
mov es:[si],al ;注意此时si通过s1循环已经不是在起始位置了,所以要加上面这句-------------------
add si,2
loop s2
pop ax
add ax,0ah
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
|