编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母。
描述如下:
名称:letterc
功能:将以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
应用举例:
assume cs:codesg
datasg segment
db "Beginner's All-puropose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
letterc: .....
codesg ends
end begin
分析:’a’~’z’的ASCII码为97~122,而’A’~’Z’的ASCII码为65~90,小写字母比它对应的大写字母大32,故可以判断只要ASCII码在[97,122]之间的数,减去32即得它所对应的大写字母。
参考代码:
assume cs:codesg
datasg segment
db "Beginner's All-puropose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
; 功能:将以0结尾的字符串中的小写字母转变成大写字母
; 参数:ds:si指向字符串首地址
letterc: mov cl,[si]
mov ch,0
jcxz break
cmp cx,97
jb s ; cx<97
cmp cx,122
ja s ; cx>122
sub cx,32 ; 将小写字母转换为大写字母
mov [si],cl
s: inc si
loop letterc
break: ret
codesg ends
end begin
运行结果: