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

本文详细介绍了如何在DOS环境中使用INT21H的A号功能接收用户输入的字符串,并展示了如何在内存中存储和逆序输出该字符串的过程。
摘要由CSDN通过智能技术生成

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

后倒序输出。

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

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

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

ds:dx=缓冲区首地址

定义数据段:

data segment
	buffer db 200,?,200 dup (?)
data ends

在这里插入图片描述

输入123回车后的数据段:

在这里插入图片描述

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

data segment
	buffer db 200,?,200 dup (?)
data ends

stack segment stack
	top label word
	dw 30h dup (?)
stack ends

code segment
	assume ds:data,ss:stack,cs:code
main proc far
	;初始化数据段
	mov ax,data
	mov ds,ax
	
	;初始化堆栈段
	mov ax,stack
	mov ss,ax
	lea sp,top

	;把缓冲区首地址传给dx
	lea dx,buffer
	
	;调用a号功能输入字符串
	mov ah,0ah
	int 21h
	
	;实际输入字符串字数(不含回车)会放在缓冲区首地址+1(第二个字节)的位置
	mov bx,dx
	
	;cx作为循环计数器,先清零
	mov cx,0
	
	;再用cx的低8位cl取出[bx+1]的内容,即字符数
	mov cl,[bx+1]
	
	;si作为逆序输出的偏移量,需要加首地址的基础上+1 -> 因为存放字符串是从缓冲区第三个字节开始
	mov si,cx
	add si,bx
	inc si
	
;逆序输出字符串	
next:
	mov dl,[bx+si]
	mov ah,2
	int 21h
	dec si
	loop next
	
	mov ah,4ch
	int 21h
main endp
code ends
	end main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值