[汇编]⼤⼩写转换
1 data segment
2    ;定义字符串缓冲区
3    ;MAXLEN 表⽰允许输⼊的最⼤字符数量
4    ;ACTLEN 表⽰实际输⼊的数量
5    ;STR ⽤于存储输⼊的字符串
6    ;以下⾯为例,允许最⼤输⼊5个字符,如果STR后⾯的长度也定义为5,则实际输⼊的字符数量仅为4,
7    ;因为最后⼀个字符会⽤于存储0Dh(回车符号)
8    ;例如:输⼊"1234",然后回车,此时内存的情况为: 05 00 31 32 33 34 0D
9    ;因此,为了满⾜实际的最⼤数量,通常将MAXLEN定义得⽐实际的多1个。
10    MAXLEN db 6        ;允许最⼤长度
11    ACTLEN db 0        ;实际长度
12    STR dw 6 dup('')    ;存放字符串
13    ;提⽰语句
14    PROMPT1 db 0DH,0AH,"Please input a string:$"
字符串函数中将大写转换为小写15    PROMPT2 db 0DH,0AH,"Your string is :$"
16    CHOOSE  db 0DH,0AH,"chose 1 or 2:$"
17 ends
18
19 code segment
20 start:
21    ;设置数据段寄存器
22    mov ax, data
23    mov ds, ax
24 input:
25    ;提⽰输⼊,提⽰语句位于ds:dx处
26    lea dx, CHOOSE
27    mov ah, 9
28    int 21h
29    mov ah,01H  ;输⼊跳转
30    int 21h
31    cmp al,31H
32    mov dl,0AH
33    mov ah,02H
34    int 21h
35    mov dl,0DH
36    mov ah,02H
37    int 21h
38    jz  tosmall
39    jmp tobig
40 tosmall:
41    call input_str
42    mov si,0;指针
43    mov cl,ACTLEN;循环次数
44    mov ch,0
45    call tosmall_print
46    jmp next
47 tobig:
48    call input_str
49    mov si,0;指针
50    mov cl,ACTLEN;循环次数
51    mov ch,0
52    call tobig_print
53    jmp next
54 next:
55    JMP input
56    ;返回操作系统
57    mov ax, 4c00h
58    int 21h
59 ends
60 ;---------------------
61 tosmall_print proc near
62    ;输出结果的提⽰语句
63    lea dx,PROMPT2
64    mov ah, 9
65    int 21h
66 xunhuan1:
67    mov ax,STR[si]
68    cmp al,5BH
69    jnb  nochange
70    add ax,20H
71 nochange:
72    mov dl,al
73    mov ah,02H
74    int 21H
75    inc    si          ;加1不影响cf
76    loop xunhuan1
77    ret
78 tosmall_print endp
79 ;---------------------
80 tobig_print proc near
81    ;输出结果的提⽰语句
82    lea dx,PROMPT2
83    mov ah, 9
84    int 21h
85 xunhuan2:
86    mov ax,STR[si]
87    cmp al,5BH
88    jnb  nochange2
89    add ax,20H
90 nochange2:
91    sub ax,20H
92    mov dl,al
93    mov ah,02H
94    int 21H
95    inc    si          ;加1不影响cf
96    loop xunhuan2
97    ret
98 tobig_print endp
99 ;---------------------
100 input_str proc near
101    ;调⽤AH=0ah的21H中断程序,获取输⼊的字符串;
102    ;(ds:dx)=缓冲区最⼤字符数
103    ;(ds:dx+1)=实际输⼊字符数
104    ;ds:dx=缓冲区⾸址
105    lea dx,MAXLEN
106    mov ah,0ah
107    int 21h
108
109    ;取得实际输⼊的字符串数⽬
110    mov bl,ACTLEN
111    mov bh,0
112    ;将结尾处改为'$'以便调⽤AH=09H功能,即输出刚输⼊的字符串113    mov STR[bx],'$'
114    ret
115
116    lea dx, PROMPT1
117    mov ah, 9
118    int 21h
119    ret
120 input_str endp
121 ;------------------------
122 end start ; set entry point and stop the assembler.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。