【8086汇编】字符串逆序的实现,附代码

2023-11-10

引言

    之前有本科的同学需要做一个汇编程序,简单补了补发现自己会嘻嘻嘻。

题目

    题目:从键盘输入任一字符串(字符数>1),在下一行以相反的次序显示出来。
    如:输入字符串123abc
    在下一行显示cba321

程序思想

    字符串逆序采用的实现方法是堆栈。因为堆栈有着后进先出的原则,可以保证题目要求。只要可以正确调用堆栈就能实现字符串逆序。
实现技巧
流程图

    如图所示是系统整体的流程,在程序实现上用到了DOS层中断。DOS层的功能模块在DOS操作系统盘中,系统启动时被装入内存。DOS层的功能在实际中使用较少,只是x86接口实验设备还需要用到其子程序。从编程角度看,可以把DOS层看作一个函数库,只要前期按要求设置就能调用这些系统函数。

    其调用的方法是:
    第一,设置入口参数。
    第二,选功能号置入AX寄存器的AH中。
    第三,使用INT 21H启动函数。

    我们从实际的应用例子上看看具体函数的调用方法。

(1)从键盘读入字符

	MOV AH,01H
	INT 21H

    首先,01H所对应的函数功能就是带回显的键盘输入,使用MOV指令将其置入AH中,再调用INT中断就可以使程序执行此项功能,所以键盘输入一共就两行语句。

(2)显示单个字符
    显然,类似输入可以使用02H功能号进行调用,但是输出是需要内容的,也就是这个函数需要一个“内容”用于输出。换句话说是我们要显示的字符,需要在函数调用时将其打入DL寄存器中。

	MOV AH,02H
	MOV DL,BL
	INT 21H

(3)其他问题
    ①可以从题目看到我们需要换行输出,这时只要使用显示单个字符的函数去显示一个控制字符即可,换行的控制字符是0DH和0AH,两个必须一起调用。
    ②需要一个判断用户输入终止的操作,本程序设定的是输入$为结束,也就是默认字符串中不会出现这个字符。
    ③需要知道循环多少次出栈操作可以输出完所有字符,所以需要一个寄存器保存入栈的次数。

程序例程

; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h

.MODEL SMALL

.CODE
.STARTUP
	  MOV  CX,0H
INPUT:MOV AH,01H
	  INT 21H
	  MOV BL,AL
	  MOV BH,0H
	  PUSH BX
	  INC CX
	  CMP AL,'$'
	  JNZ iNPUT
	 
	POP BX
	DEC CX
	
	MOV AH,02H
	MOV DL,0DH
	INT 21H
	MOV AH,02H
	MOV DL,0AH
	INT 21H
	
	
AGAIN: 	
	
	;出栈
	POP BX
	MOV AH,02H
	MOV DL,BL
	INT 21H
	LOOP AGAIN
	
	.EXIT

ret


程序结果

结果

    可以看到输入为“shidH”时,输出为“Hdihs”

