王爽 汇编 实验11

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
原文地址:https://www.cnblogs.com/Triomphe/p/8673381.html