📄 strgsnder0.asm
字号:
DATAS SEGMENT
DW 120 DUP('')
DATAS ENDS
STACKS SEGMENT
INFORM DB 'Press 1 to recieve,2 to transmit,and others to exit:',13,10,'$'
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
INI:MOV DX,3FBH ;initialize UART.传输线控制寄存器
MOV AL,80H ;set DLAB=1,then cpu can operate with DLL and DLM.
OUT DX,AL
MOV DX,3F8H ;set bit rate 9600b/s.
MOV AL,12 置除数锁存器
OUT DX,AL
INC DX
MOV AL,0 不允许中断
OUT DX,AL
MOV AL,0BH ;odd check,one stop bit.
MOV DX,3FBH ;8位,停止位1位 有奇偶校验
OUT DX,AL
MOV AL,03H ;set Modem Control Register.
MOV DX,3FCH ; DTR RTS位有效
OUT DX,AL
CHOOSE:
LEA DX,INFORM
MOV AH,09H
INT 21H
MOV AH,01H ; 键入并显示一个字符
INT 21H
CMP AL,'1'
JZ RECIEVE
CMP AL,'2'
JZ TRANSMIT
JMP EXIT
TRANSMIT:
MOV DX,3FDH ;the module to check the Line Statement Register.传输线状态寄存器
IN AL,DX ;read the data of LSR. 输入传输线状态
TEST AL,20H ; 判断传输线是否空闲
JZ TRANSMIT
MOV AH,01H ;the module for transmiting strings.
INT 21H
MOV DX,3F8H
OUT DX,AL
CMP AL,1BH ?
JZ CHOOSE ;return to press '1' or '2'.
JMP TRANSMIT
RECIEVE:
MOV DX,3FDH ;the module to check the Line Statement Register.
IN AL,DX ;read the data of LSR. 输入传输线状态
TEST AL,16H ;judgeing from this,the UART can know how about BI,FE and OE.
JNZ ERROR
TEST AL,01H ;判断传输线是否空闲
JZ RECIEVE ;if RBR is full,jump to recieve module.
MOV DX,3F8H ;read the data recieved.
IN AL,DX
MOV AH,02H ;print the character recieved on the screen.显示收到的数据
MOV DL,AL
INT 21H
CMP AL,1BH
JZ CHOOSE
JMP RECIEVE
ERROR:
MOV AH,02H ;print '!' on the screen to figure something wrong happened.
MOV DL,'!'
INT 21H
JMP RECIEVE
EXIT:MOV AH,4CH ;return to DOS.
INT 21H
CODES ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -