Fork me on GitHub

使用汇编语言将输入的字符串大写转换为小写

 1 ;=====================
 2 ;字符串中大写变小写
 3 DATAS segment
 4 String db 10, ?, 10 dup(?) ;最多接收10个字符,最后的回车算一个字符
 5 DATAS ends
 6 
 7 CODES segment
 8 START:
 9     mov AX,DATAS
10     mov DS,AX
11     ;正式代码部分
12 
13     mov dx,offset String    
14     mov ah,0ah              ;10号功能调用设置
15     int 21h                 ;调用10号DOS中断,输入字符串
16 
17     mov si,offset String+1  ;获取记录输入字符个数内容的偏移地址
18     xor cx,cx               ;cx清零 loop循环的次数由cx设置
19     mov cl,[si]             ;设置循环次数将: DS:si中的内容取出来放入cl中
20 lp:
21     inc si                  ;si自增1
22     mov al,[si]             ;把si地址中存放的数据传给al
23     cmp al,'A'              ;字符比较
24     jb next                 ;如果小于'A'则跳转到next:
25     cmp al,'Z'
26     ja next                 ;如果大于'Z'则跳转到next:
27     add al,20h              ;在'A'~'Z'范围内,加20h变成小写
28     mov [si],al             ;将内容重新存放进内存空间
29 next:
30     loop lp                 ;循环调用
31     mov byte ptr [si+1],'$' ;字符串最后加个'$'便于用9号功能输出避免输出许多无关内容
32     
33     mov ah,2 
34     mov dl,0ah
35     int 21h        ;换行
36     mov dl,0dh
37     int 21h ;换行
38     ;为什么+2?因为录入字符串的时候string 指向的内存地址空间依次存放的 0ah,录入的
39     ;个数,录入的字符串
40     mov dx,offset String+2  
41     mov ah,9
42     int 21h ;调用9号DOS中断,显示首地址为DS:DX的字符串
43 
44     mov al,0
45     mov AH,4CH
46     INT 21H
47 CODES ends
48     end START

 

posted @ 2019-01-08 16:40  粥里有勺糖  阅读(3998)  评论(0编辑  收藏  举报