除錯軟體
win10上可用emu8086除錯,運行后可單步除錯,查看暫存器、記憶體等

8253實驗代碼及menu8086編譯工具百度網盤鏈接:
提取碼:8086
實驗內容


第三點參考代碼
IO8253A EQU 280H
IO8253B EQU 281H
IO8253C EQU 282H
IO8253D EQU 283H
DATAS SEGMENT
TEMP DW 0, 0, 0, 0;四個字依存盤為,鍵盤輸入值暫存,T0計數值,T1計數值,是否繼續標志位(0結束,1繼續)
STRING_1 DB 'counter1:', '$'
STRING_2 DB 'counter2:', '$'
STRING_3 DB 'continue?(y/n)', '$'
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MAIN:
MOV AX, 0
LEA DX, STRING_1
MOV AH, 9 ;9號功能顯示提示字串
INT 21H
CALL KEYSCAN
MOV AX, [SI]
AND AL, 0FEH ;最低位清零,計數值為偶數輸出方波
MOV [SI+2], AX ;保存T0引數存到
LEA DX, STRING_2
MOV AH, 9 ;9號功能顯示提示字串
INT 21H
CALL KEYSCAN
MOV AX, [SI]
MOV [SI+4], AX ;保存T0引數存到
LEA DX, STRING_3
MOV AH, 9
INT 21H
CALL ISY
MOV AX, [SI+6]
CMP AX, 0
JZ STOP
CALL SET
MOV AH, 2 ;2號功能
MOV DX, 0DH ;加回車符
INT 21H
MOV DL, 0AH ;加換行符
INT 21H
JMP MAIN
STOP:
MOV AX, 4C00H
INT 21H
;判斷按下y還是n,y繼續n結束
ISY PROC NEAR
YORN:
MOV AH, 8
INT 21H
CMP AL, 'y'
JE Y0
CMP AL, 'n'
JE N0
JMP YORN
Y0:
MOV AX, 1
MOV [SI+6], AX
JMP RETURN1
N0:
MOV AX, 0
MOV [SI+6], AX
JMP RETURN1
RETURN1:
MOV AH, 2
MOV DX, 0DH ;加回車符
INT 21H
MOV DL, 0AH ;加換行符
INT 21H
RET
ISY ENDP
;定時器/計數器設定子程式
SET PROC NEAR
S:
LEA SI, TEMP
;TO配置
MOV DX, IO8253D
MOV AL, 00110110B
OUT DX, AL
MOV DX, IO8253A
MOV AX, [SI+2]
OUT DX, AL
MOV AL, AH
OUT DX, AL
;T1配置
MOV DX, IO8253D
MOV AL, 01110100B
OUT DX, AL
MOV DX, IO8253B
MOV AX, [SI+4]
OUT DX, AL
MOV AL, AH
OUT DX, AL
RET
SET ENDP
;鍵盤讀取子程式
KEYSCAN PROC NEAR
SK:
LEA SI, TEMP
MOV AX, 0
MOV [SI], AX
MOV CX, 0
KEYBORD:
MOV AH, 8 ;8號功能
INT 21H
CMP AL, 0DH
JNE KEY
JMP RETURN
KEY:
CMP AL, 39H ;不是'0'-'9'等待
JA CONTINUE
CMP AL, 30H
JB CONTINUE
SUB AL, 30H ;轉換成數字
MOV BL, AL
MOV BH, 0
MOV AH, 0
PUSH BX
MOV AX, [SI] ;每收到一個數字之前的乘10,再加上剛輸入的
MOV DX, 0
MOV BX, 10
MUL BX ;雙位元組乘法
POP BX
ADD AX, BX
MOV [SI], AX ;保存到si指向記憶體單元
MOV DL, BL
ADD DL, 30H
MOV DH, 0
MOV AH, 2
INT 21H
INC CX
CMP CX, 5
JNE CONTINUE
MOV AX, SI
CMP AX, 65535 ;大于65535取65535,防止溢位
JB RETURN
MOV AX, 65535
MOV [SI], AX
JMP RETURN
RETURN:
MOV AH, 2
MOV DX, 0DH ;加回車符
INT 21H
MOV DL, 0AH ;加換行符
INT 21H
RET
CONTINUE:
JMP KEYBORD
KEYSCAN ENDP
CODES ENDS
END START
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280694.html
標籤:其他
上一篇:C++7.3銷售系統練習
