汇编一点点提高3

;汇编一点点提高3——键盘输入8位二进制数,存入NUM单元,并在屏幕上显示对应的16进制数

此程序要注意一下几点:

1.dos1号功能——带回显的键盘输入,自动存入al

2.dos7号功能——不带回显的键盘输入,自动存入al,若要在屏幕中显示要调用DOS2号功能

3.将输入的多个二进制数转换为ASCII码

input:
    mov ah,1
    int 21h
    add bl,bl
    cmp al,'1'
    jnz P1
    inc bl
    P1: dec ch
    jnz input

4.换行子程序:

newline:
    mov ah,2
    mov dl,13
    int 21h
    mov ah,2
    mov dl,10
    int 21h

DATAS SEGMENT
    ;此处输入数据段代码
    NUM db ?
    mess db 'RESULT=$'  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    mov bl,0
    mov ch,8
input:           ; 输入8个二进制数
    mov ah,1
    int 21h
    add bl,bl     ;转换为ASCII码
    cmp al,'1'
    jnz P1
    inc bl
P1: dec ch
    jnz input
    
    mov NUM,bl
    
    mov dl,42h;输出字符B
    mov ah,2
    int 21h
    
newline:        ;换行
    mov ah,2
    mov dl,13
    int 21h
    mov ah,2
    mov dl,10
    int 21h
    
    mov ah,9             ;输出RESULT=
    mov dx,seg mess
    mov ds,dx
    mov dx,offset mess
    int 21h
    
    mov bl,NUM
    mov ch,2
again:                  
    mov cl,4
    rol bl,cl                 ;循环左移转换为十六进制数
    mov dl,bl
    and dl,0fh
    add dl,30h
    cmp dl,3ah
    jb show
    add dl,7h
show:                         ;显示出来
    mov ah,2
    int 21h    
    dec ch
    jnz again
    
    mov dl,48h                  ;输出H
    mov ah,2
    int 21h    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
原文地址:https://www.cnblogs.com/mm-happy/p/3750355.html