二进制转BCD码

 

二进制转BCD码|汇编语言|微机原理与接口技术

微机原理与接口技术实验的一道题,课上没想到怎么做,倒是被错误思路困扰好久,我发现刚子也在用错的方法,我提醒才发现不对,于是想把这题做出来,各位看看能不能独立思考出来

网上都是FPGA等语言,看不懂也没法套用,只能自己写了一份汇编的,没有仿真试过,bug应该不多hh

方法很精妙,原理暂时没细究,应该是用递归思想,从高位引入,不停左移试探。倒是有些地方值得思考,比如为什么加三后不考虑超16进位?自己想去!


​ **增加移位加3算法说明 **

​ **使用移位加3算法实现自然二进制数转换为BCD码 **

​ **要求变量定义如下: **

​ **0x0400 Bin4 自然二进制数 **

​ **0x0404 BCD4 BCD码转换结果 **

​ **并自行设定原数据,确定转换结果的正确性。 **

img

data segment

Bin db 38h ;初始化

BCD db 0

data ends

code segment

​ assume cs:code, ds:data

main:

MOV ax,data

MOV ds,ax

MOV CX, 7 ;循环次数

MOV SI, 0

keep:

MOV DX,Bin

ROL DX, SI+1

AND DX, 01H

ROL BX, 1 ;整体向左移一位

ADD BX, DX ;在结尾加上第SI高位的数

J0: MOV AL, BL

SUB AL, 05H

JNC J1 ;低4位大于4则加3

JMP J2 ;不用加则判断高四位

J1: ADD BL 03H ;低四位加三

J2: MOV AL, BH

SUB AL, 05H

JNC J3 ;高4位大于4则加3

JMP J4

J3: ADD BH 03H ;高四位加三

J4: MOV AX, 0

ADD SI 01H ;定位下一位

LOOP keep

MOV DX,Bin

AND DX, 01H

ROL BX, 1

ADD BX, DX ;最后一位直接加上不用判断

MOV SI, 01H

MOV [SI], BX ;存放结果

JMP $

code ends

end main

***结果:* **

***DS: 38 56* **