例8.9 把字符串"Hello, World"从COM1端口传输出去。在传输过程中,要求传输速率为9600波特,字长为8位,1位停止位,无齐偶校验。
解:
.MODEL SMALL .DATA MSG DB "Hello, World" MLen EQU $-MSG .CODE .STARTUP MOV AL, 0E3H ;0E3—9600、无齐偶校验、字长8位,1位停止位 MOV DX, 0 MOV AH, 0 INT 14H ;初始化通信口COM1 MOV BX, OFFSET MSG MOV CX, MLen MOV DX, 0 again: MOV AL, [BX] MOV AH, 1 INT 14H TEST AH, 80H ;如果发送字符失败,继续发同一个字符,这里可能 JNZ again ;构成死循环。在实际工作过程中,还有其它考虑。 INC BX LOOP again .EXIT 0 END
例8.10 把从COM1端口读入的字符显示在屏幕上。如果通信端口数据未准备好,则程序处于等待状态;若传输出错,则用红色显示字符""。
解:
…… again: MOV DX, 0 MOV AH, 3 INT 14H TEST AH, 1H ;检测状态字节AH的最后一位,看数据是否准备好 JZ again MOV DX, 0 MOV AH, 2 INT 14H ;从COM1端口读字符 TEST AH, 80H ;检测读字符是否成功 .IF?ZERO ;读字符成功 AND AL, 7FH ;屏蔽掉最高位,使之为字符 MOV BL, 15 ;正常颜色:白色 .ELSE MOV AL, '' ;显示字符"" MOV BL, 12 ;错误颜色:红字 .ENDIF MOV BH, 0 MOV AH, 0EH INT 10H JMP again ……