1.描述: 编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下.
名称: letterc
功能: 将以0结尾的字符串中的小写字母转变成大写字母
参数: ds:si指向字符串首地址
因为要转化的字符串中小写字母,而整个字符串中还有其他符号(空格,横杠),所以我们需要用ASCII来判断值是否在[97,122]之间,确定是小写字母,然后再转化成大写字母
1 assume cs:code 2 data segment 3 db "Beginner's All-purpose Symoblic Instruction Code.",0 4 data ends 5 6 code segment 7 start: 8 mov ax,data 9 mov ds,ax 10 mov si,0 11 call letterc ;调用子程序 12 13 mov ax,4c00h 14 int 21h 15 ; 子程序 16 letterc: 17 push ax 18 push cx ;入栈各个寄存器的值,防止子程序破坏外部值 19 s: 20 mov cl,ds:[si] 21 mov ch,0 22 23 jcxz ok ;如果cx==0,则结束循环.判断是否为字符串末尾. 24 25 cmp cl,97 ;判断字符是否在[97,122]之间,如果在说明 26 jb check_out ;是小写字母,需要转换大写. 27 cmp cl,122 ;jb,小于97跳转.ja 大于122跳转 28 ja check_out 29 30 mov al,cl ;将小写字母改成大写字母 31 and al,11011111b 32 mov cl,al 33 mov ds:[si],cl 34 35 check_out: ;判断跳出位置 36 inc si 37 jmp short s ;执行循环 38 39 ok: 40 pop cx ;恢复值 41 pop ax 42 ret 43 44 code ends 45 end start