实验二二进制转换为BCD码

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

得分教师签名批改日期深圳大学实验报告课程名称:微机原理及应用
实验名称:二进制到BCD转换
学院:物理科学与技术学院
组号:指导教师:李雄军
报告人:学号:
实验地点:科技楼302 实验时间:
实验报告提交时间:
教务处制
1、实验要求:
将AX中的一个二进制数(对应的十进制数范围是0-65535),转换成压缩性BCD码表示的十进制,并从屏幕输出转换结果。

要求用减法实现,并比较与除法方法进行运行速度比较。

2、实验目的:
(1)进一步熟练掌握8086汇编语言编译调试工具和环境的操作;
(2)掌握完整8086汇编的程序设计编写方法;
(3)掌握简单的数值码制转换方法;
(4)掌握键盘输出的DOS功能调用方法。

3、实验说明:
计算机中的数值有各种表达方式,这是计算机的基础。

掌握各种数制、码制之间的转换是一种基本功;利用DOS功能调用实现在屏幕上显示字符或数字的方法是本课程的基本要求之一。

以下是五位数的除法和减法的转换方法程序框图:
除法减法
五、实验源程序:
除法实现:
ATA SEGMENT ; 数据段
RESULT_1 DB 0
RESULT_2 DB 0
RESULT_3 DB 0
RESULT_4 DB 0
RESULT_5 DB 0
DATA ENDS
STACK SEGMENT STACK ; 堆栈段
STA DB 64 DUP(0);开辟100单元作为堆栈空间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, 6234H ; 被转换的数先放入AX中
MOV CX, 10000
DIV CX
MOV RESULT_1, AL ; 除以 100, 得百位数
MOV AX, DX
MOV DX, 0
MOV CX,1000
DIV CX
MOV RESULT_2, AL
MOV AX, DX
MOV DX, 0
MOV CX,100
DIV CX ; 余数除以 10, 得十位数,存入RESULT_2 MOV RESULT_3, AL
MOV AX, DX
MOV DL, 0
MOV CL,10
DIV CL
MOV RESULT_4, AL
MOV RESULT_5, AH ; 余数为个位数,存入RESULT_3 MOV AX,4C00H ; 返回DOS(两句)
INT 21H ;
CODE ENDS
END START ; 最后一行要按回车键
减法实现:
; multi-segment executable file template.
DATA SEGMENT ; 数据段
RESULT_1 DB 1
RESULT_2 DB 1
RESULT_3 DB 1
RESULT_4 DB 1
RESULT_5 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, 12345
MOV CL, 0; 计数器清零
NEXT1: SUB AX, 10000; 减5
JC OVER1; 有借位说明不够减
INC CL ; 否则够减,计数器加1
JMP NEXT1; 无条件跳转
OVER1: ADD AX,10000; 最后恢复不够减时AL的余数
MOV RESULT_1,CL
MOV CL, 0
NEXT2: SUB AX,1000
JC OVER2
INC CL
JMP NEXT2
OVER2: ADD AX,1000
MOV RESULT_2,CL
MOV CL, 0
NEXT3: SUB AX,100
JC OVER3
INC CL
JMP NEXT3
OVER3: ADD AX,100
MOV RESULT_3,CL
MOV CL, 0
NEXT4: SUB AX,10
JC OVER4
INC CL
JMP NEXT4
OVER4: ADD AX,10
MOV RESULT_4,CL
MOV RESULT_5,AL
MOV AL, RESULT_1 ; 送显示功能号到AH MOV AH, 02
ADD AL,30H
MOV DL, AL ; 被显示字符的ASCII码'1'送DL
INT 21H ; DOS INT 21 功能调用
MOV AL, RESULT_2 ; 送显示功能号到AH MOV AH, 02
ADD AL,30H
MOV DL, AL ; 被显示字符的ASCII码'1'送DL
INT 21H ; DOS INT 21 功能调用
MOV AL, RESULT_3 ; 送显示功能号到AH MOV AH, 02
ADD AL,30H
MOV DL, AL ; 被显示字符的ASCII码'1'送DL
INT 21H ; DOS INT 21 功能调用
MOV AL, RESULT_4 ; 送显示功能号到AH MOV AH, 02
ADD AL,30H
MOV DL, AL ; 被显示字符的ASCII码'1'送DL
INT 21H ; DOS INT 21 功能调用
MOV AL, RESULT_5 ; 送显示功能号到AH MOV AH, 02
ADD AL,30H
MOV DL, AL ; 被显示字符的ASCII码'1'送DL
INT 21H ; DOS INT 21 功能调用
;------------------------------------------ ; 程序结束必须要有的两条指令
MOV AX, 4C00H ;
INT 21H ;
;------------------------------------------ CODE ENDS
END START ; 最后一行要按回车键
六、实验结果
1)1、Windows下:编译、连接源程序生成可执行文件并调试,生成的机器码的长度、寄存器内容、计算结果如下
除法:
减法:
2、DOS环境下:编译、连接源程序生成可执行文件并调试,生成的机器码的长度、寄存器
内容、计算结果如下
1)除法:
2)减法
可见,分别在DOS和Windows下编译、连接源程序生成可执行文件并调试,两个环境下生成的机器码的长度、寄存器内容、计算结果的是相同的。

2)如何观察转换过程中标志寄存器中各标志位的结果?如何观察转换结果的变化?试改变被转换数值,对结果与编制为的变化加以说明和解释。

答:可通过单步执行,观察标志位的变化,见下图:
EMU8086下标志位
七、实验总结与体会
实验课时还有很多不明白的地方,但是在课下,在同学的帮助下,才熟悉了两个调试环境,发现只有自己亲自动手才能体会到那种掌握的快乐,通过老师课堂的讲解和课下学习学,对程序设计也有了初步的了解和掌了一些简单的数值转换算法。

但是对代码仍然感到非常的吃力
八、思考题:
如何让你的程序自适应地处理高位为‘0’时不输出或输出空格呢?
答:分配一个标志,在该标志不为零时,输出值是零就不输出或输出空格,标志为零时无论何值都要输出。

如果是从高位开始输出,那么只要先置标志,在输出一个非零数字或者当做到个位数的时候,把这个标志清零。

指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

相关文档
最新文档