汇编 从缓冲区输入字符串 用INT 21H的0A号功能进行字符串的输入

从键盘输入字符串到输入缓冲区中,再把数据数据给读取出来
这个程序是用汇编INT 21H的0A号功能来进行字符串的输入的


ASSUME SS:stack,CS:code,DS:data
;数据段的定义
data SEGMENT
	strInput DB 100H dup(?)
	str0 DB 0DH, 0AH, 24H
	strExit DB 'Please press any key to exit!', 0DH, 0AH, 24H
data ends

;栈空间的定义
stack SEGMENT STACK  ;这里要加上“STACK”,不然编译器不知道这是一段栈空间,在连接时老是说没有栈
	DB 20 DUP(0)
	top LABEL WORD    ;栈顶指针
stack ends

;代码段空间的定义
code SEGMENT
start:	
	MOV AX, stack
	MOV SS, AX      ;栈空间的初始化
	LEA SP, top     ;设置栈和栈顶地址
	MOV AX, data
	MOV DS, AX      ;初始化数据段
input:
	LEA DX, strInput
	MOV BX, DX
	MOV DS:[BX], 0ffh汇编
	MOV AH, 0AH
	INT 21H    ;键盘输入到缓冲区
	MOV DI, DX    ;获取输入缓冲区首址,放在DI中
	MOV BH, DS:[DI]   ;获取输入缓冲区的最大字符数
	MOV BL, DS:[DI+1] ;获取输入缓冲区中实际输入的字符数
	LEA DX, str0
	MOV AH, 9
	INT 21H    ;输出回车换行
output:
	XOR CH, CH
	MOV CL, BL
	MOV BX, DI
	lea bx, strInput
	ADD BX, CX
	ADD BX, 2
	MOV DS:[BX], 0AH
	INC BX
	MOV DS:[BX], 0DH
	INC BX
	MOV DS:[BX], 24H    ;插入回车、换行和结束字符
	MOV DX, DI
	ADD DX, 2
	MOV AH, 9
	INT 21H	
finish:
	LEA DX, strExit ;DX指向要输出字符串
	MOV AH, 9
	INT 21H         ;执行输出语句
	MOV AH, 7 
	INT 21H         ;INT 21H的7号功能是让用户输入但不回显,所以程序在就不会一闪而过了
	MOV AH, 4CH
	INT 21H         ;返回
code ends
end start


你可能感兴趣的:(汇编,汇编,编译器,output,input)