题:编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。
名称: letterc
功能: 将以0结尾的字符串中的小写字母转变成大写字母。
参数: ds:si指向字符串首地址。
如题,任意字符,就得考虑一些其他字符,这就需要划分一个范围,就是取出的字符应该在小写字母的ASCII码范围内。
这就可以用cmp指令和条件转移指令。
assume cs:code,ds:data
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
call far ptr letterc ;调用子程序.功能:将以0结尾的字符串中小写字母转变成大写字母。
mov ax,4c00H
int 21H
comment !
子程序:将以0结尾的字符串中小写字母转变成你大写字母。
!
letterc: push si
push di
push ax
push bx
push dx
push cx
mov dl,61H ;小写字母的最小字母a的16进制。
mov dh,7AH ;小写字母最大字母z的16进制。
comment !
标号b。作用:1.取字符
2.判断是否最后一个字符
3.判断取出的字符是否在是大写字母而不是其他字符
4.如果是大写字母,则转换为小写覆盖原处
4.如果是其他字符则重新跳转到b标号.循环1步骤
!
b : mov al,ds:[si] ;将字符串送入到al中。
mov ah,0
mov cx,ax ;将ax中的值送入到cx,用来判断是否取到最后一个字符。
jcxz r ;如果cx中的值等于0的话,跳转到r标号。
cmp al,dl ;判断al的中的字符是否大于等于 小写字母a的ascii码。
jna a ;如果不大于等于则跳转到标号a处。用来判断al中的是否是小写字母,而不是其他字符。
cmp al,dh ;判断al中的字符是否小于等于 小写字母z的ascii码。
jnb a ;如果不小于等于则跳转到a标号处。
and al,11011111B
mov ds:[si],al
comment !
标号a. 作用:用来指向下一个字符串。
!
a: inc si
jmp b
comment !
标号r. 作用:将原寄存器的值返回并返回程序。
!
r: pop cx
pop dx
pop bx
pop ax
pop di
pop si
retf
code ends
end start