汇编语言作业(九)

目录

一、实验目的

二、实验内容

三.实验步骤以及结果

1. 从键盘缓冲区中接受一个英文字符串(长度<50), 如“AB123cdE*87fGabFZ”,要求将其大写转小写,小写转大写后存入以result地址开始的缓冲区中,并输出。

2. 编写汇编程序,从键盘输入一个字符串,并将其倒序输出到屏幕中。例如:输入  abcd345; 输出 543cba

3.编写一个程序,判别键盘上输入的字符;若是1~9 数字字符,则显示之;若为A~Z字符,显示“c”,若为a-z 字符,显示“C”,若是回车字符(0DH),则结束程序,若为其他按字符则显示“R”

四.实验总结

五、后记


  • 一、实验目的

    1. 掌握字符串处理指令。
    2. 巩固之前学习的知识。
  • 二、实验内容

1. 从键盘缓冲区中接受一个英文字符串(长度<50), 如“AB123cdE*87fGabFZ”,要求将其大写转小写,小写转大写后存入以result地址开始的缓冲区中,并输出。

2. 编写汇编程序,从键盘输入一个字符串,并将其倒序输出到屏幕中。例如:输入  abcd345; 输出 543cba

3.编写一个程序,判别键盘上输入的字符;若是1~9 数字字符,则显示之;若为A~Z字符,显示“c”,若为a-z 字符,显示“C”,若是回车字符(0DH),则结束程序,若为其他按字符则显示“R”。

三.实验步骤以及结果

1. 从键盘缓冲区中接受一个英文字符串(长度<50), 如“AB123cdE*87fGabFZ”,要求将其大写转小写,小写转大写后存入以result地址开始的缓冲区中,并输出。

完整代码:

assume cs:code,ds:data,ss:stack

stack segment
db 50 dup(?) ;申请栈空间
stack ends

data segment

data ends

code segment
start:
mov  ax,data
mov ds,ax  ; 将data的地址赋给ds
call atoA    ;调用子程序
mov ax,4c00h 
int 21h

atoA proc
jmp donext 
result db 50,?,50 dup(?)

donext:
mov dx,offset result        ;这里的offset有点像C++中的指针,意思是把偏移量赋值给dx
mov ah,0ah
int 21h
mov si,offset result+1     ;这里si获得的其实是 实际输入字符个数值的偏移量
xor cx,cx
mov cl,[si]                        ;将偏移量为si的值 赋给cl  看这里的用法是不是有点像C++的指针呢

do:
inc si                              ; 偏移量递增 类似指针的移动
mov ah,[si]                    ; 将偏移量为si的值赋给ah
cmp ah,'a'           
jb not_lower
cmp ah,'z'
ja not_lower
sub ah,20h                   ;利用ascii进行大小写转换
mov [si],ah
jmp next

not_lower:
cmp ah,'A'
jb next
cmp ah,'Z'
ja next
add ah,20h
mov [si],ah

next:
loop do
 mov byte ptr [si+1],'$' ;字符串末尾加上结束符     
;最后在变换完成的字符串末尾加上结束符号 '$'
mov dl,0ah                    ;DOS 2号功能
mov ah,02h
int 21h

mov dx,offset result+2       ;调用DOS 9号功能
mov ah,09h               
int 21h
ret

atoA endp
code ends
end start

2. 编写汇编程序,从键盘输入一个字符串,并将其倒序输出到屏幕中。例如:输入  abcd345; 输出 543cba

完整代码:

DATAS SEGMENT
    ;无数据段定义
DATAS ENDS

STACKS SEGMENT
    DW 60HDUP(?);分配堆栈空间
    TOP LABEL WORD;栈顶指针
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    LEA SP,TOP
    XOR CX,CX  ;CX清零
    ;初始化

L1: MOV AH,1
    INT 21H    ;输入
    CMP AL,0DH ;判断是否为回车输入结束
    JE  L2
    PUSH AX
    INC CX
    JMP L1       
L2: POP DX
    MOV AH,2
    INT 21H
    LOOP L2    ;输出

    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

3.编写一个程序,判别键盘上输入的字符;若是1~9 数字字符,则显示之;若为A~Z字符,显示“c”,若为a-z 字符,显示“C”,若是回车字符(0DH),则结束程序,若为其他按字符则显示“R”

完整代码:

data segment
    string DB 'please input:',13,10,'$'
    crlf DB 13,10,'$'
    strxx DB 13,10,'c$'
    strdx DB 13,10,'C$'
    strqt DB 13,10,'R$'
data ends
code segment
    assume CS:code,DS:data
