⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 硬件例题.txt

📁 一些学习汇编语言的代码
💻 TXT
字号:
例1:  编程实现:从非编码键盘上按键,将该键的编号显示到CRT屏幕上.按下'F'键时退出程序.

PORT_H     EQU   208H
PORT_V     EQU   20AH
PORT_CW    EQU   20BH

TRUE    EQU   0FFH
FALSE   EQU   0

EXIT_KEY  EQU  0FH 


DATA       SEGMENT

DISP_BUF   DB  ?
H_NUMBER   DB  ?
EXIT_FLAG  DB  ?
ASCII_TABLE DB   '0123456789ABCDEF'

DATA       ENDS

CODE SEGMENT
        ASSUME CS:CODE,DS:DATA
START:
        MOV AX,DATA
        MOV DS,AX

        MOV AL,10001001B  ; INIT 8255  A,B=OUT   C=IN
        MOV DX,PORT_CW
        OUT DX,AL

        MOV EXIT_FLAG,FALSE

NEXT:   CALL KEY_INPUT
        CALL DISP
        CMP EXIT_FLAG,TRUE
        JNZ NEXT
        MOV AH,4CH
        INT 21H

DISP:
        LEA BX,ASCII_TABLE
        MOV AL,DISP_BUF
        AND AL,0FH
        XLAT
        MOV DL,AL
        MOV AH,2
        INT 21H
        RET


DELAY:
        PUSH BX
        PUSH CX
            MOV BX,150
DELAY_LP2:  MOV CX,0FFFFH
DELAY_LP1:  DEC CX
            JNZ DELAY_LP1
            DEC BX
            JNZ DELAY_LP2
        POP CX
        POP BX
        RET

KEY_INPUT:
                MOV H_NUMBER,0
KEY_WAIT:       CALL OUT_HV
                CMP AL,0FH
                JZ KEY_WAIT
                   CALL DELAY
                   MOV H_NUMBER,0F7H
                   MOV BL,0
KEY_LP2:     CALL OUT_HV
                   CMP AL,0FH
                   JNZ KEY_FIND
                       ADD BL,4
                       ROR H_NUMBER,1
                       JNC KEY_RET
                       JMP KEY_LP2
KEY_FIND: SHR AL,1
                JNC KEY_LP3
                    INC BL
                    JMP KEY_FIND
KEY_LP3:        MOV H_NUMBER,0
                    CALL OUT_HV
                    CMP AL,0FH
                   JNZ KEY_LP3
                         CALL DELAY
                         CMP BL,EXIT_KEY
                         JNZ KEY_RET
                               MOV EXIT_FLAG,TRUE
KEY_RET:     MOV DISP_BUF,BL
                   RET

; INPUT:  H_NUMBER
; OUTPUT: AL
OUT_HV:
          MOV DX,PORT_H
          MOV AL,H_NUMBER
          OUT DX,AL
          MOV DX,PORT_V
          IN AL,DX
          AND AL,0FH
          RET

CODE    ENDS
        END START 
例2    用动态扫描方式控制6个七段数码管,使它能同时显示不同信息.再从标准键盘上输入0-9,将新输入的数据显示到LED最右1位,并将原LED显示信息左移1位.当按下回车键时退出程序.

PORT_BIT   EQU   208H
PORT_7SEG  EQU   209H
PORT_CW    EQU   20BH

TRUE    EQU   0FFH
FALSE   EQU   0

EXIT_KEY  EQU  0DH 


DATA       SEGMENT

SEG_7_CODE DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
           DB  88H,83H,0C6H,0A1H,86H,8EH
DISP_BUF   DB  1,2,3,4,5,6

DISP_BIT   DB  ?
EXIT_FLAG  DB  ?

DATA       ENDS

CODE SEGMENT
        ASSUME CS:CODE,DS:DATA
START:
        MOV AX,DATA
        MOV DS,AX

        MOV AL,10000000B  ; INIT 8255  A,B,C=OUT
        MOV DX,PORT_CW
        OUT DX,AL
        MOV EXIT_FLAG,FALSE

NEXT:   CALL DISP
        CALL KEY_INPUT
        CMP EXIT_FLAG,TRUE
        JNZ NEXT
        CALL LED_OFF
        MOV AH,4CH
        INT 21H