改进思路

    程序功能虽然实现了,但是仍然有可以改进的地方。比如,我们输入完整个字符串后,终止符也被显示出来。
    改进思路如下:
    ①改输入为不带回显的输入,收到终止符判断后,先输出一遍之前的字符。
    ②改终止符为没有显示的控制字符比如回车。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【8086汇编】字符串逆序的实现,附代码 的相关文章

  • 数学(五) -- LC[415]&[455] 字符串相加与两数相加

    1 字符串相加 1 1 题目描述 给定两个字符串形式的非负整数 num1 和num2 计算它们的和并同样以字符串形式返回 你不能使用任何內建的用于处理大整数的库 比如 BigInteger 也不能直接将输入的字符串转换为整数形式 示例 1
  • 去国企1年后,我后悔了!重回大厂内卷

    文章来源 cnblogs com peiyu1988 html 01 前言 2019年初 我通过一整天的笔试及面试加入一家 某一线城市国资委全资控股 某集团的研究机构 中央研究院 任职高级软件工程师 中级职称 在这边工作了整整一年 目前已经
  • 【软件测试】用例篇

    一 什么是测试用例 测试用例 向被测试系统发起的一组集合 这组集合包含测试数据 测试步骤 测试平台 预期结果 二 为什么在测试前要设计测试用例 三 基于需求设计测试用例 3 1测试是我们测试人员进行测试的依据 3 2测试人员首先要分析需求
  • python字典中如何添加键值对

    添加键值对 首先定义一个空字典 gt gt gt dic 直接对字典中不存在的key进行赋值来添加 gt gt gt dic name zhangsan gt gt gt dic name zhangsan 如果key或value都是变量也
  • 看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

    2020年已经过去 无论我们过得顺遂平安 还是过得无比艰难 我们应该都会记住这一年 回顾2020年 在这个不同寻常的疫情之年 科技成为人类抗击疫情的关键 而人工智能技术投入抗疫战争之中 可以说是人类有史以来的第一次 而与此同时 AI技术已经
  • LeetCode 面试16.18 模式匹配

    你有两个字符串 即pattern和value pattern字符串由字母 a 和 b 组成 用于描述字符串中的模式 例如 字符串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 该字符串也匹配像 a a
  • SitePoint播客#61:HTML5 =厨房水槽

    Episode 61 of The SitePoint Podcast is now available This week your hosts are Patrick O Keefe iFroggy Stephan Segraves s
  • 快速学习Python基础知识(3)

    一 输入输出 1 1 input输入函数的使用 input函数 是获取键盘输出 保存成一个字符串 注意 input 函数的返回值是一个字符串类型 即便你输入的是数字 返回的也会以一个字符串的形式返回给我们 inputStr input 提示
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • 滑动窗口专题(字节面试题)

    关键字 连续数组 字串 1 和为s的连续正整数序列 剑指offer57 II 输入一个正整数 target 输出所有和为 target 的连续正整数序列 至少含有两个数 序列内的数字由小到大排列 不同序列按照首个数字从小到大排列 示例 1
  • 已经设置了端口映射但是外网还是访问不了服务器

    来自于 http www tp link com cn pages article detail asp result faq d 31 已经设置了端口映射但是外网还是访问不了服务器 1 首先检查您设置的端口影射是否正确映射到您内网的服务器
  • GitHub Action入门简介

    1 What is GitHub Actions GItHub Actions是一个持续集成和持续交付的平台 能够让你自动化你的编译 测试和部署流程 GitHub 提供 Linux Windows 和 macOS 虚拟机来运行您的工作流程
  • B2B公司如何寻找意向客户的联系方式?

    在B2B公司的营销过程中 少不了寻找意向客户的阶段 这也是销售过程中非常重要的一步 很多新人都是拿到客户联系方式 就直接打电话拜访 俗话说不打没有准备的仗 因此在拜访客户之前就应该做好功课 充分了解客户 这也是B2B业务场景下必做的一环 通
  • MacBook电脑内存容量小根本不够用?如何一键解决?

    得益于M1系列芯片的强势表现 很多朋友都换用了MacBook 首次接触到了macOS系统 但出乎意料的是 很多人就开始受罪了 明明这么出色的硬件 为何到处都不顺手呢 尤其是容量 MacBook相比同价位的Windows笔记本 硬盘本来就偏小
  • 最具挑战的骑行路线

    1 318川藏线 2 独库公路 561公里 3 珠峰尼泊尔 1000公里 4 沙漠公路 1800公里 5 219新藏线 2500公里 下面是一些别人的骑行记录 证书或奖牌 参考 1 抖音 Max骑行玩家 https v douyin com
  • FAM amine, 6-isomer,1313393-44-0,含有纯6-异构体的荧光团,6-FAM NH2

    产品名称 FAM amine 6 isomer 6 FAM NH2 中文名称 6 羧基荧光素 氨基 CAS 1313393 44 0 分子式 C27H26N2O6 分子量 474 51 纯度 95 结构式 产品描述 荧光素衍生物具有胺基 含
  • 看完这篇 教你玩转镜像转换神器qumu实现虚拟机做题自由!

    前言 最近有小伙伴说比赛没设备 问有没有不需要设备也能实现做题自由的方法 今天这里分享一期 看完这篇你将学会 使用 qumu 转换镜像格式 一般我们做题都是 img 格式的环境 需要导入设备 有些小伙伴没有设备 就可以使用这种方法 把 im
  • C 语言文件读取全指南:打开、读取、逐行输出

    C 语言中的文件读取 要从文件读取 可以使用 r 模式 FILE fptr 以读取模式打开文件 fptr fopen filename txt r 这将使 filename txt 打开以进行读取 在 C 中读取文件需要一点工作 坚持住 我
  • C# 介绍、应用领域、入门、语法、输出和注释详解

    什么是 C C 发音为 C Sharp 是一种由 Microsoft 创建的面向对象的编程语言 运行在 NET Framework 上 源于 C 家族 与流行的语言如 C 和 Java 相近 首个版本发布于 2002 年 而最新版本 C 1
  • 液晶偏振光栅

    1 偏振 光是横波 在垂直于光的传播方向的平面内光波振动 即E矢量振动 各方向振幅都相等的光为自然光 只在某一方向有光振动的光称为线偏振光 各方向光振动都有 但振幅不同的光叫部分偏振光 螺旋着振动的光称圆偏振光 分旋和右旋 2 庞加莱球表示

