汇编语言字符串的输入输出----(4)

本文深入探讨了8086汇编语言中的变量定义伪指令,包括DB、DW、DD等,以及DUP语句的使用方法。通过具体实例,如INBUF、INATV和SHI等变量的定义,展示了如何在数据段中分配内存,并详细解释了offset指令的用途。此外,文章还提供了完整的程序代码示例,演示了字符串输出、用户输入和数据处理的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量定义伪指令:

定义:变量定义伪指令用来为数据分配内存单元,建立变量与储存单元之间的联系。 

语句格式:[变量名变量定义伪指令  操作数1(,操作数2,操作数3.....)

变量定义伪指令:DB(字节)、DW(字)、DD(双字)、DQ(4字)、DT(5字)

个人理解:将变量定义伪指令理解为C语言中的数据的类型(int、float...),即定义数据类型

 

DUP语句格式:

变量名  变量定义伪指令  重复次数  DUP被重复的内容

注:若被重复的内容为问号(?)表示:重复的内容不定

 

offset语句格式:

offset 变量名        解释:变量名的偏移地址(也就是有效地址

DATA SEGMENT
INBUF  DB 6  ;INBUF为变量名,DB为变量定义的伪指令,6为元素个数;   
	   DB ?  ;问号(?)表示预留空间,内容不定
;注:上诉定义INBUF的元素个数为6,但最多只能输入5个,因为最后一个元素用于存放回车键,因为字符串要以回车键结尾

INATV  DB 6 DUP(?)   ;重复的次数为6,重复的内容为不定
	   DB '$'  ;此语句将'$'定义为DB类型,字符串要以'$'结尾
SHI    DW 10   ;定义SHI为DW类型且最多含有10个元素

MESS   DB  'please inter data:','$'   ;定义一串字符串并将其存入MESS中,字符串的定义要以'$'的定义结尾
	
DATA ENDS
;从第一句话到此,都是在定义数据断代码段

;以下都是对代码段的定义
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA   ;相比之前的代码读多了DS:DATA,DS为数据段寄存器,存放当前数据段(DATA)的起始地址,
MAIN PROC FAR
START:
	MOV AX,DATA   ;将数据段的数据放到AX寄存器中
	MOV DS,AX     ;将AX中的数据存放到DS寄存器中
                  ;注:数据段中的数据无法直接移动到DS中,只能从AX寄存器中到DS

	mov dx,offset MESS   ;将MESS的有效地址存入dx中
	mov ah,09h           
	int 21h              ;这两条语句表示输出字符串

	MOV DX,OFFSET INBUF  ;将INBUF的有效地址存入DX中
	MOV AH,0AH           
	INT 21H              ;这两句代码表示等待你输入字符串

	MOV DL,0AH          
	MOV AH,2         
	INT 21H          ;前三行代码表示输出'换行'        
	MOV DL,0DH
	MOV AH,2
	INT 21H          ;前三行表示输出'回车'

	MOV CL,INBUF+1   ;INBUF的地址+1,指向INBUF的第二个元素,第二个元素表示实际输入字符个数
	MOV CH,0     ;将0赋值给CH
	PUSH CX      ;将CX中的值推进栈(入栈)
	MOV BX,OFFSET INATV  ;将INATV的有效地址存入BX中
    MOV SI,4
DISC:	
    MOV DL,[BX][SI]   ;将BX赋值给DL
	MOV AH,2    
  	INT 21H     ;输出DL的值
    DEC SI      ;SI的地址-1
    LOOP DISC   ;跳到DISC
 
	MOV DL,0AH
	MOV AH,2
	INT 21H     ;输出'换行'
	MOV DL,0DH
	MOV AH,2
	INT 21H     ;输出'回车'

	MOV DL,INBUF+1
	ADD DL,30H
	INT 21H      ;输出实际输入字符个数
	

	MOV AH,4CH
	INT 21H       ;终止程序
MAIN ENDP
CODE ENDS
	END START

8086图如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值