串操作指令及其应用程序的设计与调试运行——汇编实验四 用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,一经查实,立即删除!

相关文章

python 语音播放_基于Python编写的语音播放软件

单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播),但是市面上多数语音播放软件都是收费的,要么发音失真,要么不够稳定——经常出现莫名其妙的故障,容易给工作带来被动。学Python这么久不如动手写一款自己的…

[蓝桥杯][历届试题]回文数字-暴力枚举

题目描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之…

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分享...

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

[蓝桥杯][2013年第四届真题]危险系数-dfs+图的遍历

题目描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用。 地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。 我们来定义一个危险系数DF(x,y)&#xff…

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…

python递归实现_Python-递归实现

#递归实现def calc(n):print(n)if n/2 >1:res calc(n/2)print(res:,res)print(N:,n)return ncalc(100)#斐波那契数列def func(arg1,arg2,stop)if arg1 0:print(arg1,arg2)arg3 arg1 arg2print(arg3)if arg3 < stop:func(arg2,arg3,stop)func(0,1,30)#算法基础之二分查…

[蓝桥杯][2013年第四届真题]核桃的数量-枚举(水题)

题目描述 小张是软件项目经理&#xff0c;他带领3个开发组。工期紧&#xff0c;今天都在加班呢。为鼓舞士气&#xff0c;小张打算给每个组发一袋核桃&#xff08;据传言能补脑&#xff09;。他的要求是&#xff1a; 各组的核桃数量必须相同各组内必须能平分核桃&#xff08;当…

python2字符串编码方式_一、基础部分-2.字符串编码

一、字符编码历史1. ASCII美国人搞了个ASCII码表&#xff0c;把123abcABC%$#(数字、字母、特殊符号) &#xff0c;全部用10进制的数字表示。例如数字65&#xff0c;代表着“A” &#xff0c;ASCII码表一共255个数字&#xff0c;基本代表米国常用英文和符号(其实127以后都不是太…

Python基本语法复习——嗯...貌似很久没写过博客了

文章目录引入包math库random库string列表元组装包、拆包字典类与继承json异常处理引入包 import random import math import jsonmath库 print(math.ceil(4.1)) print(math.floor(4.9)) print(math.fabs(-10)) print(math.sqrt(9)) print(math.exp(1))分别是&#xff1a;向上…

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

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

[蓝桥杯][历届试题]连号区间数

题目描述 小明这些天一直在思考这样一个奇怪而有趣的问题&#xff1a; 在1~N的某个全排列中有多少个连号区间呢&#xff1f;这里所说的连号区间的定义是&#xff1a; 如果区间[L, R] 里的所有元素&#xff08;即此排列的第L个到第R个元素&#xff09;递增排序后能得到一个长度为…

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

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

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

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

[蓝桥杯][基础练习VIP]FJ的字符串-递归

题目描述 FJ在沙盘上写了这样一些字符串&#xff1a; A1 “A” A2 “ABA” A3 “ABACABA” A4 “ABACABADABACABA” … … 你能找出其中的规律并写所有的数列AN吗&#xff1f; 输入 仅有一个数&#xff1a;N ≤ 26。 输出 请输出相应的字符串AN&#xff0c;以一个换行…

python编程加油_编程学习资料,中途加油站,c++/java/python/小程序/人工智能......等等等等...

资料仅供学习分享用&#xff0c;废话不多说&#xff0c;解压密码为&#xff1a;1024文件是切割压缩的&#xff0c;多个part的压缩包&#xff0c;大家需要先下载到本地在解压&#xff0c;直接百度云解压会提示压缩包损坏。------------------------------学习资料java&#xff1…

[蓝桥杯][算法提高VIP]开灯游戏-dfs

题目描述 有9盏灯与9个开关&#xff0c;编号都是1~9。 每个开关能控制若干盏灯&#xff0c;按下一次会改变其控制的灯的状态(亮的变成不亮&#xff0c;不亮变成亮的)。 具体如下&#xff1a; 第一个开关控制第二&#xff0c;第四盏灯&#xff1b; 第二个开关控制第一&#…

python爬虫百度贴吧代码大全_零基础写python爬虫之抓取百度贴吧代码分享

这里就不给大家废话了&#xff0c;直接上代码&#xff0c;代码的解释都在注释里面&#xff0c;看不懂的也别来问我&#xff0c;好好学学基础知识去&#xff01;# -*- coding: utf-8 -*-#---------------------------------------# 程序&#xff1a;百度贴吧爬虫# 版本&…