编写一个完整的段定义结构程序: 从键盘输入一个字符串(不超过255个),将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。
时间: 2024-03-04 08:48:43 浏览: 73
写自定义函数stringLower()实现将一个字符串中所有大写字母变为小写字母。在主函数中输入一含有大写字母的字符串,调用该函数并输出改变后的字符串。
5星 · 资源好评率100%
好的,以下是一个完整的段定义结构程序,实现从键盘输入一个字符串,将其中的小写字母转换成大写字母,并按原来的顺序在屏幕上显示。
```
section .data
input_msg db 256 ; 存储输入的字符串
output_msg db 256 ; 存储输出的字符串
section .bss
; 暂无
section .text
global _start
_start:
; 读取字符串
mov eax, 3 ; 系统调用号为 3,表示读取
mov ebx, 0 ; 文件描述符为 0,表示标准输入
mov ecx, input_msg ; 存储读取到的字符串
mov edx, 256 ; 读取的最大长度为 256 个字节
int 0x80 ; 调用系统调用
; 将小写字母转换为大写字母
mov esi, input_msg ; esi 存放输入的字符串
mov edi, output_msg ; edi 存放输出的字符串
mov ecx, 256 ; 将 ecx 设为 256,遍历整个字符串
convert_loop:
cmp byte [esi], 0 ; 如果已经到了字符串结尾,跳出循环
je convert_done
cmp byte [esi], 'a' ; 如果是小写字母,转换成大写字母
jb convert_next
cmp byte [esi], 'z'
ja convert_next
sub byte [esi], 32 ; 小写字母转换成大写字母
convert_next:
mov byte [edi], byte [esi] ; 将字符存储到输出字符串
inc esi ; 指向下一个字符
inc edi ; 指向下一个字符
loop convert_loop ; 继续循环
convert_done:
; 输出转换后的字符串
mov eax, 4 ; 系统调用号为 4,表示写入
mov ebx, 1 ; 文件描述符为 1,表示标准输出
mov ecx, output_msg ; 存储要输出的字符串
sub edi, output_msg ; 计算输出字符串的长度
mov edx, edi ; 输出字符串的长度
int 0x80 ; 调用系统调用
; 退出程序
mov eax, 1 ; 系统调用号为 1,表示退出
xor ebx, ebx ; 返回值为 0
int 0x80 ; 调用系统调用
```
这个程序首先从键盘读取字符串,然后将其中的小写字母转换成大写字母,并存储到另一个字符串中。最后,它输出转换后的字符串并退出程序。
阅读全文