实验11 编写子程序-letterc 小写字母转变成大写字母
编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。
名称:letterc
功能:将以0结尾的字符串中的小写字母转变成大写字母
“Beginner’s All-purpose Symbolic Instruction Code.”
参数:ds:si指向字符串首地址
assume cs:code
data segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0 ;设置ds:[si]指向字符串
mov ax,0b800h
mov es,ax
mov di,11*160
mov cx,49
s: mov al,ds:[si]
mov es:[di],al
inc si
add di,2
loop s ;自己增加的代码,显示原来的字符串
mov si,0 ;恢复si
call letterc
mov si,0 ;恢复si
mov ax,0b800h
mov es,ax
mov di,13*160
mov cx,49
s2: mov al,ds:[si]
mov es:[di],al
inc si
add di,2
loop s2 ;自己增加的代码,显示改变后的字符串
mov ax,4c00h
int 21h
letterc: push cx
pushf ;保护寄存器和标志寄存器
mov cx,0
s1: mov cl,ds:[si] ;取一个字符
jcxz ok ;如果取到0则转向ok结束
cmp cl,61h ;与61h(a)比较
jb next ;小于61h(a)的话,说明不是小写字母,不用管,跳至next转向下一个字符
cmp cl,7ah ;不小于61h(a)的话,再与7ah(z)比较
ja next ;如果大于7a(z),则不是小写字母,不用管,跳至next转向下一个字符
and cl,0dfh ;如果不小于61h,且不大于7ah,说明是小写字母,会执行到这一句,将cl中的小写字母变成大写字母
mov ds:[si],cl ;将变成大写字母的字符放回去
next: inc si ;指向下一个字符
jmp short s1
ok: popf
pop cx
ret ;恢复寄存器并返回
code ends
end start
实验结果: