二进制转换成BCD码 实验报告

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

一、实验目的

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

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

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

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

二、实验要求:

将AX中的一个二进制数(对应的十进制数范围是0-65535),转换成压缩性BCD

码表示的十进制,并从屏幕输出转换结果。要求用减法实现,并比较与除法方法进行运行速度比较。

三、实验及报告要求:

3.1、简要说明算法,并画出正确的程序流程图;

3.2、给出完整正确的源程序代码,要求给每一句伪指令或指令加上注释;

3.3、分别在DOS和Windows下编译、连接源程序生成可执行文件并调试,比较两个环境下生成的机器码的长度、寄存器内容、计算结果的异同。

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

3.5、写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。

3.6、实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法和微机原理学习方法作出总结。

四、程序流程图

减法。即五位数先循环减10000,直到不够减了,做减法的次数就是万分位的结果;将不够减之前一次的余数恢复,再循环减去1000,直到不够减了,做减法的次数就是千分位的结果;以此类推,最后恢复的正余数就是个位的结果.

除法。即五位数先除以10000,得到的商存放万位数的变量上;再将余数除以1000,得到的商存放千位数的变量上;之后将余数除以100,得到的商存放百分位的变量上;以此类推,最后的余数存放在个位的变量上。

A 、减法

结束 将余数保存到个位数 恢复正余数 恢复余数

计数器清零 Y 将数减去100 计数值加1 将计数器的值保存到百分位 够减否 N 输入二进制数 Y

将数减去10000

计数值加1 将计数器的值保存到万分位

恢复余数 够减否 计数器清零零 N

计数器清零 Y 将数减去1000 计数值加1 将计数器的值保存到千分位 恢复余数

够减否 计数器清零 N Y 将数减去10 计数值加1 将计数器的值保存到十分位 够减否 N

B、除法

五、源程序代码

A、减法源程序

DATA 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,25468

MOV CL, 0; 计数器清零

NEXT1: SUB AX, 10000; 减10000

JC OVER1; 有借位说明不够减

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

JMP NEXT1; 无条件跳转

OVER1: ADD AX,10000; 最后恢复不够减时AL的余数MOV BX,AX

MOV RESULT_1,CL

ADD CL,30H

MOV AH,02

MOV DL,CL

INT 21H

MOV CL,0

MOV AX,BX

NEXT2: SUB AX, 1000; 减1000

JC OVER2; 有借位说明不够减

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

JMP NEXT2; 无条件跳转

OVER2: ADD AX,1000; 最后恢复不够减时AL的余数MOV BX,AX

MOV RESULT_2,CL

ADD CL,30H

MOV AH,02

MOV DL,CL

INT 21H

MOV CL,0

MOV AX,BX

NEXT3: SUB AX, 100; 减100

JC OVER3 ; 有借位说明不够减

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

JMP NEXT3 ; 无条件跳转

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

MOV BX,AX

MOV RESULT_3,CL

ADD CL,30H

MOV AH,02

MOV DL,CL

INT 21H

MOV CL,0

MOV AX,BX

MOV CL, 0; 计数器清零

NEXT4: SUB AL, 10; 减10

JC OVER4; 有借位说明不够减

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

JMP NEXT4; 无条件跳转

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

MOV BL,AL

MOV RESULT_4,CL

ADD CL,30H

MOV AH,02

MOV DL,CL

INT 21H

MOV CL,0

MOV AX,BX

MOV RESULT_5,AL

ADD AL,30H

MOV AH,02

MOV DL,AL

INT 21H

MOV AX,4C00H ; 返回DOS(两句)

INT 21H ;

CODE ENDS

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

B、除法源程序

DATA SEGMENT ; 数据段

RESULT_1 DB 1 ; 结果1为低八位,初始量为’1’RESULT_2 DB 1 ; 结果1为低八位

RESULT_3 DB 1 ; 结果1为低八位

RESULT_4 DB 1 ; 结果1为低八位

RESULT_5 DB 1 ; 结果1为低八位

DATA ENDS ; 结束数据段

STACK SEGMENT STACK ; 堆栈段

STA DB 64 DUP(0) ;堆栈段初始化

STACK_TOP DB 0 ;栈顶初始化

STACK ENDS ;结束堆栈段

相关文档
最新文档