1.通过键盘输入一个字符,在屏幕上换行显示出来
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV AH,1
INT 21H
MOV BL,AL;输入AL,用BL存放
MOV DL,13;回车(十进制:13,十六进制:0D)
MOV AH,2
INT 21H
MOV DL,10;换行(十进制:10,十六进制:0A)
MOV AH,2
INT 21H
MOV DL,BL;输出通键盘输入的单字符
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
2.通过键盘输入一个字符串,并通过换行显示出来
CHANGELINE DB 13,10,'$'
13是回车,10是换行,‘$'表示到了字符串尾,不需要打印了
BUFFER DB 60,?,60 DUP(?)
定义的缓冲区,用来存放字符串,BUFFER是自己定义的变量名,DB表示双字节型变量,第一个60可以理解为数组首字节存放的数据,紧接着存放一个问号,问号默认值是0,60 DUP(?)表示60个连续存放的0.
AH=09 显示字符串 DS:DX=串地址
AH=0A 键盘输入到缓冲区 DS:DX=缓冲首地址
lea:装入有效地址的意思,它的操作数就是地址,常见的几种用法:
1、lea eax,[addr]
就是将表达式addr的值放入eax寄存器,示例如下:
lea eax,[401000h]; 将值401000h写入eax寄存器中
lea指令右边的操作数表示一个精指针,上述指令和mov eax,401000h是等价的
2、lea eax,dword ptr [ebx];将ebx的值赋值给eax
3、lea eax,c;其中c为一个int型的变量,该条语句的意思是把c的地址赋值给eax;
INPUT 是通过 int 21h 的 0ah (10) 功能输入字符串的,看看这个中断功能调用的说明,其首字节是后面缓冲区的大小,次字节则是返回时输入字符的个数,然后才是存放输入的字符,所以,要通过 INPUT 访问输入的字符,就得 INPUT+2。
DATAS SEGMENT
;此处输入数据段代码
CHANGELINE DB 13,10,'$'
BUFFER DB 60,?,60 DUP(?)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
LEA DX,BUFFER;接守字符串
MOV AH,0AH
INT 21H
MOV DX,OFFSET CHANGELINE ; 偏移量给寄存器DX
MOV AH,09H
INT 21H
LEA DX,BUFFER+2
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START