二进制数到BCD码的转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

得分教师签名批改日期课程编号1801770001

深圳大学实验报告课程名称:微机原理及应用

实验名称:二进制数到BCD码的转换

学院:物理科学与技术学院

指导教师:

报告人:组号:

学号实验地点K302

实验时间:2014 年10 月22 日

提交时间:2014.11.12

一、实验要求:

将AX中的一个二进制数(对应的十进制数范围是0-65535),转换成压缩性BCD码表示的十进制,并从屏幕输出转换结果。要求用减法实现,并比较与除法方法进行运行速度比较。

二、实验目的:

(1)进一步熟练掌握8086汇编语言编译调试工具和环境的操作;

(2)掌握完整8086汇编的程序设计编写方法;

(3)掌握简单的数值码制转换方法;

(4)掌握键盘输出的DOS功能调用方法。

三、实验说明:

计算机中的数值有各种表达方式,这是计算机的基础。掌握各种数制、码制之间的转换是一种基本功;利用DOS功能调用实现在屏幕上显示字符或数字的方法是本课程的基本要求之一。

四、除法方法:

1、算法说明:三位数先除以100,得到的商就是百分位的结果;将之前一次的余数除以10,得到的商就是十分位的结果;剩下来的余数就是个位的结果。

2、程序流程图:

图1 除法程序流程图

3、程序:

DATA SEGMENT ; 数据段

RESULT_1 DB 1

RESULT_2 DB 1

RESULT_3 DB 1

DATA ENDS

STACK SEGMENT STACK ; 堆栈段

STA DB 64 DUP(0)

STACK_TOP DB 0

STACK ENDS

CODE SEGMENT ; 代码段

ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK

START:

; 程序开头必须要有的五条指令

MOV AX, DATA

MOV DS, AX ; 设置数据段

MOV AX, STACK

MOV SS, AX ; 设置堆栈段

LEA SP, STACK_TOP ; 设置栈顶指针

;---------------------------------------

; 程序的中间部分

MOV AX, 467

MOV CL, 100

DIV CL

MOV RESULT_1, AL ; 除以 100, 得百位数

MOV AL, AH

MOV AH, 0

MOV CL, 10

DIV CL

MOV RESULT_2, AL ; 余数除以 10, 得十位数

MOV RESULT_3, AH ; 余数为个位数

;------------------------------------------ ; 程序结束必须要有的两条指令

MOV AX, 4C00H ;

INT 21H ;

;------------------------------------------ CODE ENDS

END START ; 最后一行要按回车键

五、减法方法

1、算法说明:三位数先循环减100,直到不够减了,做减法的次数就是百分位的结果;将不够减之前一次的余数恢复,再循环减去10,直到不够减了,做减法的次数就是十分位的结果;最后恢复的正余数就是个位的结果。

2、程序流程图

开始

把二进制数送到AX

计数器CL,标志位清零

AX减去100,差放到AX

N

是否借位CL加1给CL

Y

AL加100,恢复不够减时余数

从CL存储百位数

计数器CL,标志位清零

AX减去10,差放到AX

N

是否借位CL加1给CL

Y

AL加10,恢复不够减时余数

从CL存储十位数

从AL存储个位数

结束

3、程序:

DATA SEGMENT ; 数据段

RESULT_1 DB 1

RESULT_2 DB 1

RESULT_3 DB 1

DATA ENDS

STACK SEGMENT STACK ; 堆栈段

STA DB 64 DUP(0)

STACK_TOP DB 0

STACK ENDS

CODE SEGMENT ; 代码段

ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK START:

; 程序开头必须要有的五条指令

MOV AX, DATA

MOV DS, AX ; 设置数据段

MOV AX, STACK

MOV SS, AX ; 设置堆栈段

LEA SP, STACK_TOP ; 设置栈顶指针

;---------------------------------------

; 程序的中间部分

MOV AX,467

MOV CL, 0; 计数器清零

CLC ;

NEXT1: SUB AX, 100; 减100

JC OVER1; 有借位说明不够减

INC CL ; 否则够减,计数器加1

JMP NEXT1; 无条件跳转

OVER1: ADD AL,100; 最后恢复不够减时AL的余数

MOV RESULT_1,CL

MOV CL, 0; 计数器清零

CLC ;

NEXT2: SUB AL, 10; 减10

JC OVER2; 有借位说明不够减

INC CL ; 否则够减,计数器加1

JMP NEXT2; 无条件跳转

OVER2: ADD AL,10; 最后恢复不够减时AL的余数

相关文档
最新文档