随机推荐

  • 【工作中常用工具类,提升开发效率】

    JDK常用工具类 JDK中常用工具类 集合工具类 Collections 数组工具类 Arrays 对象工具类 Objects 文件工具类 Files 路径工具类 Paths TimeUnit 线程sleet System JDK中常用工具
  • C++基础知识 - C++的类型转换

    类型转换使用建议 static cast静态类型转换 编译的时c 编译器会做编译时的类型检查 隐式转换 基本类型转换 父子类之间合理转换 若不同类型之间 进行强制类型转换 用reinterpret cast lt gt 进行重新解释 建 议
  • 京东联盟导购平台开发指南(附带API接口)

    一 写在前面 做过淘客开发的一定接触过淘宝API开发 而做京东联盟软件自然离不开京东联盟API 京东联盟API目前上线的有很多 如下图 https jos jd com api list htm id 117 但是京东联盟API获取比较难
  • 遭遇HTML被恶意注入JS弹广告,通过SSL证书学习及安装

    起因 近期有客户反映界面错乱 本能的以为是缓存原因导致的 告知方法 操作无效 远程查看发现代码里面突然多了一句 http 45 32 21 251 1 js 好了 有线索就开始跟 if typeof PinkFlag undefined v
  • vue使用jsencrypt实现rsa前端加密

    实现 RSA 加密 介绍 vue 完成 rsa 加密传输 jsencrypt 实现参数的前端加密 1 安装 jsencrypt npm install jsencrypt 2 编写 jsencrypt js 在 utils 文件夹中新建 j
  • 数据可视化——Davinci

    数据可视化 Davinci对比及功能使用 文档地址 一 数据可视化 个人引用部分 1 有趣的意义 2 常规的意义 二 图形的内涵 1 图形类型 2 优秀可视化的特点 三 可视化需求分析 1 四个问题 2 三个沟通点 四 Davinci功能详
  • 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素

    1 不小于某数的第一个元素 def bisearch l e lo hi while lo lt hi mi lo hi 2 if e gt l mi lo mi 1 else hi mi return hi 注 1 不同于寻找等于某值的情
  • 【C】PTA期末分数排序(归并排序)

    考试结束了 全班同学的分数都出来了 老师需要对分数做一次排序 看看从高到低 分数的排列是怎样的 输入格式 第一行是一个n 表示班级同学的人数 1 lt n lt 500000 第二行开始有n个分数 0 lt 分数 lt 100 分数都是整数
  • [从零开始学习FPGA编程-23]:进阶篇 - 基本组合电路-门电路级组合逻辑运算(Verilog语言)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 125246093 目录 前言 第1章
  • 排序函数 dense_rank()

    dense rank 对结果集进行排序 排名值没有间断 特定行的排名等于该特定行之前不同排名值的数量加一 语法 DENSE RANK OVER
  • error when starting dev server: Error: Cannot find module ‘node:url‘

    需要升级node版本 直接在官网 下载 Node js 上下载最新的msi 安装到原来node的安装目录下即可
  • 降雨预测方法

    降雨预测方法 DBNPF Deep Belief Network for Precipitation Forecast 来源 张雷师兄论文 A deep learning based precipitation forecasting 模型
  • centos 7 安装总结

    CentOS Community ENterprise Operating System 社区企业操作系统 Linux发行版之一 来源于Red Hat Enterprise Linux依照开放代码规定释出的源代码所编译而成 安装注意 安装c
  • 如何用python爬取大量博客

    如果要使用 Python 爬取大量博客 可以使用爬虫框架 例如 Scrapy 首先 需要对目标网站进行分析 确定数据的 URL 格式和数据的 HTML 标签 然后 可以使用 Scrapy 来编写爬虫代码 自动访问目标网站并提取需要的数据 具
  • 在 CLion 中进行整体替换代码

    突然在打题的时候发现int型无法满足题目要求 想要批量换成long long 使用快捷键 Ctrl Shift R Windows Linux 或 Command Shift R Mac 来打开 Find and Replace 对话框 在
  • 第一章 python初窥 课后练习题

    目录 1 输入1 127的ascii码并输出对应字符 2 输入a b c d4个整数 计算a b c d的结果 3 计算一周有多少分钟 多少秒钟 4 3个人在餐厅吃饭 想分摊饭费 总共花费35 27美元 他们还想给15 的小费 每个人该怎么
  • SpringBoot: Mybatis配置事务管理

  • awk 正则表达式、正则运算符详细介绍

    http www cnblogs com chengmo archive 2010 10 11 1847772 html 前言 使用awk作为文本处理工具 正则表达式是少不了的 要掌握这个工具的正则表达式使用 其实 我们不必单独去学习它的正
  • STM32CubeMX—串口空闲中断+DMA接收

    一 实验说明 实验平台 STM32F103C8T6 实验内容 使用串口一空闲中断结合DMA 完成不定长数据接收 STM32的串口接收数据的方式 1 轮询接收 所谓轮询 就是在主函数中判断接收完成的标志位 举个不太恰当例子 就比如 此时你正在
  • 【8086汇编】字符串逆序的实现,附代码

    目录 引言 题目 程序思想 程序例程 程序结果 改进思路 引言 之前有本科的同学需要做一个汇编程序 简单补了补发现自己会嘻嘻嘻 题目 题目 从键盘输入任一字符串 字符数 gt 1 在下一行以相反的次序显示出来 如 输入字符串123abc 在