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
原文地址:https://www.cnblogs.com/wucg/p/2453275.html