汇编语言,用DOSbox编译,给定一个英文字符串(长度<50), 如“AB123cdE*87fGabFZ”,要求将其大写转小写,小写转大写后存入以result地
时间: 2023-06-09 13:05:12 浏览: 137
址开始的连续存储空间,每个转换后的字符占1个字节,不足的用0补足。
好的,我明白了。对于您提出的问题,我可以提供程序代码来解决它。以下是代码:
```assembly
assume cs:code, ds:data
data segment
str1 db 'AB123cdE*87fGabFZ$' ; 输入的字符串
result db 50 dup (0) ; 存储转换后的结果
data ends
code segment
start:
mov ax, data
mov ds, ax ; 初始化数据段寄存器
lea si, str1 ; 将si指向输入字符串的起始位置
lea di, result ; 将di指向存储结果的起始位置
cld ; 设置方向标志寄存器,以便向前遍历字符串
mov cl, 50 ; 待遍历字符串的长度
xor ax, ax ; 清空ax寄存器
loop1:
lodsb ; 从输入字符串中读取1个字节到al
cmp al, '$' ; 如果已遍历完整个字符串,则结束
je endloop1
cmp al, 'A'
jl lower_case ; 如果al小于'A',则为小写字母
cmp al, 'Z'
jle upper_case ; 如果al在'A'~'Z'范围内,则为大写字母
cmp al, 'a'
jl other_char ; 如果al小于'a',则为其他字符
cmp al, 'z'
jg other_char ; 如果al大于'z',则为其他字符
lower_case:
add al, 32 ; al加上32,转换为大写字母
jmp store_char
upper_case:
sub al, 32 ; al减去32,转换为小写字母
jmp store_char
other_char:
xor al, al ; 将al清零,表示为0
store_char:
mov [di], al ; 将转换后的字符存储到结果中
inc di ; di指向下一个位置,以便存储下一个字符
loop loop1 ; 继续遍历输入字符串
endloop1:
mov ah, 4ch ; 退出程序
int 21h
code ends
end start
```
希望以上代码可以解决您的问题。如果您有任何其他问题,随时都可以问我。
阅读全文