汇编语言——用INT 21H 的A号功能,输入一个字符串存放在内存,倒序输出

本文主要是介绍汇编语言——用INT 21H 的A号功能,输入一个字符串存放在内存,倒序输出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用INT 21H 的A号功能,输入一个字符串“Hello, world!”,存放在内存,然

后倒序输出。

在DOS中断中,INT 21H是一个常用的系统功能调用中断,它提供了多种功能,其中A号功能用于字符串的输入。

在使用这个功能时,通常需要设置一个缓冲区来存储输入的字符串。
缓冲区的格式是特定的:
第一个字节通常表示缓冲区的大小,即可以存储的最大字符数(包括最后的回车符);
第二个字节在接收到字符串后将放置实际输入字符串的大小(不包括回车符)
字符串的内容从第三个字节开始存储。

当程序调用INT 21H的A号功能时,它会等待用户从键盘输入字符串;
用户输入的字符串将被存储在之前设置的缓冲区中(从第三个字节开始);
同时,缓冲区的第二个字节会被更新为实际输入的字符数(不包括回车符)。

ds:dx=缓冲区首地址

定义数据段:

data segmentbuffer db 200,?,200 dup (?)
data ends

在这里插入图片描述

输入123后的数据段:

在这里插入图片描述

其他程序细节看代码注释:

data segmentbuffer db 200,?,200 dup (?)
data endsstack segment stacktop label worddw 30h dup (?)
stack endscode segmentassume ds:data,ss:stack,cs:code
main proc far;初始化数据段mov ax,datamov ds,ax;初始化堆栈段mov ax,stackmov ss,axlea sp,top;把缓冲区首地址传给dxlea dx,buffer;调用a号功能输入字符串mov ah,0ahint 21h;实际输入字符串字数(不含回车)会放在缓冲区首地址+1(第二个字节)的位置mov bx,dx;cx作为循环计数器,先清零mov cx,0;再用cx的低8位cl取出[bx+1]的内容,即字符数mov cl,[bx+1];si作为逆序输出的偏移量,需要加首地址的基础上+1 -> 因为存放字符串是从缓冲区第三个字节开始mov si,cxadd si,bxinc si;逆序输出字符串	
next:mov dl,[bx+si]mov ah,2int 21hdec siloop nextmov ah,4chint 21h
main endp
code endsend main

这篇关于汇编语言——用INT 21H 的A号功能,输入一个字符串存放在内存,倒序输出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865376

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添