串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出

文章目录

  • 实验目的和内容
  • 实验要求和步骤
  • 实现右对齐
  • 以下为源码:
  • 方法一
  • 方法二
  • 方法三
  • 测试一——字符串的输入输出
  • 测试二——改进
  • 测试三——改进
  • 测试四——改进

在这里插入图片描述

实验目的和内容

在这里插入图片描述

实验要求和步骤

在这里插入图片描述

实现右对齐

在这里插入图片描述

在这里插入图片描述

以下为源码:

在这里插入图片描述

方法一

DATA SEGMENTNUM EQU 25BUF1   DB NUM,?,NUM DUP(?),0AH,0DH,'$'		;缓冲区1,存入字符串1;分别存入:可输入的最大字符数+1、实际输入字符个数、开始存放输入字符的ASCII码;输入回车键,输入结束,将回车的ASCII码0DH作为最后一个字符存入缓冲区,不计入实际存入字符个数BUF2   DB NUM,?,NUM DUP(?),0AH,0DH,'$'MES2  DB 0AH,0DH,'Please enter 2 strings: ', 0AH,0DH,'$'MES3  DB 0AH,0DH,'The result is:',0AH,0DH,'$'
DATA ENDS CODE SEGMENTASSUME DS:DATA,CS:CODE	;将段寄存器和各个段相关联START: 	MOV AX,DATAMOV DS,AX	;初始化DSMOV ES,AX	;初始化ESSTD		;设置DF=1,按照减地址方向,字串处理由后往前!LEA DX ,MES2	;将MES2地址送到DX寄存器MOV AH,09H	;将9号送入AHINT 21H		;调用DOS 9号功能显示MES2字符串内容LEA DX,BUF1	;把BUF1偏移地址送入DXMOV AH,0AHINT 21H		;调用DOS 10号功能,从键盘读取字符存入缓冲区BUF1中MOV AH,2	;DOS 2号功能,显示一个字符MOV DL,0AH	;回车INT 21H		;MOV DL,0DH	;换行INT 21H		;第二个字符串在回车、换行后再读取LEA DX,BUF2	;MOV AH,0AH	;INT 21H		;读入第二个字符串MOV CL,BUF1+1	;将实际存放字符个数放入CL寄存器中MOV CH,0	;补全CX高位寄存器,方便后面字运算LEA SI,BUF1	;SI定位到第一条字符串首地址INC SI		;SI定位到实际存入字符串前面的地址,也就是实际存入字符数量的所在地址ADD SI,CX	;SI定位到存入字符的最后一位LEA DI,BUF1+1	;DI定位到实际存放字符数量的地址ADD DI,NUM	;DI定位到可存放字符的缓冲区的最后一个地址,即右对齐REP MOVSB	;MOV AL,20H	;MOV AH,0MOV CX,NUM+2	;MOV DL,BUF1+1	;MOV DH,0	;SUB CX,DX	;REP STOSB	;MOV CL,BUF2+1	;将实际存放字符个数放入CL寄存器中MOV CH,0	;补全CX高位寄存器,方便后面字运算LEA SI,BUF2	;SI定位到第一条字符串首地址INC SI		;SI定位到实际存入字符串前面的地址,也就是实际存入字符数量的所在地址ADD SI,CX	;SI定位到存入字符的最后一位LEA DI,BUF2+1	;DI定位到实际存放字符数量的地址ADD DI,NUM	;DI定位到可存放字符的缓冲区的最后一个地址,即右对齐REP MOVSBMOV AL,20HMOV CX,NUM+2MOV DL,BUF2+1MOV DH,0SUB CX,DXREP STOSBLEA DX,MES3MOV AH,09HINT 21H		;LEA DX,BUF1+2INT 21H		;LEA DX,BUF2+2INT 21H		;MOV AH,4CHINT 21HCODE ENDSEND START

方法二

