单片机实验 二进制到BCD转换
程序如下:;将A中的二进制数拆为3个BCD码,并存入Result开始的3个单元Resultequ20horg0ljmpStartorg0100hBinToBCD:retS...
程序如下:
; 将 A 中的二进制数拆为3个 BCD 码, 并存入 Result 开始的3个单元
Result equ 20h
org 0
ljmp Start
org 0100h
BinToBCD:
ret
Start:
mov sp, #40h
mov a, #123
call BinToBCD
ljmp $
end 展开
; 将 A 中的二进制数拆为3个 BCD 码, 并存入 Result 开始的3个单元
Result equ 20h
org 0
ljmp Start
org 0100h
BinToBCD:
ret
Start:
mov sp, #40h
mov a, #123
call BinToBCD
ljmp $
end 展开
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
51汇编不熟,给你写个C的吧(转非压缩的BCD),加上注释,你自己改成51汇编吧.
int i = 100; // i 用来做被除数,初值"100".
int idx = 0; // idx 用来确定存储位置的偏移,初值"0".
while( i ) // 循环条件,被除数不为"0",则继续循环.
{
Result[idx] = A / i; // Result 第 idx 偏移位置保存 A 整除 i 的值.
A -= Result[idx]*i; // A 的值 减 Result 第 idx 偏移位置 * i 的值.
i/=10; // 将 i 的值除以"10"
idx++; // Result的偏移值 加"1".
}
以上的思想是
A 整除 100 作为 百位上的BCD
(A-百位上的值) 整除 10 作为 十位上的BCD
(A-百位上的值和十位上的值) 作为个们上的BDC.
int i = 100; // i 用来做被除数,初值"100".
int idx = 0; // idx 用来确定存储位置的偏移,初值"0".
while( i ) // 循环条件,被除数不为"0",则继续循环.
{
Result[idx] = A / i; // Result 第 idx 偏移位置保存 A 整除 i 的值.
A -= Result[idx]*i; // A 的值 减 Result 第 idx 偏移位置 * i 的值.
i/=10; // 将 i 的值除以"10"
idx++; // Result的偏移值 加"1".
}
以上的思想是
A 整除 100 作为 百位上的BCD
(A-百位上的值) 整除 10 作为 十位上的BCD
(A-百位上的值和十位上的值) 作为个们上的BDC.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Result equ 20h
org 0
ljmp Start
org 0100h
BinToBCD:
MOV R0, #Result ;目的地址.
MOV B, #10
DIV AB ;除以10
MOV @R0, B ;B中是余数,即个位数.
INC R0 ;修改地址.
MOV B, #10
XCH A, B
DIV AB ;再除以10
MOV @R0, B ;B中是余数,即十位数.
INC R0 ;修改地址.
MOV @R0, A ;存百位数.
ret
Start:
mov sp, #40h
mov a, #123
call BinToBCD
ljmp $
org 0
ljmp Start
org 0100h
BinToBCD:
MOV R0, #Result ;目的地址.
MOV B, #10
DIV AB ;除以10
MOV @R0, B ;B中是余数,即个位数.
INC R0 ;修改地址.
MOV B, #10
XCH A, B
DIV AB ;再除以10
MOV @R0, B ;B中是余数,即十位数.
INC R0 ;修改地址.
MOV @R0, A ;存百位数.
ret
Start:
mov sp, #40h
mov a, #123
call BinToBCD
ljmp $
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询