更改十六进制转BCD实验。实现二进制转十进制
时间: 2023-08-07 13:07:49 浏览: 82
好的,下面是针对您的实验要求的指导:
1. 更改十六进制转BCD实验:
在emu8086软件中进行十六进制转BCD的实验,可以参考以下步骤:
- 首先打开emu8086软件,创建一个新的程序文件
- 在程序中定义需要转换的十六进制数值
- 将十六进制数值转换成二进制数值
- 将二进制数值分成4位一组,分别转换成BCD码
- 将BCD码合并起来,得到最终的BCD码
以下是一个简单的十六进制转BCD的示例程序,供您参考:
```
org 100h
mov al, 0A7h ; 设置需要转换的十六进制数值
mov bl, 10 ; 设置除数,用于将二进制数值分组
mov cl, 4 ; 设置每组的位数,即BCD码的位数
mov ah, 0 ; 清空寄存器
mov bh, 0 ; 清空寄存器
convert:
xor ah, ah ; 清空寄存器
div bl ; 将al除以bl,商存入ah,余数存入al
or ah, 30h ; 将ah转换为ASCII码
cmp ah, 39h ; 判断是否大于9
jbe skip ; 如果不大于9,跳过下一行
add ah, 7h ; 如果大于9,加上7,得到对应的字母
skip:
push ax ; 将ah和al压入栈中
inc bh ; 增加计数器
cmp bh, cl ; 判断是否已经达到每组的位数
jne convert ; 如果没有达到,继续转换
pop ax ; 弹出栈中的数据,得到最后一个BCD码
mov dl, al ; 将最后一个BCD码存入dl
pop ax ; 弹出栈中的数据,得到前一个BCD码
mov dh, al ; 将前一个BCD码存入dh
mov ah, 2 ; 设置输出功能号
mov dl, dh ; 输出高位BCD码
int 21h ; 调用21h中断
mov dl, dl ; 空一格
int 21h ; 调用21h中断
mov ah, 2 ; 设置输出功能号
mov dl, dl ; 空一格
int 21h ; 调用21h中断
mov dl, dl ; 空一格
int 21h ; 调用21h中断
mov ah, 2 ; 设置输出功能号
mov dl, dl ; 空一格
int 21h ; 调用21h中断
mov dl, dl ; 空一格
int 21h ; 调用21h中断
mov ah, 2 ; 设置输出功能号
mov dl, dl ; 空一格
int 21h ; 调用21h中断
mov dl, dl ; 空一格
int 21h ; 调用21h中断
mov ah, 4ch ; 设置退出功能号
int 21h ; 调用21h中断
```
2. 实现二进制转十进制:
在emu8086软件中实现二进制转十进制的实验,可以参考以下步骤:
- 首先打开emu8086软件,创建一个新的程序文件
- 在程序中定义需要转换的二进制数值
- 设定计数器,用于计算二进制数值的十进制值
- 用除法算法将二进制数值转换成十进制数值
以下是一个简单的二进制转十进制的示例程序,供您参考:
```
org 100h
mov al, 1010110b ; 设置需要转换的二进制数值
mov bl, 10 ; 设置除数,用于将二进制数值转换成十进制数值
mov cl, 0 ; 清空计数器
mov dl, 0 ; 清空寄存器
convert:
xor ah, ah ; 清空寄存器
div bl ; 将al除以bl,商存入ah,余数存入al
mov bh, ah ; 将ah存入bh
shl bh, cl ; 将bh左移cl位
or dl, bh ; 将dl和bh进行或运算
inc cl ; 增加计数器
cmp al, 0 ; 判断是否已经将所有位数转换完
jne convert ; 如果没有转换完,继续转换
mov ah, 0 ; 设置输出功能号
mov al, dl ; 将十进制数值存入al
add al, 30h ; 将al转换为ASCII码
mov dl, al ; 将al存入dl
mov ah, 2 ; 设置输出功能号
int 21h ; 调用21h中断
mov ah, 4ch ; 设置退出功能号
int 21h ; 调用21h中断
```
希望这些内容能够对您有所帮助。如有任何问题,请随时联系我。