DATA SEGMENTNUM EQU 25BUF1   DB NUM,?,NUM DUP(?),0AH,0DH,'$'		;缓冲区1,存入字符串1;分别存入:可输入的最大字符数+1、实际输入字符个数、开始存放输入字符的ASCII码;输入回车键,输入结束,将回车的ASCII码0DH作为最后一个字符存入缓冲区,不计入实际存入字符个数BUF2   DB NUM,?,NUM DUP(?),0AH,0DH,'$'				MES2  DB 0AH,0DH,'Please enter 2 strings: ', 0AH,0DH,'$'MES3  DB 0AH,0DH,'The result is:',0AH,0DH,'$'
DATA ENDS CODE SEGMENTASSUME DS:DATA,CS:CODE	;将段寄存器和各个段相关联START: 	MOV AX,DATAMOV DS,AX		;初始化DSMOV ES,AX		;初始化ESSTD				;设置DF=1,按照减地址方向,字串处理由后往前!避免数据覆盖丢失LEA DX,MES2		;将MES2地址送到DX寄存器MOV AH,09H		;将9号送入AHINT 21H			;调用DOS 9号功能显示MES2字符串内容LEA DX,BUF1		;把BUF1偏移地址送入DXMOV AH,0AHINT 21H			;调用DOS 10号功能,从键盘读取字符存入缓冲区BUF1中MOV AH,2		;DOS 2号功能,显示一个字符MOV DL,0AH		;回车INT 21H		MOV DL,0DH		;换行INT 21H			;第二个字符串在回车、换行后再读取LEA DX,BUF2		;MOV AH,0AH		;INT 21H			;读入第二个字符串MOV CL,BUF1+1	;将实际存放字符个数放入CL寄存器中MOV CH,0		;补全CX高位寄存器,方便后面字运算LEA SI,BUF1+1	;SI定位到实际存入字符串前面的地址,也就是实际存入字符数量的所在地址ADD SI,CX		;SI定位到存入字符的最后一位LEA DI,BUF1+1	;DI定位到实际存放字符数量的地址ADD DI,NUM		;DI定位到可存放字符的缓冲区的最后一个地址,即右对齐REP MOVSB		;将每一个字符串中的字符后移至右对齐MOV AL,20H		;便于STOSB指令将AL内容存到DI指向的存储单元中MOV CX,NUM+2	;MOV DL,BUF1+1	;MOV DH,0		;SUB CX,DX		;计算需要存入空格数量,由于字符串最前面存入了两个额外单元,故要先+2REP STOSB		;;;;;;;;;;;;MOV CL,BUF2+1	;将实际存放字符个数放入CL寄存器中MOV CH,0		;补全CX高位寄存器,方便后面字运算LEA SI,BUF2+1		;SI定位到实际存入字符串前面的地址,也就是实际存入字符数量的所在地址ADD SI,CX		;SI定位到存入字符的最后一位LEA DI,BUF2+1	;DI定位到实际存放字符数量的地址ADD DI,NUM		;DI定位到可存放字符的缓冲区的最后一个地址,即右对齐REP MOVSBMOV AL,20H		;存入空格的ASCII码MOV CX,NUM+2MOV DL,BUF2+1MOV DH,0SUB CX,DXREP STOSB		;同上LEA DX,MES3MOV AH,09HINT 21H			;LEA DX,BUF1+2INT 21H			;LEA DX,BUF2+2INT 21H			;MOV AH,4CHINT 21HCODE ENDSEND START

方法三

DSEG	SEGMENTSHOW	DB	'Please enter two strings:',0AH,0DH,'$'	;提示键盘输入BUF	DB	25					; 缓冲区长度(含回车)ACTHAR	DB	0 					; 保留单元, 存放输入的实际字符个数(不含回车)CHAR	DB	25 DUP (0) 				; 定义25个字节输入缓冲区
DSEG	ENDS
ESEG	SEGMENTDISP	DB	25 DUP (0),0AH,0DH,'$'		; 定义显示缓冲区
ESEG	ENDSSSEG	SEGMENT	STACKDB	20H DUP(0)
SSEG	ENDSCSEG	SEGMENTASSUME  CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG
START:MOV  AX,  DSEG		;数据段的段地址送入DSMOV  DS,  AXMOV  AX,  ESEG		;附加段的段地址送入ESMOV  ES,  AXMOV  DX,  OFFSET  SHOW	;显示“Please enter two strings:”MOV  AH,  9INT  21HMOV  BL,2		;输入字符串数量
NEXT:MOV  DX,  OFFSET  BUF	;等待键盘输入字符串MOV  AH,  0AHINT  21HMOV  CL,  ACTHAR	;将字符串输出到显示缓冲区,并右对齐。XOR  CH,  CHMOV  SI,  OFFSET  CHARADD  SI,  CXDEC  SIMOV  DI,  OFFSET  DISP+24STDREP  MOVSBMOV  CL,  BUF		;显示缓冲区左边空位填写为空格(20H)SUB  CL,  ACTHAR	;空位总位数XOR  CH,  CHMOV  AL,  20HREP  STOSBPUSH DS			;保存DS值PUSH ES			;将ES赋值给DSPOP  DS;MOV  DX,  OFFSET  DISP	;显示输入的字符串MOV  AH,  9INT  21HPOP  DS			;恢复DS值DEC  BLJNZ  NEXTMOV  AH,  4CHINT  21HCSEG	ENDSEND    START

