汇编编程一点点提高2

   编一个程序,要求把NUM单元存放的一个8位二进制数,在屏幕上显示成16进制数。

DATAS SEGMENT
    ;此处输入数据段代码
NUM db 11001100b ;dch
mess db 'B converted to h:$'  
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    mov ah,9
    mov dx,seg mess
    mov ds,dx
    mov dx,offset mess
    int 21h
    
    mov bl,NUM;将NUM装入BL
    mov ch,2;控制循环次数
again:
    mov cl,4
    rol bl,cl;循环左移将二进制数的高四位移到低四位
    mov dl,bl;保护二进制数
    and dl,0fh;转换为ASCII码
    add dl,30h;判断是否是大于9的ascii码
    cmp dl,3ah;转换为字母
    jb show
    add dl,7h
show:           ;显示
    mov ah,2
    int 21h    
    dec ch
    jnz again
    
    mov dl,48h
    mov ah,2
    int 21h
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

这个程序的重点有两个:1,将二进制数循环左移四位转换为一位十六进制;

2.十六进制输出问题,判断是否大于3ah,大于的话加7转换为字母;

还需要注意的是:调用DOS的2号功能是单个字符显示,9号功能是字符串显示

posted @ 2014-05-24 18:05  积水木屋  阅读(196)  评论(0编辑  收藏  举报