一、编写一个子程序,将包含任意字符,以0结尾的字符串的小写字母转变成大写字母,描述如下:
名称:letters
功能:将以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
应用举例
assume cs:codesg
datasg segment
db "Beginner's All-purpose 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
答案
assume cs:codesg
datasg segment
db "Beginner's All-purpose 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:
// 暂时寄存器的值
push ax
push bx
push cx
push si
// 清空cx的值
mov ch, 0
s0:
// 如果读取到0,就跳转至标号处ok处
mov cl, [si]
jcxz ok
// cl - 64h 如果结果<0的话,就跳转至标号s1处
cmp cl, 64h
jb s1
// cl - 7Ah 如果结果大于7A处的话,就跳转至标号s1处
cmp cl, 7Ah
ja s1
// 来到说明是小写字母了,小写字母转大写字母只要 & 11011111就可以了
and cl,11011111b
// 赋值给上面对应的内存单元
mov [si], cl
// 循环读取
jmp s0
s1:
// si ++,每次读取自增一个偏移地址
inc si
jmp s0
// 结束方法,还原寄存器的值,并退出
ok:
pop si
pop cx
pop bx
pop ax
ret
codesg ends
end begin
网友评论