测试一——字符串的输入输出

DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$'STRING DB 25,?,25 DUP(?),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$'
DATAS ENDS;这一部分是不需要的
STACKS SEGMENT STACKDB 200 DUP(?)
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;LEA SI,STRING+2MOV CL,STRING+1MOV AH,2
NEXT:MOV DL,[SI]INT 21HINC SIDEC CXJNZ NEXTMOV AH,4CHINT 21H
CODES ENDSEND START

测试二——改进

DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$'STRING DB 25,?,25 DUP(?),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$'
DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;MOV BL,STRING+1;MOV BH,0LEA SI,STRING+2MOV BYTE PTR[SI+BX],'$'MOV DX,SIMOV AH,9INT 21HMOV AH,4CHINT 21H
CODES ENDSEND START

测试三——改进

DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$';认准美元符号24H,才允许9号功能输出字符串STRING DB 25,?,25 DUP(24H),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$'
DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;LEA DX,STRING+2MOV AH,9INT 21HMOV AH,4CHINT 21H
CODES ENDSEND START

测试四——改进

DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$';认准美元符号24H,才允许9号功能输出字符串STRING DB 25,?,25 DUP(?),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$'
DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;;在输入字符串末尾插入符号(24H)MOV AL,STRING+1MOV AH,0ADD AX,2MOV SI,AXMOV STRING[SI],24HLEA DX,STRING+2MOV AH,9INT 21HMOV AH,4CHINT 21H
CODES ENDSEND START

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium.common.exceptions.WebDriverException: Message: ‘chromedriver‘ executable needs to bein PATH

