汇编语言 从键盘输入一个长度不超过30的字符串,其中包含自己的班级名称+学号+姓名的拼音?

要求使用子程序:
屏幕显示输出该字符串;
将该字符串的奇数位置字符提取出来,组合成一个字符串显示输出.;
将该字符串中的所有数字字符剔除,然后显示输出;
将该字符串中的英文大写字母变成小写字母,小写字母变成大写字母,显示输出;
统计该字符串中的大写字母,小写字母和数字的个数,保存在内存变量中,并在屏幕上显示;
将该字符串中的数字进行累加,将累加结果显示输出

这是一个汇编语言程序的设计任务,要求完成一系列操作。以下是一个基于x86汇编语言的实现:

section .data
string_length db 0
str db 0
odd_str db 30 dup(0)
no_digit_str db 30 dup(0)
swap_case_str db 30 dup(0)
upper_case_count dw 0
lower_case_count dw 0
digit_count dw 0
sum_of_digits dw 0

section .bss
buffer resb 31

section .text
extern _printf
extern _scanf
global _main
_main:
; 输入字符串
lea eax, [buffer]
push eax
push input_format
call _scanf
add esp, 8

; 处理字符串
lea edi, [buffer]
lea esi, [str]
process_string:
lodsb
test al, al
jz end_processing
stosb
inc byte [string_length]
jmp process_string
end_processing:
; 输出原始字符串
push dword str
push output_format
call _printf
add esp, 8

call display_odd_characters
call remove_digits
call swap_case
call count_characters
call sum_digits

; 退出程序
mov eax, 1
xor ebx, ebx
int 0x80

display_odd_characters:
; 子程序:输出奇数位置字符
mov ecx, 0
lea edi, [str]
lea esi, [odd_str]
display_odd_loop:
lodsb
test al, al
jz end_display_odd
cmp ecx, 0
je store_odd
skip_odd:
not ecx
jmp display_odd_loop
store_odd:
stosb
not ecx
jmp display_odd_loop
end_display_odd:
stosb
push dword odd_str
push output_format
call _printf
add esp, 8
ret

remove_digits:
; 子程序:删除数字字符
lea edi, [str]
lea esi, [no_digit_str]
remove_digits_loop:
lodsb
test al, al
jz end_remove_digits
cmp al, '0'
jb store_char
cmp al, '9'
ja store_char
jmp remove_digits_loop
store_char:
stosb
jmp remove_digits_loop
end_remove_digits:
stosb
push dword no_digit_str
push output_format
call _printf
add esp, 8
ret

swap_case:
; 子程序:大小写字母互换
lea edi, [str]
lea esi, [swap_case_str]
swap_case_loop:
lodsb
test al, al
jz end_swap_case
cmp al, 'A'
jb store_swap
cmp al, 'Z'
ble to_lower
cmp al, 'a'
jb store_swap
cmp al, 'z'
jg store_swap
to_lower:
xor al, 0x20
store_swap:
stosb
jmp swap_case_loop
end_swap_case:
stosb
push dword swap_case_str
push output_format
call _printf
add esp, 8
ret

count_characters:
; 子程序:统计字符数量
lea

温馨提示:答案为网友推荐,仅供参考
相似回答