用汇编语言实现从键盘输入小写字符串,输出对应的大写字符串。输入长度不限,直接显示对应大写字符串,要求程序要有适当的提示信息。
时间: 2023-11-27 15:55:09 浏览: 99
基于汇编实现输入字符串并显示
4星 · 用户满意度95%
以下是使用 x86 汇编语言实现从键盘输入小写字符串,输出对应的大写字符串的程序:
```assembly
section .data
prompt db "Please enter a string: ", 0
output db "The uppercase string is: ", 0
buffer db 256 ; 输入缓冲区大小
section .bss
input resb 256 ; 输入字符串
upper resb 256 ; 转换后的大写字符串
section .text
global _start
_start:
; 输出提示信息
mov eax, 4 ; 4 表示 sys_write 系统调用
mov ebx, 1 ; 1 表示标准输出
mov ecx, prompt ; 存放要输出的字符串的地址
mov edx, 19 ; 存放要输出的字符串的长度
int 0x80 ; 调用系统调用
; 读取输入字符串
mov eax, 3 ; 3 表示 sys_read 系统调用
mov ebx, 0 ; 0 表示标准输入
mov ecx, input ; 存放输入字符串的地址
mov edx, buffer ; 存放输入缓冲区的大小
int 0x80 ; 调用系统调用
; 转换为大写字符串
mov esi, input ; 存放输入字符串的地址
mov edi, upper ; 存放转换后的大写字符串的地址
mov ecx, 0 ; 存放字符串长度
convert_loop:
cmp byte [esi], 0 ; 检查字符串是否结束
je convert_done ; 如果结束则跳转到 convert_done
cmp byte [esi], 'a' ; 检查字符是否是小写字母
jb convert_next ; 如果不是小写字母则跳转到 convert_next
cmp byte [esi], 'z'
ja convert_next
sub byte [esi], 32 ; 将小写字母转换为大写字母
convert_next:
mov byte [edi], [esi] ; 将字符复制到转换后的字符串中
inc esi ; 增加输入字符串指针
inc edi ; 增加转换后的字符串指针
inc ecx ; 增加字符串长度
jmp convert_loop ; 跳转到 convert_loop
convert_done:
mov byte [edi], 0 ; 在转换后的字符串末尾加上结束符号
; 输出转换后的大写字符串
mov eax, 4 ; 4 表示 sys_write 系统调用
mov ebx, 1 ; 1 表示标准输出
mov ecx, output ; 存放要输出的字符串的地址
mov edx, 25 ; 存放要输出的字符串的长度
int 0x80 ; 调用系统调用
mov eax, 4 ; 4 表示 sys_write 系统调用
mov ebx, 1 ; 1 表示标准输出
mov ecx, upper ; 存放转换后的大写字符串的地址
mov edx, ecx ; 存放转换后的大写字符串的长度
int 0x80 ; 调用系统调用
; 退出程序
mov eax, 1 ; 1 表示 sys_exit 系统调用
xor ebx, ebx ; 返回值为 0
int 0x80 ; 调用系统调用
```
在 Linux 上可以使用 nasm 编译器将上述代码编译成可执行文件:
```bash
nasm -f elf32 -o program.o program.asm
ld -m elf_i386 -o program program.o
```
然后运行可执行文件即可看到程序的运行结果。
阅读全文