使用彙編直接寫屏

來源:互聯網
上載者:User

直接寫屏 挺有意思的,能直接存取顯存地址。可以看看下面這個案例。

;功能:顯示所按字元鍵的ASCII碼
SSEG    SEGMENT PARA STACK
    DW    256    DUP(?)
    TOP    LABEL    WORD
SSEG    ENDS
;
DSEG    SEGMENT
    MESS1    DB    'Please,press any key.',0DH,0AH,24H
    MESS2    DB    'ASCII Code:'
    MESS2_L=$-OFFSET MESS2
    MESS3    DB    2    DUP(?)
    MESS3_L=$-OFFSET MESS3
    COLORB    DB    00000001B,00000100B,00001110B,00000111B    ;藍,紅,黃,白
    COLORE    LABEL    BYTE
DSEG    ENDS
;
CSEG    SEGMENT
    ASSUME    CS:CSEG,DS:DSEG,SS:SSEG
START:    MOV    AX,DSEG
        MOV DS,AX 
        MOV    DX,OFFSET    MESS1
        MOV    AH,9
        INT    21H
AGAIN:    MOV    AH,1
        INT    16H
        JZ    NEXT
        MOV    AH,0
        INT    16H
        JMP    AGAIN
NEXT:    MOV    AH,0
        INT    16H
        CALL    CHECKPRE
        JNZ    NEXT2
NEXT2:    CALL    ASCTOH1
        MOV    DI,OFFSET    COLORE-1
        MOV    BL,DS:[DI]
        MOV    SI,OFFSET    MESS2
        MOV    CX,MESS2_L
        MOV    DH,22
        MOV    DL,20
        CALL    SCREEN
        MOV    DI,OFFSET    COLORB
        MOV    BL,DS:[DI]
        MOV    SI,OFFSET    MESS3
        MOV    CX,MESS3_L
        MOV    DH,22
        MOV    DL,31
        CALL    SCREEN
        JMP    AGAIN
        ;
        ;子程式名:ASCTOH1
        ;功能:將壓縮BCD碼轉成對應的ASCII碼
        ;入口參數:AL=壓縮BCD碼
        ;出口參數:存入以MESS3為首地址的記憶體中
        ;說明:將調用子程式ASCTOH2
        ASCTOH1    PROC
                PUSH    BX
                PUSH    CX
                XOR    BX,BX
                MOV    CX,2
        SECOND:    ROL    AL,1
                ROL    AL,1
                ROL    AL,1
                ROL    AL,1
                MOV    AH,AL
                CALL    ASCTOH2
        NEXTASC:    MOV    MESS3[BX],AH
                    INC    BX
                    LOOP    SECOND
                POP CX
                POP    BX
                RET
        ASCTOH1    ENDP
        ;
        ;子程式名:ASCTOH2
        ;功能:將數字轉成對應的ASCII碼
        ;入口參數:AH=要轉成ASCII的數字
        ;出口參數:AH=數位ASCII碼
        ASCTOH2    PROC
                AND    AH,0FH
                ADD    AH,30H
                CMP    AH,'9'
                JBE    OK
                ADD    AH,7
            OK:    RET
        ASCTOH2    ENDP
        ;
        ;子程式名:SCREEN
        ;功能:直接寫屏
        SCREEN    PROC
                MOV    AX,0B800H
                MOV    ES,AX
                MOV    AL,80
                MUL    DH
                XOR    DH,DH
                ADD    AX,DX
                ADD    AX,AX
                XCHG    AX,BX
                MOV    AH,AL
                JCXZ    THEND
        RAGAIN:    MOV    AL,[SI]
                INC    SI
                MOV    ES:[BX],AX
                INC    BX
                INC    BX
                LOOP    RAGAIN
        THEND:    RET
        SCREEN    ENDP
        ;
        ;子程式名:CHECKPRE
        ;功能:檢測到ESC鍵,就退出
        ;入口參數:AL=檢測到鍵的ACSII碼
        ;出口參數:AL保持不變.ZF=0,非ESC鍵
        CHECKPRE    PROC
                    PUSH AX
                    ESCKEY=1BH
                    CMP    AL,ESCKEY
                    JNZ    RETEN    ;是,返回DOS
                    MOV    AH,4CH
                    INT    21H
            RETEN:    POP AX
                    RET
        CHECKPRE    ENDP
        ;
CSEG    ENDS
    END    START

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.