📄 shi3.asm
字号:
DATA SEGMENT
MSG1 DB 'Input: ','$'
MSG2 DB ' Received: ','$'
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
CALL INIT ;主串口初始化
TR:
MOV DX,3FDH
IN AL,DX
TEST AL,20H ;测试;D5位是否为1(发送保持寄存器是否为空)
JZ TR
MOV AH,0
INT 16H ;键盘输入
CMP AL,1BH ;判断是否是ESC键
JE EXIT ;退出
PUSH AX
MOV DX,OFFSET MSG1 ;显示MSG1
MOV AH,9
INT 21H
POP AX
MOV AH,2
MOV DL,AL
INT 21H ;显示输入的字符
MOV DX,3F8H
OUT DX,AL ;发送数据
RE:
MOV DX,3FDH
IN AL,DX
TEST AL,01H ;D0位是否为1(一帧数据收完否)
JZ RE
MOV DX,3F8H
IN AL,DX ;读数据寄存器
AND AL,7FH
PUSH AX
MOV DX,OFFSET MSG2 ;显示MSG2
MOV AH,9
INT 21H
POP AX
MOV AH,2
MOV DL,AL
INT 21H ;显示接收到的字符
MOV DL,0DH
INT 21H ;回车不换行
JMP TR
INIT PROC ;主串口初始化子程序
MOV DX, 3FBH
MOV AL, 80H ;访问除数寄存器
OUT DX, AL
MOV DX, 3F8H
MOV AX, 000CH
OUT DX, AL ;除数的低8位写入3F8H
INC DX
MOV AL, AH
OUT DX, AL ;除数的高8位写入3F9H
MOV AL,0BH ;00001011
MOV DX,3FBH
OUT DX,AL ;8位数据位,1位停止位,奇校验
MOV DX,3F9H
MOV AL,0
OUT DX,AL ;禁止8250内部中断
MOV AL,13H ;8250内环收发方式,禁止中断
MOV DX,3FCH
OUT DX,AL
RET
INIT ENDP
EXIT:
MOV AH,4CH ;退出程序
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -