汇编语言——用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实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?