得分 教师签名 批改日期
深 圳 大 学 实 验 报 告
课程名称: 微机原理及应用 实验名称: 二进制到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 功能调用