使用Selenium模拟浏览器访问淘宝首页,出现报警 from selenium import webdriver import timebrowser webdriver.Chrome() browser.get(https://www.taobao.com) time.sleep(2) print(browser.page_source)selenium.common.exceptions.WebDriverException: Message…

【朝夕技术专刊】Core3.1WebApi_Filter详解

欢迎大家阅读《朝夕Net社区技术专刊》第4期我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!01PARTCoreWebApi五大Filter1. Autho…

统计学习方法 pdf_机器学习基础教材-《统计学习与数据分析介绍》免费pdf分享...

本书介绍本入门级统计教科书主要讲解发展和培养统计思维所需的基本概念和工具。它提供了描述性,归纳性和探索性的统计方法,并指导读者完成定量数据分析的过程。在实验科学和跨学科研究中,数据分析已成为任何科学研究的组成部分。诸如判断数据…

selenium.common.exceptions.SessionNotCreatedException: Message: session not created全套解决方案

chromedriver版本不匹配 报错: selenium.common.exceptions.SessionNotCreatedException: Message: session not created selenium.common.exceptions.WebDriverException: Message: session not created: 原因: Chrome版本和ChromeDriver版本不一致…

.NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(上)...

18 | 日志框架:聊聊记日志的最佳姿势源码链接:https://github.com/witskeeper/geektime/tree/master/samples/LoggingSimpleDemo日志框架必要的包:1、Microsoft.Extensions.Logging2、Microsoft.Extensions.Logging.Console3、Microsoft.Exte…

Istio 1.5 发布——拥抱变化,爱上单体

北京时间 2020 年 3 月 6 日凌晨,我们期待已久的 Istio 1.5 发布了,发布公告见 https://istio.io/news/releases/1.5.x/announcing-1.5/。由 ServiceMesher 社区组织翻译的 Istio 官方文档同时发布,见 https://istio.io/zh。Istio 1.5 是一个…

hbuilderx怎么添加断点_【高考语文题库】高考一直提分提不上去该怎么办?同一卷高考押题语文答案,助你再提30分...

大树从来不是在温室里长成的,而是在风霜雪雨的洗礼中参天的……古语云:“工欲善其事,必先利其器。”俗话说:“磨刀不误砍材工。”用到学习上就是学习必须讲究学习方法,有了适合自己的有效学习方法必定会事半功倍。一个…

业务模块化打造单体和分布式部署同步支持方案

我在2019年中国.NET开发者峰会上为大家分享了我们的微服务电商安全工程实践,那次会议分享的高清录播已经上传到我的腾讯课堂,大家可以通过底部的小程序打开直接观看(复习)。在大会上跟大家提到,我们当时只有4个人的创业…

Asp.Net Core EndPoint 终结点路由工作原理解读

Asp.Net Core EndPoint 终点路由工作原理解读一、背景在本打算写一篇关于Identityserver4 的文章时候,却发现自己对EndPoint -终结点路由还不是很了解,故暂时先放弃了IdentityServer4 的研究和编写;所以才产生了今天这篇关于EndPoint (终结点…

[蓝桥杯][算法提高VIP]夺宝奇兵-dp

题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ”夺宝奇兵”从山下出发,到达山顶,如何选路才能得到最多的珠宝呢?在上图所示例子中,按照5-> 7-> 8-&g…

迁移到其他机器_有赞大数据离线集群迁移实战

‍‍点击关注“有赞coder”获取更多技术干货哦~作者:郭理想 & 任海潮部门:数据中台一、背景有赞是一家商家服务公司,向商家提供强大的基于社交网络的,全渠道经营的 SaaS 系统和一体化新零售解决方案。随着近年来社…

C# 客户端内存优化分析

背景概述C# 开发客户端系统的时候,.net 框架本身就比较消耗内存资源,特别是xp 这种老爷机内存配置不是很高的电脑上运行,所以就需要进行内存上的优化,才能流畅的在哪些低端电脑上运行. 想要对C# 开发的客户端内存优化需要了解以下几个概念。虚拟内存这里…

xshell1分钟就会自动断_手术室自动门不能正常控制开关门维修案例

手术室自动门维修案例遵义市第五人民医院手术室的手术门。用户反映:不能正常控制开关门。一、原因分析:1.红外线安全传感器故障2.控制器故障3.直流电机故障4. 红外感应开关故障5.红外感应探头故障6.电源故障图1图2图3图4图5图6二、维修过程:1…

.NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)...

18 | 日志框架&#xff1a;聊聊记日志的最佳姿势除了使用 CreateLogger 指定 logger 的名称&#xff0c;实际上还可以借助容器来构造 logger&#xff0c;通常情况下我们会定义自己的类namespace LoggingSimpleDemo {public class OrderService{ILogger<OrderService> _lo…

《ASP.NET Core 微服务实战》送书结果公告

如何构建基于.NET Core和云环境下的微服务技术体系&#xff1f;的送书抽奖结果已经出来了&#xff1a;当前只有一位同学填写了地址。其他几位同学抓紧填写&#xff0c;3/9 日还没有完成填写将作废&#xff0c;奖品可是热门的《ASP.NET Core 微服务实战》。另外我公司商城上上线…

2020 年 Service Mesh 技术展望

背景有外文指出&#xff0c;2020 年 Service Mesh 技术将有以下三大发展&#xff1a;快速增长的服务网格需求&#xff1b;Istio 很难被打败&#xff0c;很可能成为服务网格技术的事实标准&#xff1b;出现更多的服务网格用例&#xff0c;WebAssembly 将带来新的可能。针对 Serv…

登录系统_执照管理系统登录与执照转换操作指南

执照管理系统登录与执照转换操作指南注&#xff1a;本操作指南适用于所有已经在CCAR-R2执照管理系统中注册的人员(无论是否参加过考试&#xff0c;无论有无考试通过科目).已经在旧系统中完成注册的人员无需在新系统中再次注册。只有完成本指南中的有关操作&#xff0c;才能正常…

BeetleX之XRPC远程委托调用

BeetleX.XRPC是基于接口的远程通讯组件,它不仅可以把接口提供客户端调用,同样也支持服务端创建客户端的接口实例并主动调用客户端的方法.接口有着非常的规范性和约束性,但前提你是必须制定相应的接口并实现才行;为了让通讯在.NET平台使用变得更简便,在新版中组件支持远程委托调…

常用决策树模型ID3、C4.5、CART算法

决策树概述 决策树&#xff08;decision tree&#xff09;&#xff1a;是一种基本的分类与回归方法&#xff0c;下面提到的ID3、C4.5、CART主要讨论分类的决策树。 在分类问题中&#xff0c;表示基于特征对实例进行分类的过程&#xff0c;可以认为是if-then的集合&#xff0c…

五分钟了解Consul

Hi&#xff0c;大家好&#xff0c;我叫consul&#xff0c;翻译成中文叫做“领事”&#xff0c;其实我更喜欢叫自己为中介&#xff0c;因为我觉得自己做的事情和房产中介非常像。比如说想要卖房的房东到我这边登记&#xff0c;我将房屋信息登录到我的表格中&#xff08;服务注册…