一. 子程序:显示字符串
实验要求:在屏幕的8行3列,用绿色显示data段中的字符串。
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号(0-24取值范围);(dl)=列号(0-79取值范围);(cl)=颜色(是一个二进制排列组合的值);ds:si指向字符串的首地址。
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8
mov dl,3
mov ch,0
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:push dx
push cx
push si
mov ax,0b800h
mov es,ax
mov ah,0
mov al,160
mul dh
mov bx,ax
mov ah,0
mov al,2
mul dl
add bx,ax
mov di,0
mov al,cl
mov ch,0
show:mov cl,ds:[si]
jcxz ok
mov es:[bx+di+0],cl
mov es:[bx+di+1],al
add di,2
inc si
jmp short show
ok:pop si
pop cx
pop dx
ret
code ends
end start
二. 解决除法溢出的问题
assume cs:code
code segment
start:mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
ret
code ends
end
三。数值显示
assume cs:code
data segment
db 10 dup(0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov ch,0
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:push ax
push bx
push cx
push si
mov si,0
mov bx,10
change:mov dx,0
div bx
mov cx,ax
jcxz last
add dx,30h
push dx
inc si
jmp short change
last:add dx,30h
push dx
inc si
mov cx,si
mov si,0
s:pop ds:[si]
inc si
loop s
exit:pop si
pop cx
pop bx
pop ax
ret
show_str:push dx
push cx
push si
mov ax,0b800h
mov es,ax
mov di,0
mov ax,0
mov al,160
mul dh
mov bx,ax
mov ax,0
mov al,2
mul dl
add bx,ax
mov ch,0
mov al,cl
show:mov cl,ds:[si]
jcxz ok
mov es:[bx+di+0],cl
mov es:[bx+di+1],al
add di,2
inc si
jmp short show
ok:pop si
pop cx
pop dx
ret
code ends
end