;实验11:编写子程序
data segment
db "Beginner's All-purpose Symbolic Instrution code.",0
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32
mov si,0
call letterc
mov dh,8
mov dl,3
mov cl,2
call show_to0
mov ah,4ch
int 21h
letterc:
;名称:letterc
;功能:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si指向字符串首地址
push ax
push si
ls: mov al,[si]
cmp al,0
je ok
cmp al,'a'
jb next
cmp al,'z'
ja next
and al,11011111b
mov [si],al
next: inc si
jmp short ls
ok: pop si
pop ax
ret
show_to0:
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
; (cl)=颜色,ds:si指向字符串的首地址。
;返回:无
push ax
push bx
push cx
push dx
push si
push di
push es
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov bx,ax ;bx指向行
mov dh,0
mov di,dx
add di,di ;si指向列
mov ah,cl
show_to0_next:
mov al,[si]
mov cx,0
mov cl,al
jcxz show_to0_ok
mov es:[bx+di],ax
inc si
add di,2
jmp short show_to0_next
show_to0_ok:
pop es
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start