start:
    mov AX,data
    mov DS,AX

    lea DX,string      ;输入一个字符
    mov AH,09
    int 21h
    mov AH,01
    int 21h

    push ax         ;将al变量备份到栈中
    ;al与回车键比较
    cmp al,13
    je exit
     cmp AL,'0'     ;X<'0'即其他字符,转L0
     jb L0
     cmp AL,'9'     ;X>='0',X<='9'即数字字符,转L1
     jbe L1
     cmp AL,'A'     ;X>'9',X<'A'即其他字符,转L0
     jb L0
     cmp AL,'Z'     ;X>='A',X<='Z'即大写字母,转L2
     jbe L2
     cmp AL,'a'    ;X>'Z',X<'a'即其他字符,转L0
     jb L0
     cmp AL,'z'    ;X>='a',X<='z'即小写字符,转L3
     jbe L3
     jmp L0        ;X>'z'即其他字符,转L0
    
 L0: mov AL,0      ;0->AL;当输入为其他字符
     jmp LL
 L1: mov AL,2      ;2->AL;当输入为数字字符
     jmp LL
 L2: mov AL,4      ;4->AL;当输入为大写字母
     jmp LL
 L3: mov AL,6      ;6->AL;当输入为小写字母
 LL: lea BX,TAB
     mov AH,0
     Add BX,AX
     jmp BX        ;转到地址表中对应的指令去执行
 exit:
     mov AH,4ch
     int 21h
 TAB:    ;地址表
     jmp SHORT P0
     jmp SHORT P1
     jmp SHORT P2
     jmp SHORT P3
  
 P0: lea DX,strqt      ;其他字符
     mov AH,09
     int 21h
     jmp exit
 P1: lea DX,crlf      ;换行
     mov AH,09
     int 21h
     pop ax
     mov dl,al      ;数字字符
     mov AH,02
     int 21h
     jmp exit
 P2: lea DX,strdx      ;大写字母
     mov AH,09
     int 21h
     jmp exit
 P3: lea DX,strxx      ;小写字母
     mov AH,09
     int 21h
     jmp exit
code ends
     end start

倒数第二个是回车,倒数第一个是空格。程序圆满完成任务。

四.实验总结

1、任务圆满完成。

2、本次实验提高了我检索信息的能力。

3、但这里还是很生疏,前面的知识应该复习一下了。

五、后记

这三个代码都是我复制粘贴的,但结果得到了验证。可惜,忘了交作业。

代码出处如下: 

https://zhuanlan.zhihu.com/p/266996340 

汇编实现字符串输入并倒序输出_汇编字符串输入倒序输出-CSDN博客 

【汇编语言】从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符_汇编语言判断输入的是数字还是字母-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/745285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无线WiFi毫米波雷达传感器成品,智能照明人体感应开关,飞睿智能点亮智慧生活

在智能科技飞速发展的今天&#xff0c;我们的生活正被各种智能设备所包围&#xff0c;其中智能照明作为智能家居的重要组成部分&#xff0c;正逐渐改变着我们的生活方式。而在这背后&#xff0c;有一个默默工作的“小助手”——飞睿智能毫米波雷达传感器&#xff0c;它就像智能…

kettle创建资源库无法登录问题

问题&#xff1a;You dont seem to be getting a connection to the server. Please check the path youre using and make sure the server is up and running. 1. 删除资源库 2.删除数据库中R_开头的表 3.重新创建资源库连接&#xff0c;查看是否成功产生表 4.创建成功&…

InVEST实践及在生态系统服务供需、固碳、城市热岛、论文写作等实际项目中应用

白老师&#xff08;研究员&#xff09;&#xff1a;长期从事生态系统结构-格局-过程-功能-服务的变化与响应关系等研究工作,重点围绕生物多样性、生态系统服务与价值等&#xff0c;构建生物地球化学模型和评价指标体系&#xff0c;为城市、区域和自然保护区的可持续发展和生态环…

AI绘画的10种变现方法,逼你躺平挣钱

AI绘画到底能多挣钱&#xff01; 马上看证据&#xff0c;知乎和其它平台的收益&#xff0c;AI绘画挣的稿费&#xff0c;还有某音某瓜的稿费。 都是有AI绘画的一大功劳&#xff01; 接下来介绍AI绘画的十种挣钱方法&#xff0c;有折腾的收益&#xff0c;也有躺平的收益&#x…

SQL Server 2022从入门到精通

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

基于springboot+vue的梦幻玩具乐园的设计与实现(在线购物平台)

需要源码和论文的小伙伴可以私信博主&#xff08;有偿&#xff09; ​​​​​课题目的与意义 随着互联网的不断普及与在线销售平台的迅猛发展&#xff0c;在线购物日益受到广大消费者的青睐与追捧。通过构建基于Spring BootVue的在线玩具商城&#xff0c;可以为玩具制造商、…

财务RPA的优势——探讨财务RPA带来的效率和准确性优势

企业财务是企业信息化和数字化转型过程中的重要一环&#xff0c;随着企业的不断发展壮大&#xff0c;财务业务往来更加频繁&#xff0c;以往的财务管理运作模式高度依赖人工操作&#xff0c;已无法适应大量新的业务需求。RPA机器人流程自动化可以根据预设程序辅助人工处理大量重…

