试将8位二进制数据转换为十进制 (BCD码)数据,并改写为子程序,输入30H,输出31H。写出汇编语言代码
时间: 2023-05-29 07:02:05 浏览: 114
8位二进制数据11110011转换为BCD码数据为 243
汇编语言代码:
```assembly
; 子程序:二进制转BCD码
; 输入:AL为8位二进制数
; 输出:AH为十位的BCD码,AL为个位的BCD码
binaryToBCD:
push ax ; 保存原始数据
mov ah, 0 ; 十位清零
mov al, 10 ; 除数设为10
div al ; 计算出十位数
add ah, 30H ; 添上“0”字符
mov al, 0 ; 单独计算个位数,将商清零
mov bl, 10 ; 除数设为10
div bl ; 计算出个位数
add al, 30H ; 添上“0”字符
pop ax ; 恢复原始数据
ret ; 返回主程序
main:
mov al, 11110011B
call binaryToBCD ; 调用子程序
; AH为2,AL为4
```
相关问题
单片机汇编语言代码,将8位二进制数据转换为十进制 (BCD码)数据,并改写为子程序,输入30H,输出31H
org 0
mov al, 30H ;将待转换的二进制数放入AL寄存器中
call BINtoBCD ;调用子程序进行转换
mov dl, ah ;将转换后的高位放入DL寄存器中
mov dh, al ;将转换后的低位放入DH寄存器中
add dl, 30H ;将高位转换为ASCII码,存放在DL寄存器中
add dh, 30H ;将低位转换为ASCII码,存放在DH寄存器中
mov ah, 02H ;调用DOS中断,显示转换后的数字
mov dl, dh
int 21H
mov dl, dl
mov ah, 02H
mov dl, dh
int 21H
;将8位二进制数据转换为BCD码的子程序
BINtoBCD:
push ax ;将AX寄存器中的数据保存在栈中,防止程序执行过程中被修改
push bx ;将BX寄存器中的数据保存在栈中,防止程序执行过程中被修改
and al, 0FH ;将AL寄存器中的高4位清零
mov bl, al ;将AL寄存器中的低4位放入BL寄存器中
shr al, 1 ;将AL寄存器中的数据右移一位
shr al, 1
shr al, 1
shr al, 1
add al, bl ;将BL寄存器中的数据加到AL寄存器中
daa ;调整AL寄存器中的数据,逢10进1
mov ah, al ;将转换后的低位放入AH寄存器中
and al, 0FH ;将AL寄存器中的高4位清零
mov bl, al ;将AL寄存器中的低4位放入BL寄存器中
shr al, 1 ;将AL寄存器中的数据右移一位
shr al, 1
shr al, 1
shr al, 1
add al, bl ;将BL寄存器中的数据加到AL寄存器中
daa ;调整AL寄存器中的数据,逢10进1
pop bx ;将BX寄存器中的数据还原回去
pop ax ;将AX寄存器中的数据还原回去
ret ;返回主程序
c语言将十进制数156拆为3个bcd码,并存入30h开始的三个单元
以下是实现代码:
```c
#include <stdio.h>
int main()
{
int num = 156;
int bcd1, bcd2, bcd3;
// 拆分BCD码
bcd1 = num / 100;
bcd2 = (num % 100) / 10;
bcd3 = num % 10;
// 转换为BCD码
bcd1 = (bcd1 / 10) << 4 | (bcd1 % 10);
bcd2 = (bcd2 / 10) << 4 | (bcd2 % 10);
bcd3 = (bcd3 / 10) << 4 | (bcd3 % 10);
// 存储到内存
unsigned char* p = (unsigned char*)0x30;
*p++ = bcd1;
*p++ = bcd2;
*p++ = bcd3;
return 0;
}
```
首先,将要拆分的十进制数156赋值给变量num。
然后,通过整除和取余操作,将num拆分成三个数字bcd1、bcd2和bcd3,分别代表百位、十位和个位的数字。
接下来,将每个数字转换成BCD码。这里采用的方法是:先将数字的十位和个位分别除以10,得到两个单独的数字,然后将它们分别左移4位,再将它们相加,得到BCD码。
最后,将三个BCD码存储到内存地址0x30开始的三个单元中。注意,在存储之前,需要先将指针p指向0x30,然后每存储一个BCD码,p需要递增1。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)