汇编语言 从键盘输入一个长度不超过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




耀州区17312065296: 从键盘读入一字符串(长度小于32),并将其输出显示. -
大狐欢米丽: 同学我帮你完成了你的程序,编译通过,可 1、从键盘输入一个字符串(串长度小于100个字符),统计其串的长度后输出该串,需要说明的是最后输出的字符串长度是十六进制的,不过这个关系不大.呵呵 ;加点分哈~~~~~~~~~~~~~~~~~~~~...

耀州区17312065296: 从键盘输入一个长度不超过10个且以英文字母为首可以含其他字符的字符串,找出英文字符中的最大最小字符 -
大狐欢米丽: #include<stdio.h>#include<ctype.h>#include<stdlib.h> int main() { char c,min = 'z',max = 'A'; scanf("%c",&c); while(c != '\n') { if(isalpha(c)) { if(c < min) min = c; if(c > max) max = c; } scanf("%c",&c); } printf("最小的字符是%c\n",min); printf("最大的字符是%c\n",max);system("pause"); return 0; }

耀州区17312065296: 编写完整程序,从键盘读入一个长度不超过五十的字符串,显示其中的英文字母(字母以外的符号不显示)
大狐欢米丽: #include<stdio.h> #include<string.h> #define MAXSIZE 50 int main() { int i; char str[MAXSIZE]; gets(str); for(i=0;i<strlen(str);i++){ if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')){ printf("%c",str[i]); } }return 0; }

耀州区17312065296: 输入一个长度不超过10的字符串,然后求输出的字符的长度 -
大狐欢米丽: #include<stdio.h> main() {int i=0;char s[10],*p=s;printf("请输入一个长度小于10的字符串:\n");scanf("%%s",s);while(*p++!='\0')i++;printf("字符串长度为:%%d\n",i); }

耀州区17312065296: 从键盘上输入一个字符串,假定字符串长度不超过40,编写一个程序,要求分别统计出该串中包含十进制数和 -
大狐欢米丽: #include <iostream>#include <map> using namespace std; int main() { char str[] = "abcdefgaabh"; char* p = str; map<char, int> mapCount; char tmp[8]; while( *p != '\0') { if (mapCount.find(*p) == mapCount.end()) { mapCount[*p] = 1; } else { ...

耀州区17312065296: 编写函数,由键盘输入一个字符串(长度不超过20)存到数组中,将该字符串的有效字符反序存放,不使用辅助 -
大狐欢米丽: 附加条件:主函数中完成数组的输入和输出.(貌似要用函数调用)你好厉害,直接问你吧

耀州区17312065296: 从键盘上输入一个长度不超过80的字符串,以ASCII码形式存储到一个磁盘文件,然后输出到屏幕上
大狐欢米丽: 不知道你用那种编程语言,如果是用C,就用FILE* p=fopen("file_name","w") fprintf(p,"你输入的字符");//和一般输出相同只是要换成带f的函数,在函数参数列表中的第一个指定为你要操作的的文件指针. 如果用Java 就用 File、FileOutputStream、DataOuputStream、逐次构造输出流最后调用DataOutputStream类的对象的writeChar()方法.

耀州区17312065296: 输入一个长度不超过80的字符串,编写程序,删除其中所有的数字字符.
大狐欢米丽: 你没说用什么语言写. 如果是c的话,只需要调用memset就可以了 假设char input[80]; 那么只要memset(input,'\0',80); 就清空了.

耀州区17312065296: 1. 【问题描述】用一个二维字符数组存储10个长度均不超过10的字符串,然后从键盘上输入一个长度也不超过10
大狐欢米丽: #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; main() { char a[10][10]; int i; printf("please input 10 string below strlen&lt;10:\n"); for(i=0;i&lt;10;i++) gets(a[i]); printf("please input value:\n"); for(i=0;i&lt;10;i++) if(strlen(a[i])&lt;=10) puts(a[i]); else printf("error\n"); }

耀州区17312065296: 输入一个长度不超过10的字符串,然后求出输入的字符的长度. -
大狐欢米丽: #include<stdio.h> int main() {char s[100]; int n; printf("请输入百一个字符串:\n"); //输入提示 gets(s); //允许字符串中含有空格度 for(n=0;s[n];n++); //测量串长,到达串尾结束符时退出循环,版此时的下标即串长 printf("字符串的长度权是%d\n",n); //输出 system("pause"); return 0; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网