Spring的jar包下载(最新版6.0版本)

1.在Spring官网的projects下面点击spring-framework 2.进入github官网 3.进入github后往下滑&#xff0c;点击Spring Framework Artifacts 4.往下滑找到 点击 5.在左边先点击Artifacts&#xff0c;在右边找到 libs-snapshot&#xff0c;展开libs-snapshot&#xff08;之前其他…

2024第十三届中国PMO大会主持人介绍

全国PMO专业人士年度盛会 由PMO评论主办的2024第十三届中国PMO大会邀请了到十几位知名企业的PMO和项目管理专家来担任大会主持人。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 主持人介绍 肖杨&#xff0c;国际知名组织级项目管理专家&#xff0c;微薄之力…

吴恩达揭秘:编程Agent如何革新软件开发行业

作为 AI 领域的杰出人物&#xff0c;吴恩达教授对编程 Agent 的兴起表示了极大的兴趣。他认为&#xff0c;编程 Agent 有潜力通过自动执行繁琐的任务、提高代码质量和加速开发周期来彻底改变软件开发行业。 本文将深入探讨吴恩达对编程 Agent 的见解&#xff0c; 多代理系统质…

git 查看本地和远程分支

要查看 Git 仓库中的所有分支&#xff0c;可以使用以下命令&#xff1a; git branch执行该命令后&#xff0c;Git 会列出当前仓库中的所有分支&#xff0c;并在当前所在的分支前加上一个 * 标记。 如果你想查看远程仓库的分支&#xff0c;可以添加 -r 或 --remotes 选项&…

【ai】trition:tritonclient yolov4:部署ubuntu18.04

X:\05_trition_yolov4_clients\01-python server代码在115上,client本想在windows上, 【ai】trition:tritonclient.utils.shared_memory 仅支持linux 看起来要分离。 client代码远程部署在ubuntu18.04上 ubuntu18.04 创建yolov4-trition python=3.7 环境 (base) zhangbin@ub…

新鲜出炉的信息化一机两用方案

在信息化日益发展的今天&#xff0c;网络安全问题愈发凸显其重要性。尤其是在政府和企事业单位中&#xff0c;如何在保证业务流畅和工作效率的同时&#xff0c;确保信息高安全性&#xff0c;成为了一个亟待解决的问题。而“一机两用”政策&#xff0c;正是针对这一需求而提出的…

golang——Gin框架及路由介绍

一. 框架介绍 Gin是一个轻量级的Go语言Web框架&#xff0c;它具有高性能和简洁的设计。由于其快速的路由匹配和处理性能&#xff0c;Gin成为Go语言中最受欢迎的Web框架之一。 特点&#xff1a; 快速和轻量&#xff1a;Gin框架的设计注重性能和效率&#xff0c;采用了一些优化措…

02-二进制转换,原码 反码 补码

二进制是什么? 为什么用二进制? 计算机底层只能识别二进制。 计算机底层只识别二进制是因为计算机内部的电子元件只能识别两种状态&#xff0c;即开和关&#xff0c;或者高电平和低电平。 二进制正好可以用两种状态来表示数字和字符&#xff0c;因此成为了计算机最基本的表示…

收银系统源码-千呼新零售2.0【宠物、养生、大健康行业解决方案】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物、中医养生、大健康等连锁店…

28. 深度学习中的损失函数:起源、分类及统一理解

在深度学习和机器学习领域&#xff0c;损失函数&#xff08;Loss Function&#xff09;是优化问题的核心&#xff0c;决定了模型参数的调整方向和幅度。尽管损失函数种类繁多&#xff0c;但理解其起源和背后的理论有助于我们更好地选择和应用它们。 损失函数的起源 所有的优化…

【Linux】Wmware Esxi磁盘扩容

目录 一、概述 1.1 磁盘分区概念 1.2 LVM概念 二、扩容步骤 二、报错 一、概述 1.1 磁盘分区概念 在 Linux 中&#xff0c;每一个硬件设备都映射到一个系统的文件&#xff0c;对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文…

深度解析:ChatGPT是如何理解和生成自然语言文章的?

引言 随着人工智能的发展&#xff0c;ChatGPT作为一种先进的自然语言处理工具&#xff0c;正逐渐改变人们与技术交互的方式。那么&#xff0c;ChatGPT是如何理解和生成自然语言文章的&#xff1f;本文将从其技术原理、训练过程、实际应用等多个角度&#xff0c;深入解析这一过…

mysql GROUP_CONCAT分组连接

文章目录 GROUP_CONCAT 分组连接GROUP_CANCAT 的使用分班级列出名单分班级列出名单并包含显示性别组合IFNULL组合IF组合case when GROUP_CONCAT 分组连接 准备的数据示例 CREATE TABLE students (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,classNa…