call-综合练习2
1. 小写转大写
assume cs:code,ds:data,ss:stack
; 题目:小写转大写
data segment
db 'word',0
db 'unix',0
db 'wind',0
db 'good',0
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start:
mov ax, stack
mov ss,ax
mov sp,128
call init_reg
call clean_screen
call up_letter
testA:
mov ax,1000H
jmp testA
mov ax,4c00h
int 21h
;================================
up_letter:
mov si,0
mov di,160*10 + 40*2
mov cx,4
upLetter:
call show_string
call capital_letter
call show_word
add di,160
add si,5
loop upLetter
ret
;================================
show_word:
push di
add di,10*2
call show_string
pop di
ret
;================================
capital_letter:
push cx
push ds
push si
mov cx,0
capitalLetter:
mov cl, ds:[si]
jcxz capitalLetterRet
and byte ptr ds:[si], 11011111B
inc si
jmp capitalLetter
capitalLetterRet:
pop si
pop ds
pop cx
ret
;================================
show_string:
push cx
push ds
push es
push si
push di
mov cx,0
showString:
mov cl,ds:[si]
jcxz showStringRet
mov es:[di], cl
add di,2
inc si
jmp showString
showStringRet:
pop di
pop si
pop es
pop ds
pop cx
ret
;================================
clean_screen:
mov bx,0
mov dx,0700H
mov cx,2000
clearScreen:
mov es:[bx],dx
add bx,2
loop clearScreen
;================================
init_reg:
mov bx,data
mov ds,bx
mov bx,0B800H
mov es,bx
ret
code ends
end start