實驗4:實現內環自檢功能
阿新 • • 發佈:2019-02-14
題目:通過內環自檢的方式,將以下電文,顯示在螢幕上,輸出十行結束。
Hello Masm!
程式清單:
;FILENAME:931_1.asm .586 DATA SEGMENT USE16 BUF DB 'Hello Masm!' LENS EQU $-BUF ERROR DB 'COM1 BAD!',0DH,0AH,'$' DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX CALL I8250 ;主串列埠初始化 MOV CH,10 ;10行送CH AGAIN: MOV CL,LENS ;電文長度送CL MOV BX,OFFSET BUF TSCAN: MOV DX,3FDH IN AL,DX TEST AL,20H ;傳送保持暫存器空? JZ TSCAN ;否 MOV AL,[BX] ;取字元 SEND: MOV DX,3F8H OUT DX,AL ;送主串列埠資料暫存器 MOV SI,0 RSCAN: MOV DX,3FDH IN AL,DX TEST AL,01H ;一幀資料收完否 ? JNZ REVEICE ;收完轉 DEC SI JNZ RSCAN ;延時 JMP DISPERR ;超時,轉出錯處理 REVEICE: MOV DX,3F8H IN AL,DX ;讀資料暫存器 AND AL,7FH DISP: MOV AH,2 MOV DL,AL INT 21H ;螢幕顯示 INC BX DEC CL ;計數 JNZ TSCAN DEC CH ;行計數 MOV AH,2 MOV DL,0DH MOV DL,0AH ;換行 INT 21H ;螢幕顯示 JNZ AGAIN JMP RETURN DISPERR: MOV AH,9 MOV DX,OFFSET ERROR INT 21H ;顯示出錯資訊 RETURN: MOV AH,4CH INT 21H ;返回 DOS ;---------------------------- I8250 PROC ;主串列埠初始化子程式 MOV DX,3FBH MOV AL,80H OUT DX,AL ;定址位置1 MOV DX,3F9H MOV AL,00H OUT DX,AL ;寫除數高8位 MOV DX,3F8H MOV AL,60H OUT DX,AL ;寫除數低8位 MOV DX,3FBH MOV AL,03H OUT DX,AL ;無校驗傳送,8位資料 MOV DX,3F9H MOV AL,10H OUT DX,AL ;禁止8250內部中斷 MOV DX,3FCH MOV AL,10H OUT DX,AL ;8250收發方式,禁止中斷 RET I8250 ENDP CODE ENDS END BEG
實驗結果: