• asm视频与键盘处理入门


        page 60,132
    TITLE 设置光标
    ;------------------------------------
            .MODEL     SMALL        
    ;------------------------------------
    .DATA
            .CODE        
    MAIN    PROC    FAR
            mov ah,02h        ;表求设置光标
            mov bh,0        ;页号0
            mov dh,08        ;第8行
            mov dl,15        ;第15列
            
            int 10h            ;调用中断服务
            
            MOV        AX,4C00H
            INT     21H
    MAIN    ENDP        ;过程结束
    
            END MAIN    ;程序结束
        page 60,132
    TITLE 清除屏幕
    ;------------------------------------
            .MODEL     SMALL        
    ;------------------------------------
    .DATA
            .CODE        
    MAIN    PROC    FAR
            mov ax,0600h        ;AH=06(滚动),AL=00(全屏空白)
            mov bh,71h            ;白色背景(7),蓝色前景(1)
            mov cx,0000h        ;左上角行:列
            mov dx,184fh        ;右下角行:列 (第25行,80列)
            
            int 10h                ;调用中断服务
            
            MOV        AX,4C00H
            INT     21H
    MAIN    ENDP        ;过程结束
    
            END MAIN    ;程序结束
        page 60,132
    TITLE 显示串
    ;------------------------------------
            .MODEL     SMALL        
    ;------------------------------------
    .DATA
    CUS_MSG DB 'Hello World!','$'        ;显示串
    
            .CODE        
    MAIN    PROC    FAR
            mov ax,@data
            mov ds,ax
            mov ah,09h                ;请求显示
            lea dx,cus_msg            ;装入提示符地址
            int 21h                    ;调用中断服务
            
            MOV        AX,4C00H
            INT     21H
    MAIN    ENDP        ;过程结束
    
            END MAIN    ;程序结束
    TITLE     A08CTRNM (EXE) ;从键盘接收名字,并在屏幕中央显示名字,并响铃
    
        .MODEL     SMALL
        .STACK    64
        .DATA
    PARLIST LABEL     BYTE            ;名字的参数表    
    MAXNLEN    DB        30                ;    名字的最大长度
    ACTULEN    DB        ?                ;    输入的字符数
    KBNAME    DB        31 DUP(' ')        ;    存入名字
    
    PROMPT    DB        'Name?','$'        ;
    ;------------------------------------------------
        .CODE
    .386
    A10MAIN PROC FAR
        MOV        AX,@data
        MOV        DS,AX
        MOV     ES,AX
        CALL    Q10CLEAR        ;CLEAR SCREEN
    A20:    
        MOV     DX,0000
        CALL    Q20CURSOR        ;SET CURSOR
        CALL     B10INPUT        ;INPUT NAME
        CALL     Q10CLEAR
        CMP        ACTULEN,00    
        JE        A30
        CALL    C10CENTER        ;设置响铃和'$'
        CALL    D10DISPLY        ;在中央显示名字
        JMP        A20
    A30:
        MOV     AX,4C00H
        INT        21H
    
    A10MAIN ENDP
    ;    显示提示符并接收输入的名字
    ;------------------------------------------------
    B10INPUT    PROC    NEAR
        PUSH    AX
        PUSH    DX
        
        MOV     AH,09H    ;请求显示
        LEA        DX,PROMPT
        INT        21H
        MOV        AH,0AH    ;请求输入
        LEA        DX,PARLIST
        INT        21H
        
        POP     DX
        POP        AX
        RET
    B10INPUT    ENDP
    ;    设置响铃和'$'定界符,在屏幕中央设置光标
    ;------------------------------------------------
    C10CENTER    PROC    NEAR
        MOVZX    BX,ACTULEN
        MOV        KBNAME[BX],07
        MOV        KBNAME[BX+1],'$'
        MOV        DL,ACTULEN
        SHR        DL,1
        NEG        DL
        ADD     DL,40
        MOV        DH,12
        CALL    Q20CURSOR
        RET
    C10CENTER    ENDP
    ;    显示中心位置的名字
    ;------------------------------------------------
    D10DISPLY    PROC    NEAR
        MOV    AH,09H
        LEA    DX,KBNAME
        INT    21H
        RET
    D10DISPLY    ENDP
    ;    清屏并设置属性
    ;------------------------------------------------
    Q10CLEAR    PROC    NEAR
        PUSHA
        MOV        AX,0600H
        MOV     BH,30
        MOV        CX,0000
        MOV     DX,184FH
        INT        10H
        POPA
        RET
    Q10CLEAR    ENDP
    ;    设置光标的行列
    ;------------------------------------------------
    
    Q20CURSOR    PROC    NEAR    ;DX已输入光标
        MOV        AH,02H            ;请求设置光标
        MOV        BH,00            ;页号0
        INT        10H
        RET
    Q20CURSOR    ENDP
    
    END    A10MAIN
  • 相关阅读:
    HashMap 原理?jdk1.7 与 1.8区别
    内存泄漏与溢出
    NIO
    Mysql 存储引擎
    编写一个 rpc
    dubbo 与 zookeeper
    MongoDB
    natapp 内网穿透服务
    【AHOI 2009】同类分布
    [HNOI 2016] 序列
  • 原文地址:https://www.cnblogs.com/wucg/p/2453275.html
Copyright © 2020-2023  润新知