DISP:
          MOV DISP_BIT,00100000B
          LEA BX,SEG_7_CODE
          LEA SI,DISP_BUF
DISP_NEXT:
          CALL LED_OFF
          MOV AL,[SI]
          INC SI
          XLAT
          MOV DX,PORT_7SEG
          OUT DX,AL
          MOV DX,PORT_BIT
          MOV AL,DISP_BIT
          OUT DX,AL
          CALL DELAY
          SHR DISP_BIT,1
          JNC DISP_NEXT
          RET

LED_OFF:
          MOV DX,PORT_BIT
          MOV AL,0
          OUT DX,AL
          RET

DELAY:
        PUSH BX
        PUSH CX
            MOV BX,20
DELAY_LP2:  MOV CX,0FFFFH
DELAY_LP1:  DEC CX
            JNZ DELAY_LP1
            DEC BX
            JNZ DELAY_LP2
        POP CX
        POP BX
        RET

KEY_INPUT:
                MOV AH,0BH
                INT 21H
                CMP AL,0
                JZ KEY_IN_RET
                   CALL DISP_BUF_SHL
                   MOV AH,1
                   INT 21H
                   CMP AL,EXIT_KEY
                   JNZ KEY_INPUT_LP1
                       MOV EXIT_FLAG,TRUE
KEY_INPUT_LP1:     AND AL,0FH
                   MOV [DISP_BUF+5],AL
KEY_IN_RET:     RET

DISP_BUF_SHL:
                LEA SI,DISP_BUF
                MOV CX,5
DISP_BUF_SHL_NEXT:
                MOV AL,[SI+1]
                MOV [SI],AL
                INC SI
                LOOP DISP_BUF_SHL_NEXT
                RET

CODE    ENDS
        END START 
例3  编程实现流水灯控制.当开关K7合上时左转,断开时右转,若开关K8合上则程序退出

; ---------- DEFINE ----------
PORT_DISP  EQU   209H
PORT_KEY   EQU   20AH
PORT_CW    EQU   20BH

TRUE    EQU   0FFH
FALSE   EQU   0

EXIT_KEY  EQU  10000000B
ROL_KEY   EQU  01000000B

; ---------- DEFINE ----------

DATA       SEGMENT

DISP_BUF   DB  00000001B
EXIT_FLAG  DB  ?
ROL_FLAG   DB  ?

DATA       ENDS

CODE SEGMENT
        ASSUME CS:CODE,DS:DATA
START:
        MOV AX,DATA
        MOV DS,AX

        MOV AL,10001001B  ; INIT 8255  B=OUT  C=IN
        MOV DX,PORT_CW
        OUT DX,AL

        MOV EXIT_FLAG,FALSE
        MOV ROL_FLAG,FALSE

NEXT:   CALL DISP
        CALL DELAY
        CALL TEST_KEY
        CMP EXIT_FLAG,TRUE
        JNZ NEXT
        MOV AH,4CH
        INT 21H


DISP:
          CMP ROL_FLAG,TRUE
          JE DISP_LP1
             ROR DISP_BUF,1
             JMP DISP_LP2
DISP_LP1: ROL DISP_BUF,1
DISP_LP2: MOV DX,PORT_DISP
          MOV AL,DISP_BUF
          OUT DX,AL
          RET

DELAY:
        PUSH BX
        PUSH CX
            MOV BX,2000
DELAY_LP2:  MOV CX,0FFFFH
DELAY_LP1:  DEC CX
            JNZ DELAY_LP1
            DEC BX
            JNZ DELAY_LP2
        POP CX
        POP BX
        RET

TEST_KEY:
                MOV DX,PORT_KEY
                IN AL,DX
                TEST AL,EXIT_KEY
                JZ  TEST_KEY_LP1
                    MOV EXIT_FLAG,TRUE
TEST_KEY_LP1:   MOV ROL_FLAG,FALSE
                TEST AL,ROL_KEY
                JZ  TEST_KEY_RET
                    MOV ROL_FLAG,TRUE
TEST_KEY_RET:   RET

CODE    ENDS
        END START 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -