前言
第三次汇编实验课实验内容是输入一个字符串再输出该字符串
一、编写程序
输入一个字符再输出该字符
DATAS SEGMENT
BUFFER DB 20,?,20 DUP(?)
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
DB 128 dup(?);此处输入堆栈段代码
CRLF DB 0AH,0DH,'$'
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;字符串输入,缓冲区地址赋到DX
LEA DX,BUFFER
;键盘输入到缓冲区
MOV AH,0AH
INT 21H
;0AH中断会保存在DX中的地址存放来自键盘的输入
MOV AL,BUFFER+1;实际输入的字符个数
ADD AL,2;字符的串首
MOV AH,0
MOV SI,AX
MOV BUFFER[SI],'$'
;回车换行
LEA DX,CRLF
MOV AH,09H
INT 21H
;字符串输出
LEA DX,BUFFER+2
MOV AH,09H
INT 21H
;回车换行
LEA DX,CRLF
MOV AH,09H
INT 21H
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
二、程序解读
1.BUFFER
BUFFER DB 20,?,20 DUP(?)
预定义20字节的空间,待输入完成以后,自动获得输出的字符个数
2.CRLF
CRLF DB 0AH,0DH,'$'
此处的CRLF表示的是定义回车换行。
3.字符串输入
;字符串输入,缓冲区地址赋到DX
LEA DX,BUFFER
;键盘输入到缓冲区
MOV AH,0AH
INT 21H
此处表示的是将缓冲区BUFFER的地址赋值到DX,键盘输入的字符串存入到缓冲区。
4.字符串末尾加上‘$’
;0AH中断会保存在DX中的地址存放来自键盘的输入
MOV AL,BUFFER+1;实际输入的字符个数
ADD AL,2;字符的串首
MOV AH,0
MOV SI,AX
MOV BUFFER[SI],'$'
MOV AL,BUFFER+1 表示的是实际输入的字符个数
ADD AL,2 表示的是字符串的串首
这样就使得它的指向了BUFFER的最后一位,再最后一位加上字符串的结束标志‘$’
5.回车换行
LEA DX,CRLF
MOV AH,09H
INT 21H
6.字符串输出
LEA DX,BUFFER+2
MOV AH,09H
INT 21H
BUFFER+2表示的是字符串的串首
接着使用MOV AH,09H可以输出对应的字符
总结
有点难,但是还是在下课前做出来了。