二进制转换成BCD码 实验报告.docx
- 文档编号:16626785
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:15
- 大小:313.36KB
二进制转换成BCD码 实验报告.docx
《二进制转换成BCD码 实验报告.docx》由会员分享,可在线阅读,更多相关《二进制转换成BCD码 实验报告.docx(15页珍藏版)》请在冰点文库上搜索。
二进制转换成BCD码实验报告
1、实验目的
(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、减法
B、除法
五、源程序代码
A、减法源程序
DATASEGMENT;数据段
RESULT_1DB0
RESULT_2DB0
RESULT_3DB0
RESULT_4DB0
RESULT_5DB0
DATAENDS
STACKSEGMENTSTACK;堆栈段
STADB64DUP(0);开辟100单元作为堆栈空间
STACK_TOPDB0
STACKENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX;设置数据段
MOVAX,STACK
MOVSS,AX;设置堆栈段
LEASP,STACK_TOP;设置栈顶指针
MOVAX,25468
MOVCL,0;计数器清零
NEXT1:
SUBAX,10000;减10000
JCOVER1;有借位说明不够减
INCCL;否则够减,计数器加1
JMPNEXT1;无条件跳转
OVER1:
ADDAX,10000;最后恢复不够减时AL的余数
MOVBX,AX
MOVRESULT_1,CL
ADDCL,30H
MOVAH,02
MOVDL,CL
INT21H
MOVCL,0
MOVAX,BX
NEXT2:
SUBAX,1000;减1000
JCOVER2;有借位说明不够减
INCCL;否则够减,计数器加1
JMPNEXT2;无条件跳转
OVER2:
ADDAX,1000;最后恢复不够减时AL的余数
MOVBX,AX
MOVRESULT_2,CL
ADDCL,30H
MOVAH,02
MOVDL,CL
INT21H
MOVCL,0
MOVAX,BX
NEXT3:
SUBAX,100;减100
JCOVER3;有借位说明不够减
INCCL;否则够减,计数器加1
JMPNEXT3;无条件跳转
OVER3:
ADDAX,100;最后恢复不够减时AL的余数
MOVBX,AX
MOVRESULT_3,CL
ADDCL,30H
MOVAH,02
MOVDL,CL
INT21H
MOVCL,0
MOVAX,BX
MOVCL,0;计数器清零
NEXT4:
SUBAL,10;减10
JCOVER4;有借位说明不够减
INCCL;否则够减,计数器加1
JMPNEXT4;无条件跳转
OVER4:
ADDAL,10;最后恢复不够减时AL的余数
MOVBL,AL
MOVRESULT_4,CL
ADDCL,30H
MOVAH,02
MOVDL,CL
INT21H
MOVCL,0
MOVAX,BX
MOVRESULT_5,AL
ADDAL,30H
MOVAH,02
MOVDL,AL
INT21H
MOVAX,4C00H;返回DOS(两句)
INT21H;
CODEENDS
ENDSTART;最后一行要按回车键
B、除法源程序
DATASEGMENT;数据段
RESULT_1DB1;结果1为低八位,初始量为’1’
RESULT_2DB1;结果1为低八位
RESULT_3DB1;结果1为低八位
RESULT_4DB1;结果1为低八位
RESULT_5DB1;结果1为低八位
DATAENDS;结束数据段
STACKSEGMENTSTACK;堆栈段
STADB64DUP(0);堆栈段初始化
STACK_TOPDB0;栈顶初始化
STACKENDS;结束堆栈段
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
;假定为指令
MOVAX,DATA;把具体DATA送至寄存器中
MOVDS,AX;设置数据段
MOVAX,STACK;把STACK送至寄存器中
MOVSS,AX;设置堆栈段
LEASP,STACK_TOP;设置栈顶指针
MOVAX,32345;赋予立即数32345给AX
MOVDX,0;余数清零
MOVCX,10000;赋予立即数10000给CX
DIVCX;除于CX中的立即数
MOVRESULT_1,AL;除以10000,得万位数
MOVAX,DX;将DX中的余数给AX
MOVDX,0;余数清零
MOVCX,1000;赋予立即数1000给CX
DIVCX;除以1000
MOVRESULT_2,AL;除以1000,得千位数
MOVAX,DX;将DX中的余数给AX
MOVDX,0;余数清零
MOVCL,100;赋予立即数100给CL
DIVCL;除以100;
MOVRESULT_3,AL;除以100,得百位数
MOVAL,AH;将AH中的余数给AL
MOVAH,0;余数清零
MOVCL,10;赋予立即数10给CL
DIVCL;除以10
MOVRESULT_4,AL;余数除以10,得十位数
MOVRESULT_5,AH;余数为个位数
MOVCX,05H;循环5次
MOVAH,02H;显示符
LEADI,RESULT_1;将结果1的偏移量给DI
LP:
MOVDL,BYTEPTR[DI];将[SI]中的字节内容给DL
ADDDL,30H;DL中的内容加30,显示数字
INT21H;DOSINT21功能调用
INCDI;每显示一个字符,DI加1
LOOPLP;LP循环
MOVAX,4C00H;返回DOS(两句)
INT21H
CODEENDS;代码段结束
ENDSTART;最后一行要按回车键
六、实验结果
6.1分别在DOS和Windows下编译、连接源程序生成可执行文件并调试,比较两个环境下生成的机器码的长度、寄存器内容、计算结果的异同。
A、减法
1、Windows下的调试结果
2、DOS下的调试结果
3、比较机器码的长度、寄存器内容、计算结果的异同
Windows
DOS
寄存器内容
CS
F400
1419
IP
0204
0000
SS
0711
1414
SP
003A
0042
BP
0000
0000
SI
0000
0000
DI
0005
0000
DS
0710
1403
ES
0700
1403
计算结果
17426
17426
B、除法
1、Windows下的调试结果
2、DOS下的调试结果
3、比较机器码的长度、寄存器内容、计算结果的异同
Windows
DOS
寄存器内容
CS
F400
1419
IP
0204
0000
SS
0711
1414
SP
003A
0042
BP
0000
0000
SI
0000
0000
DI
0005
0000
DS
0710
1403
ES
0700
1403
计算结果
17426
17426
6.2、如何观察转换过程中标志寄存器中各标志位的结果?
如何观察转换结果的变化?
试改变被转换数值,对结果与编制为的变化加以说明和解释。
A、减法
4412H改成3012H
1、DOS
2、Windows
B、除法
4412H改成3012H
1、DOS
2、Windows
C、标志寄存器
NV
无溢出
UP
串操作指令为自动增量指令
EI
允许中断请求
PL
符号为正
NZ
运算结果不为零
NA
辅助进位无进位
PO
1的个数为奇数
NC
无进位
7、实验总结与体会
本次实验,是运用减法和除法来进行二进制转换成BCD码。
在实验前应做好充分的预习,画好流程图并编好程序,可以的话还是在实验前运行一下,若有问题可及时问老师。
而在编写程序中,应及时学会运用循环指令,注意算法,且要注意添加显示符,否则无法显示你的运算结果。
在本次试验中,因为没有很注重预习,导致实验时程序出现了差错。
课后进行了补充和修改,在DOS和EMU8086环境下能较为顺利的完成了实验内容。
8、思考题
如何让你的程序自适应地处理高位为‘0’时不输出或输出空格呢?
分配一个标志,在该标志不为零时,输出值是零就不输出或输出空格,标志为零时无论何值都要输出。
如果是从高位开始输出,那么只要先置标志,在输出一个非零数字或者当做到个位数的时候,把这个标志清零。
。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二进制转换成BCD码 实验报告 二进制 转换 BCD 实验 报告