BCD码转为相应的数据

注:原博客账号密码丢失,故将本科期间的笔记搬运至此

例如将35H转换为二进制数据应得到23H、即十进制的35




DATAS SEGMENT

    ;此处输入数据段代码

    buf db 35h,64h,89h

    res db ?  

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

     ;宏 显示一个字符

dispchar macro char

         mov ah,2

         mov dl,char

         int 21h

         endm

    ;宏定义完成

 

    ;宏 显示字符串

dispmsg   macro message

          mov ah,9

          lea dx,message

          int 21h

          endm

    ;宏定义完成

 

    ;宏 显示十六进制数的四位

disphex   macro hexdata

          local disphex1

          push ax

          push bx

          push cx

          push dx

          mov bx,hexdata

          mov cx,0404h

disphex1: rol bx,cl

          mov al,bl

          and al,0fh

          call htoasc

          dispchar al

          dec ch

          jnz disphex1

          pop dx

          pop cx

          pop bx

          pop ax

          endm

    ;宏定义完成

    

    

    mov cx,lengthof buf

    

    lea si, buf

    lea di, res

    ;disphex word ptr [si]

again:

    mov al,byte ptr [si]

    call bcdto2

    ;disphex ax

    mov byte ptr [di],al

    inc si

    inc di

    loop again

    

    disphex word ptr res

           

    MOV AH,4CH

    INT 21H

    

    ;BCD转二进制

 bcdto2 proc

     push cx

     mov ah,0h

     mov bl,10h

     div bl

     mov dl,ah

     mov bl,10

     mul bl

     add al,dl

     pop cx

     ret

 bcdto2 endp

    

 ;子程序十六进制转ASCII

 HTOASC proc

        push bx

        mov bx,offset ASCII

        and al,0fh

        xlat ASCII

        pop bx

        ret

ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

      db 41h,42h,43h,44h,45h,46h

HTOASC  endp    

CODES ENDS

    END START
--------------------- 
作者:D??? 
来源:CSDN 
原文:https://blog.csdn.net/qq_31424383/article/details/53180398 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

你可能感兴趣的:(汇编)