汇编语言 请从键盘输入一个长度不超过30的字符串,其中包含自己的班级名称+学号+姓名的拼音(区分大小写),以"$"符号结束,之后完成以下任务(要求使用子程序): 1.屏幕显示输出该字符串; 2.将该字符串的奇数位置字符提取出来,组合成一个字符串显示输出。3.将该字符串中的所有数字字符剔除,然后显示输出; 4.将该字符串中的英文大写字母变成小写字母,小写字母变成大写字母,显示输出; 5.统计该字符串中的大写字母、小写字母和数字的个数,保存在内存变量中,并在屏幕上显示; 6.将该字符串中的数字进行累加,将累加结果显示输出。

时间: 2023-06-13 12:04:09 浏览: 92
以下是汇编语言的代码,实现了上述6个任务: ```assembly .model small .stack 100h .data input db 31,?,31 dup('$') ; 输入字符串,长度为31 output db 31 dup('$') ; 输出字符串,长度为31 odd db 16 dup('$') ; 奇数位置字符组成的字符串,最长为16 count_upper dw 0 ; 大写字母个数 count_lower dw 0 ; 小写字母个数 count_digit dw 0 ; 数字个数 sum dw 0 ; 数字累加和 .code mov ax, @data mov ds, ax ; 1. 从键盘输入字符串 mov ah, 0Ah lea dx, input int 21h ; 2. 屏幕显示输出该字符串 lea dx, input+2 mov ah, 09h int 21h ; 3. 将奇数位置字符提取出来,组合成一个字符串,并显示输出 ; 注意,从0开始计数,所以奇数位置为1、3、5、... lea si, input+2 lea di, odd mov cx, 0 next_char: mov al, [si] cmp al, '$' je end_loop inc si inc cx test cx, 1 jz next_char ; 如果是偶数位置,跳过 mov [di], al inc di jmp next_char end_loop: ; 显示奇数位置字符组成的字符串 lea dx, odd mov ah, 09h int 21h ; 4. 将该字符串中的所有数字字符剔除,然后显示输出 lea si, input+2 lea di, output next_char2: mov al, [si] cmp al, '$' je end_loop2 inc si cmp al, '0' jb skip_char2 ; 如果是非数字字符,直接复制 cmp al, '9' ja skip_char2 jmp next_char2 skip_char2: mov [di], al inc di jmp next_char2 end_loop2: ; 显示剔除数字字符后的字符串 lea dx, output mov ah, 09h int 21h ; 5. 将该字符串中的英文大写字母变成小写字母,小写字母变成大写字母,显示输出,并统计大写字母、小写字母和数字的个数 lea si, input+2 lea di, output mov cx, 0 mov count_upper, 0 mov count_lower, 0 mov count_digit, 0 next_char3: mov al, [si] cmp al, '$' je end_loop3 inc si cmp al, '0' jb copy_char3 ; 如果是非数字字符,进行大小写转换 cmp al, '9' ja copy_char3 ; 如果是数字字符,累加到sum中 sub al, '0' mov ah, 0 adc sum, ax inc count_digit jmp next_char3 copy_char3: cmp al, 'A' jb check_lower3 ; 如果是非大写字母,直接复制 cmp al, 'Z' ja check_lower3 ; 如果是大写字母,转换为小写字母 add al, 'a'-'A' inc count_lower jmp output_char3 check_lower3: cmp al, 'a' jb output_char3 ; 如果是非小写字母,直接复制 cmp al, 'z' ja output_char3 ; 如果是小写字母,转换为大写字母 sub al, 'a'-'A' inc count_upper output_char3: mov [di], al inc di jmp next_char3 end_loop3: ; 显示大小写转换后的字符串 lea dx, output mov ah, 09h int 21h ; 显示大写字母、小写字母和数字的个数 mov ah, 02h ; 用于显示字符的DOS中断 mov dl, 'U' int 21h mov ax, count_upper call print_word mov dl, 'L' int 21h mov ax, count_lower call print_word mov dl, 'D' int 21h mov ax, count_digit call print_word ; 6. 将该字符串中的数字进行累加,将累加结果显示输出 mov ax, sum call print_word mov ah, 4ch int 21h print_word proc near ; 将16位无符号整数显示在屏幕上 push ax push bx push cx push dx mov bx, 10 xor cx, cx ; cx为0,用于计数 next_digit: xor dx, dx ; dx清零 div bx push dx ; 将余数保存在栈中 inc cx test ax, ax ; 如果ax为0,跳出循环 jnz next_digit print_digit: pop dx ; 从栈中弹出一个数字 add dl, '0' ; 转换为字符 mov ah, 02h int 21h ; 显示字符 loop print_digit ; 继续弹出数字,直到全部显示 pop dx pop cx pop bx pop ax ret print_word endp end ``` 注意:上述代码是基于 DOS 平台的 16 位汇编语言,只能在 DOSBox 等模拟器中运行。如果在其他平台上运行,可能需要进行一些修改。

相关推荐

最新推荐

recommend-type

汇编 从键盘输入一个数字N(0~9),然后显示N个大写字母“A”

(1)键盘输入使用21H功能调用 MOV AH,1 INT 21H ;输入字符的ASCII码将保存在AL寄存器中 (2)将输入数字的ASCII码转换成数字本身 (3)循环输出
recommend-type

2024华为OD机试D卷 - 最多购买宝石数目 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这
recommend-type

已知n个人(以编号0,1,2,3...n-1分别表示)围坐在一张圆桌周围。从编号为0的人开始报数1,数到m的那个人出列;他的下一个人又从1开始报数,数到m+1的那个人又出列(每次报数值加1);依此规律重复下去,直到圆桌周围的人全部出列。用递归方法解决

这个问题可以使用递归方法解决。下面是一个思路: 1. 定义一个函数,接收三个参数:n、m、i,表示还剩下n个人,每次数到m时出列,当前报数的人是i; 2. 如果n=1,返回i,即最后留下的那个人的编号; 3. 否则,计算出下一个出列的人的编号j,通过递归调用函数解决n-1个人的问题,其结果为k; 4. 如果k < j,即当前i之后出列的人的编号为k,需要将k转换为在i之前出列的编号,返回值为 k+(n-1); 5. 如果k>=j,即当前i之后出列的人的编号为k,返回值为 k-(j-1); 下面是对应的Python代码: ```python def josephus(n, m, i):