二进制转BCD码|汇编语言|微机原理与接口技术
微机原理与接口技术实验的一道题,课上没想到怎么做,倒是被错误思路困扰好久,我发现刚子也在用错的方法,我提醒才发现不对,于是想把这题做出来,各位看看能不能独立思考出来
网上都是FPGA等语言,看不懂也没法套用,只能自己写了一份汇编的,没有仿真试过,bug应该不多hh
方法很精妙,原理暂时没细究,应该是用递归思想,从高位引入,不停左移试探。倒是有些地方值得思考,比如为什么加三后不考虑超16进位?自己想去!
**增加移位加3算法说明 **
**使用移位加3算法实现自然二进制数转换为BCD码 **
**要求变量定义如下: **
**0x0400 Bin4 自然二进制数 **
**0x0404 BCD4 BCD码转换结果 **
**并自行设定原数据,确定转换结果的正确性。 **
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* **