问题:将以0结尾的字符串的小写字母转换成大写字母。
网上看的一个算法很巧妙。
代码如下:
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 bx, 0
call letterc
mov ax,4c00h
int 21h
letterc:
push bx
s0: mov al,[bx]
cmp al, 0
je exit
cmp al,61h ;61h为 ' a ' 的ASCII码
jb next
cmp al,7ah ;7ah为 ' z ' 的ASCII码
ja next
and al,11011111b
mov [bx],al
next: inc bx
jmp short s0
exit:
pop bx
ret
code ends
end start
data segment
db " Beginner's All-purpose Symbolic Instruction Code. " , 0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx, 0
call letterc
mov ax,4c00h
int 21h
letterc:
push bx
s0: mov al,[bx]
cmp al, 0
je exit
cmp al,61h ;61h为 ' a ' 的ASCII码
jb next
cmp al,7ah ;7ah为 ' z ' 的ASCII码
ja next
and al,11011111b
mov [bx],al
next: inc bx
jmp short s0
exit:
pop bx
ret
code ends
end start
通过这个算法,使我对cmp指令的运用更加熟悉。