多字节十进制加法程序设计
多位十进制数加法器设计.
深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间:2015-10-19实验报告提交时间:2015-11-02教务处制五、程序说明(预习)七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:ADD2.ASM ADD1.ASM2.可执行程序路径及文件名:八、上机调试情况说明EMU8086:一:没有键盘录入1.结果显示如下:2.程序运行时的各段地址:3.两个子程序IP入口:4.改变两个加数数值5.子程序格式及其调用方法和宏汇编区别子程序格式:子程序名称PROC NEAR ; 子程序定义; …子程序内容RET ;子程序返回子程序名称ENDP ;子程序结束调用格式:CALL 子程序名称注意事项:1、子程序不能直接传递参数,需要自行定义变量。
2、注意保护现场和恢复现场。
宏汇编与子程序的区别:1、宏汇编有宏展开,子程序没有2、宏汇编可以传递参数。
二:键盘录入DOS:例如:250+250=500例如:62142+63123=125265九、实验结果与分析结果如下:十、实验总结(必备部分,评分重要依据之一)本次实验实则是对实验二的加强巩固基础上,进行更加友好的人机交互设计;通过本次实验不仅在程序中首先把两个加数固定,在实验二的基础上扩展位数,考虑到最高位进位的情况,并最终得出正确结果;后来又通过键盘录入两个加数,增加了人机交互的设计,如此一来,更加加深了对寄存器的使用,汇编语言宏定义,子程序调用以及DOS功能调用的学习。
同时,通过本次实验的学习,更加熟练了EMU8086工具的使用,也把理论课上学习到的汇编操作指令实际操作,对汇编语言的风格加深认识。
MOV DL,BLINT 21HCRLFJMP BEGINERROR:CRLFMOV AH,09H ;显示输入错误LEA DX,STRING3INT 21HCRLFJMP BEGINEXIT:CRLFMOV AH,09H ;显示成功退出LEA DX,STRING4INT 21HMOV AH,4CHINT 21HCODE ENDSEND START(2)请问你的程序能否处理加数和被加数都介于0~65535范围但计算结果超出该范围的情况?如何改进?可以,如图:主要考虑到最高位是否进位,可以设置一个进位变量加以判断。
多字节十进制加法
SI←1002 CX←3
AL← [SI] BL← [SI+3] AL←AL+BL+CF 十进制调整 [SI+7] ← AL
SI←SI-1
计数完成 [SI]←[SI]+00+CF
结束
• CODE SEGMENT
• ASSUME CS:CODE
•
ORG 0100H
• START:
• …………………………………
• CODE • END
ENDS START
程序调试及执行要求
• E命令修ห้องสมุดไป่ตู้3000:1000~3000:1005 • R命令修改DS=3000H • 以十进制调整指令(DAA )为断点,分段执行程序 • 检查寄存器 • G 断点地址
• T 单步执行(调整) • 检查AL和标志位 • 重复3次循环,检查中间结果 • G 将程序执行完 • 检查最后结果 D 1000 1010
实验三 多字节十进制加法
实验目的
• 掌握循环程序的设计 • 掌握标志位判断 • 带进位的加/减指令 • 十进制调整指令
实验内容
• 编程完成3字节10进制加法 • 程序放在0100H开始的单元 • 加数被加数和放在存储器中格式如下
最低一个字节相加
• CF初始为0
第二个字节相加
调整效果
程序流程图
[si+7],al si next byte ptr[si+7],00h 3 ends start
• code
• assume
• start:
•
mov
•
clc
•
mov
•
mov
多位十进制数加法实验报告
多位十进制数加法实验报告实验一两个多位十进制数相加的实验实验一两个多位十进制数相加的实验一、实验目的1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
二、实验内容将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序框图四、程序清单CRLF MACROMOV DL,0DHMOV AH,02HINT21HMOV DL,0AHMOV AH,02HINT21HENDMDATA SEGMENTDATA1DB 33H,39H,31H,37H,34HDATA2DB 36H,35H,30H,38H,32HDATA ENDSSTACKSEGMENTSTA DB20 DUP(?)TOP EQU LENGTH STASTACKENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA2MOV BX,05CALL DISPLCRLFMOV SI,OFFSET DATA1MOV BX,05CALL DISPLCRLFMOV DI,OFFSET DATA2CALL ADDAMOV SI,OFFSET DATA1MOV BX,05CALL DISPLCRLFMOV AX,4C00HINT21HDISPLPROC NEARDS1: MOV AH,02MOV DL,[SI+BX-1]INT21HDEC BXJNZ DS1RETDISPLENDPADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05AD1: SUBBYTE PTR [SI+BX-1],30HSUBBYTE PTR [DI+BX-1],30HDECBXJNZAD1MOV SI,DXMOV DI,BPMOV CX,05CLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINCSIINCDILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05AD3: ADDBYTE PTR [SI+BX-1],30H ADDBYTE PTR [DI+BX-1],30HDECBXJNZ AD3RETADDA ENDPCODE ENDSEND START五、实验要求1.读懂源程序,写出源程序注释。
多位十进制数加法器设计.
深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间:2015-10-19实验报告提交时间:2015-11-02教务处制五、程序说明(预习)七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:ADD2.ASM ADD1.ASM2.可执行程序路径及文件名:八、上机调试情况说明EMU8086:一:没有键盘录入1.结果显示如下:2.程序运行时的各段地址:3.两个子程序IP入口:4.改变两个加数数值5.子程序格式及其调用方法和宏汇编区别子程序格式:子程序名称PROC NEAR ; 子程序定义; …子程序内容RET ;子程序返回子程序名称ENDP ;子程序结束调用格式:CALL 子程序名称注意事项:1、子程序不能直接传递参数,需要自行定义变量。
2、注意保护现场和恢复现场。
宏汇编与子程序的区别:1、宏汇编有宏展开,子程序没有2、宏汇编可以传递参数。
二:键盘录入DOS:例如:250+250=500例如:62142+63123=125265九、实验结果与分析结果如下:十、实验总结(必备部分,评分重要依据之一)本次实验实则是对实验二的加强巩固基础上,进行更加友好的人机交互设计;通过本次实验不仅在程序中首先把两个加数固定,在实验二的基础上扩展位数,考虑到最高位进位的情况,并最终得出正确结果;后来又通过键盘录入两个加数,增加了人机交互的设计,如此一来,更加加深了对寄存器的使用,汇编语言宏定义,子程序调用以及DOS功能调用的学习。
同时,通过本次实验的学习,更加熟练了EMU8086工具的使用,也把理论课上学习到的汇编操作指令实际操作,对汇编语言的风格加深认识。
MOV DL,BLINT 21HCRLFJMP BEGINERROR:CRLFMOV AH,09H ;显示输入错误LEA DX,STRING3INT 21HCRLFJMP BEGINEXIT:CRLFMOV AH,09H ;显示成功退出LEA DX,STRING4INT 21HMOV AH,4CHINT 21HCODE ENDSEND START(2)请问你的程序能否处理加数和被加数都介于0~65535范围但计算结果超出该范围的情况?如何改进?可以,如图:主要考虑到最高位是否进位,可以设置一个进位变量加以判断。
实验二无符号数多字节十进制数加法实验
实验二无符号数多字节十进制数加法实验一、实验目的1.进一步掌握51系列单片机的仿真调试软件伟福V2.50软件模拟器的使用方法。
2.进一步练习程序的录入修改编译方法。
3.进一步练习程序的调试方法。
4.对程序进行仿真运行。
二、实验设备1.PC机(WINDOWS操作系统)。
2.HF-MC01实验实训开发综合装置。
3.伟福6000软件模拟器。
三、实验内容1.用汇编语言编写4字节无符号十进制数加法程序,被加数36101985放入(43H)--(40H)单元中。
加数12663459放入(53H)--(50H)单元。
2.编写主程序,分别用R0和R1作数区指针,R0指向被加数,并兼作"和"的指针。
R1指向加数,字节数存放到R2中作计数初值。
3.编写加法子程序,子程序适用于n字节的加法,只要在主程序中改变R2的初值即可。
四、实验步骤1.编写源程序按实验内容要求编写源程序(可参考实程序SY2.ASM)。
2.录入源程序录入步骤为:运行WAVE- 文件- 新建文件-录入程序- 保存-SY2.ASM(或关闭窗口- SY2.ASM- 保存)(注意:保存文件时必须加上扩展名.ASM)。
3.对编写的文件(SY2.ASM)进行编译编译步骤为:项目- 全部编译此时,系统将弹出‘信息窗口’;若编译完成,将显示生成的两个文件SY2.HEX和SY2.BIN,关闭‘信息窗口’。
若编译有错误,则在‘信息窗口’中出现错误提示;修改后再行编译。
4.执行及调试程序a. 点击执行- 复位:使程序执行指针指向第一条指令(CPU窗口指向0000H)。
b.为执行加法计算,进行仿真调试;运行程序前要分别把被加数(36101985)写入(43H)(最高位), (42H),(41H), (40H)(最低位)单元,加数(12663459)写入(53H)(最高位),(52H),(51H),(50H)(最低位)单元中。
c.装入的方法步骤:点击窗口- 数据窗口- DATA: 可以观看片内RAM 00H 到 FFH 中的内容。
十进制数的算术运算程序
INC
SI
INC
DI;准备高位相加
LOOP BCDADD1
MOV AL,0 ADC AL,0 MOV [DI],AL ;保存最高位的结果
POP DI POP CX POP AX RET BCDADD ENDP
;恢复现场
<>
1.2 十进制数的减法运算程序
转换原理:
减法运算可以通过求补码的形式转换为加法运算。求N位十BCDQB1: MOV AL,99H
SUB AL,[DI]
MOV [DI],AL ;保存结果
INC
DI
;准备高位求补
LOOP BCDQB1 ;X的十进制补码=99┅9A-X
POP
DI
POP
CX
POP
AX
RET
BCDQB ENDP
<>
汇编语言程序设计
可见,若能够求出减数的十进制补码,则可将减法运算变为加法运算。而一个 十进制数的补码,可由相应位数的9与该数相减,结果最后+1即可求得。最后+1 运算也可直接使个位为A(9┅9+1=9┅A)直接减去减数实现。
<>
运算程序
例9-4:编写一段子程序,实现两个压缩BCD码十进制数的减法。 设十进制的被减数与减数存放于SI、DI指示的存储器中,CX表示十进制数的位 数,结果存储于DI指示的连续存储空间中。子程序如下: ;程序功能:将两个十进制数(压缩BCD码表示)相减。 ;入口参数:CX存放十进制数的位数,SI指向被减数的地址指针,DI指向减数 的地址指针。
<>
运算程序
例9-3:编写一段子程序,实现两个压缩BCD码十进制数的加法。 设十进制的被加数与加数存放于SI、DI指示的存储器中,CX表示十进制数的位 数,结果存储于DI指示的连续存储空间中。子程序如下: ;程序功能:将两个十进制数(压缩BCD码表示)相加。 ;入口参数:CX存放十进制数的位数,SI指向被加数的地址指针,DI指向加数 的地址指针。
十进制加减法数字电路课程设计报告
设计名称:设计一个一位十进制加减法器 设计内容:1、0-9十个字符和“+”“-”分别对应一个按键,用于数据输入。
2、用一个开关控制加减法器的开关状态。
3、要求在数码显示管上显示结果。
设计目的与要求:1、学习数字逻辑等电路设计方法,熟知加减法器、编码器、译码显示的工作原理及特点;2、培养勤奋认真、分析故障和解决问题的能力。
设计环境或器材、原理与说明:环境:利用多功能虚拟软件Multism8进行电路的制作、调试,并生成文件。
器材:74LS283或者4008, 4个异或门(一片74LS86)(减法);74LS08,3输入或门(加法)设计原理:图1分析:如图1所示,第一步置入两个四位二进制数(要求置入的数小于1010),如(1001)2和(0111)2,同时在两个七段译码显示器上显示出对应的十进制数9和7;第二步通过开关选择运算方式加或者减;第三步,若选择加运算方式,所置数送入加法运算电路进行运算,同理若选择减运算方式,则所置数送入减法运算电路运算;第四步,前面所得结果通过另外两个七段译码器显示。
设计过程(步骤)或程序代码: 实验电路:1:减法电路的实现:(1):原理:如图1所示(如下),该电路功能为计算A-B 。
若n 位二进制原码为N 原,则与它相对应的补码为N 补=2n -N 原,补码与反码的关系式为N 补=N 反+1,A-B=A+B补-2n=A+B反+1-2n(2):因为B○+1= B非,B○+0=B,所以通过异或门74LS86对输入的数B求其反码,并将进位输入端接逻辑1以实现加1,由此求得B的补码。
加法器相加的结果为:A+B反+1,(3):由于2n=24=(10000)2,相加结果与相2n减只能由加法器进位输出信号完成。
当进位输出信号为1时,它与2n的差为0;当进位输出信号为0时,它与2n差值为1,同时还要发出借位信号。
因为设计要求被减数大于或等于减数,所以所得的差值就是A-B差的原码,借位信号为0。
汇编语言课程设计-十进制加减法
目录课程设计任务书 (2)1 问题描述 (3)2 前期分析 (3)3 课程设计 (3)3.1 总体设计 (3)3.2 模块设计 (4)3.2.1 求和模块 (4)3.2.2 输入十进制数模块 (5)3.2.3 存储器清零模块 (6)3.2.4 减法模块 (7)4 程序源代码 (7)5 调试与分析 (13)6 测试结果 (13)7 经验与体会 (15)评分表 (16)课程设计任务书学生姓名:毛习均专业班级:计算机1004班指导教师:许毅工作单位:计算机科学与技术学院题目: 十进制加减计算器初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。
具体的设计任务及要求:1)编写程序实现十进制数的加减法;2)将计算结果在屏幕上显示;3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试,和验收。
周5:撰写课程设计报告。
指导教师签名:年月日系主任(或责任教师)签名:年月十进制加减法计算器1问题描述用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改。
在此程序中采用子结构程序使结构清晰。
十进制加法计数器课程设计
实验十九 计数、译码、显示电路一、实验目的1、掌握中规模集成计数器74LS90的逻辑功能。
2、学习使用74LS48、BCD译码器和共阴极七段显示器。
3、熟悉用示波器测试计数器输出波形的方法。
二、 实验原理计数、译码、显示电路是由计数器、译码器和显示器三部分电路组成的,下面分别加以介绍。
1、计数器:计数器是一种中规模集成电路,其种类有很多。
如果按各触发器翻转的次序分类,计数器可分为同步计数器和异步计数器两种;如果按照计数数字的增减可分为加法计数器、减法计数器和可逆计数器三种;如果按计数器进位规律可分为二进制计数器、十进制计数器、可编程N进制计数器等多种产品。
常用计数器均有典型产品,不须自己设计,只要合理选用即可。
本实验选用74LS90二—五进制计数器,其功能如下表所示。
6263(1) R 0(1)和R 0(2)为直接复位端,R 9(1)和R 9(2)为直接置位端,可以预置数字“9”(Q D = Q A = 1,Q B = Q C = 0)。
(2) A 为二分频计数器的输入,Q A 的输出频率为CP A 的1/2。
B 为五进制计数器的输入,把Q A 输出作为五进制计数器B 的输入,即构成8421BCD 码十进制计数器。
2、 译码器:这里所说的译码器是将二进制数译成十进制数的器件。
我们选用的74LS48是BCD 码七段译码器兼驱动器。
其外引线排列图和功能表如下所示。
1234567891011121314GNDVCC 74LS48B1615CLTBI/RBORBIDAgabcdef十进制数 或功能输 入LT RBI D C B A 0123H H H H H X X X L L L L L L L H L L H L L L H H BI/RBO H H H H 输 出a b c d e f g H H H H H H L L H H L L L L H H L H H L H H H H H L L H 字 型注4567H H H H X X X X L H L L L H L H L H H L L H H H H H H H L H H L L H H H L H H L H H L L H H H H H H H H L L L L H H H X X X H L L L H L L H H L H L H H H H H H H H H H H H H L L H H L L L H H L H L L H H L L H 891011H X H L H H H H H H X X X H H L L H H L H H H H L H H H L H L L L H H H L L H L H H L L L H H H H L L L L L L L 12131415H X H H H H H 1BI RBI LTX H LX XL X X X X X X X XL L L L L L HL L L L L L L L L L L L L L H H H H H H H2 34(1) 要求输出数字0~15时,“灭灯输入”(BI )必须开路或保持高电平。
两个多位十进制数相加实验
实验一两个多位十进制数相加实验一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程二、实验要求1 独立完成每个实验项目2 按照程序流程图编好实验程序三程序框图Array加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验二将键盘输入的小写字母转换成大写字母一实验目的了解小写字母和大写字母在计算机内的表示方法,学习如何转换二、实验要求1 独立完成每个实验项目2三程序框架加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验三输入字符一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验四8255A并行口实验一、实验目的加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。
二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。
三、实验原理PC口8位接8个开关K1~ K8,PB口8位接8个发光二极管,从PC口读入8位开关量送PB口显示。
拨动K1~ K8,PB口上接的8个发光二极管L1~ L8对应显示K1~ K8的状态。
程序:CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0073HIOAPT EQU 0070HIOBPT EQU 0071HIOCPT EQU 0072HIOBDATA EQU 0500HCONTPORT EQU 00DFHDATAPORT EQU 00DEHDATA1 EQU 0640HSTART: J MP IOLEDIOLED: CALL FORMATCALL LEDDISPMOV DS,AXMOV AL,82HMOV DX,IOCONPTOUT DX,ALMOV DX,IOBPTIN AL,DXMOV BYTE PTR DS:[0501H],ALMOV DX,IOCONPTMOV AL,80HOUT DX,ALMOV DX,IOBPTMOV AL,DS:[0501H]OR AL,0F0HOUT DX,ALMOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY1IOLED0: MOV AL,10100101BMOV DX,IOCPTOUT DX,ALCALL DELAY1CALL DELAY1OR AL,0F0HOUT DX,ALMOV CX,8HIOLED1: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,10101111BOUT DX,ALCALL DELAY2OR AL,01010000BOUT DX,ALCALL DELAY2LOOP IOLED1MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2MOV AL,01011010BOUT DX,ALCALL DELAY1CALL DELAY1OUT DX,ALMOV CX,8HIOLED2: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,01011111BOUT DX,ALCALL DELAY2OR AL,10100000BOUT DX,ALCALL DELAY2LOOP IOLED2MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2JMP IOLED0DELAY1: PUSH AXPUSH CXMOV CX,0030HDELY2: CALL DELAY2LOOP DELY2POP CXPOP AXRETDELAY2: PUSH CXMOV CX,8000HDELA1: LOOP DELA1POP CXRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00 LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+DATA1]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0640H],405BHADD BX,2MOV WORD PTR DS:[BX+0640H],4040HADD BX,2MOV WORD PTR DS:[BX+0640H],6D6DHADD BX,2MOV WORD PTR DS:[BX+0640H],7F5BHRETCODE ENDSEND START四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在实验机箱上连好实验线路3 观察实验现象4 分析实验结果实验五8259中断控制器实验一、实验目的1.掌握8259中断控制器的接口方法.2.掌握8259中断控制器的应用编程.二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。
十进制加减计数器的设计
三、设计要求 (1) 要求用VHDL编写十进制加减计数器; 功能包括异步清零、置数、同步加载数据, 计数方向可设定。具体引脚定义见书 P268页。
(2) 编程并在实验箱上验证;
四、总结报告要求 (1) 写出VHDL文件; (2) 写出仿真和测试结果。 五、表1 引脚分配 1
信号 clr ena clk up_down load d3 d2 d1 引脚 37 38 59 39 41 44 46 47 d0 q3 q2 q1 q0 cout
48 128EP1K30TC144-3
加减计数器加减法计数器十进制计数器十进制加法计数器六位十进制计数器vhdl十进制计数器异步十进制计数器十进制计数器波形图十进制可逆计数器74ls90十进制计数器
实验5 十进制加减计数器的设计
一、目的 (1) 设计一个十进制加减计数器; (2) 学习用VHDL进行逻辑描述; (3) 学习设计仿真工具的使用方法。 二、说明 本设计实现一个十进制加减计数器,逻辑 功能参见数电教材。
汇编语言 十进制加减法计算器课程设计
十进制加减法计算器单片机设计一、设计目的通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用汇编语言编程的能力,并将所学的内容加以综合。
通过查阅资料,了解所学知识的应用情况。
二、课程设计要求设计十进制加减法计算器。
要求能(不同时)显示3位输入和4位输出。
要求程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。
数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果。
(2)计算器复位功能:DEL均为清零重启,任何时候按下DEL中一个将重新开始。
三、硬件设计现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减运算(此次只要求加减);(4)对错误的控制及提示。
此次计算器设计的最终结果是使其工作流程为:开机不显示,等待键入数值,键入三个数字,通过LCD显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入三个数字将显示键入的数值,按等号就会在LCD上输出运算结果。
同时考虑到操作中可能出现的错误时,计算器会进行自动控制。
根据设计要求,选用8098 单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
此次设计的系统模块图如下,单片机输入模块运算模块显示模块具体设计考虑如下:1、单片机工作时电源引脚外接电源,工作电压为5V,同时本次设计通过内部振荡器和时钟发生器产生时钟信号。
2、8098单片机可寻址的存储器空间为64K空间,其内部仅带有只能用作寄存器的256个字节容量的RAM,所以在此设计过程中,需要外接存储器芯片,我们选用容量足够大的62128存储器芯片。
3、本次设计的接口电路采用8255可编程并行I/O芯片,8255A具有通常意义的接口所需要的基本功能,有着很强的适应性,此次设计中它起的作用是将显示器和键盘与单片机连接,通过向其控制寄存器送入控制字,以规定8255的工作方式和实现确定的功能,如本次设计的电路图,8255的A口、C口均工作于输出方式,而B口工作于输入方式。
多字节加减法汇编程序
多字节加减法汇编程序16位10进制正整数加减法汇编程序代码说明:将代码复制到Masm for Windows 集成实验环境软件当中保存后点击运行如图:出现如下窗口:在屏幕上输入被加数按‘+’结束,然后再输入加数按‘=’结束,最后窗口会显示运算结果。
例如要计算123456+123456789,步骤如下:显然运算结果是正确的。
进行减法运算:123456-123456789,结果如下:汇编程序代码:DATAS SEGMENT n EQU 16 ;n表示和的最大位数 m EQU 8 ;因为和是ASCII码要转换成BCA码所以m=n/2 k EQU 9*m+6 ; BUF0 DB 1 DUP (30H);BUF1 DB n DUP(0) ;被加数(ASCII),n=8 DB 1 DUP (30H)BUF2 DB n DUP(0) ;加数(ASCII)BUF3 DB m DUP(0) ;被加数(BCD) BUF4 DB m DUP(0) ;加数(BCD) FHA DB 4 DUP ;用于保存‘+’、‘-’、数据长度SBC DB m DUP ;BCD码形式的和SAS DB n DUP ;ASCII码形式的和BUF5 DB 30H,n DUP(0),30H,n DUP(0),n DUP(0),4 DUP ,m DUP ,n DUP DATAS ENDSSTACKS SEGMENT DB 100 DUP;此处输入堆栈段代码 STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS INPT1 PROC;输入被加数到BUF1按‘+’结束LEA SI,BUF1MOV CX,0 ;CX用来统计输入数的字长IN1:MOV AH, 01H INT 21H CMP AL,'+' JZ BJS1CMP AL,'-'JZ BJS1MOV [SI],AL INC SI INC CL JMP IN1;将BUF1中的ASCII转换成BCD码到BUF3 BJS1:MOV [FHA],AL MOV 1[FHA],CL LEA DI,BUF3 MOV BX,2 MOV AX,CX DIV BLADD AL,AH MOV CL,ALAB1: DEC SI ;AB1--ASCII转换成BCD码MOV AL,[SI] SUB AL,30H DEC SIMOV AH,[SI] SUB AH,30H PUSH CX MOV CL,4 SHL AH,CL POP CXADD AL,AH MOV [DI],AL INC DILOOP AB1;输入加数到BUF2按‘=’结束LEA SI,BUF2MOV CX,0 ;CX用来统计输入数的字长 IN2:MOV AH, 01H INT 21H CMP AL,'=' JZ JAS MOV [SI],AL INC SI INC CX JMP IN2;将BUF2中的ASCII转换成BCD码到BUF4 JAS:MOV 2[FHA],CL LEA DI,BUF4 MOV BX,2 MOV AX,CX DIV BLADD AL,AH MOV CL,ALAB2: DEC SI ;AB2--ASCII转换成BCD码MOV AL,[SI] SUB AL,30H DEC SIMOV AH,[SI] SUB AH,30H PUSH CX MOV CL,4 SHL AH,CL POP CXADD AL,AH MOV [DI],AL INC DI LOOP AB2 RET INPT1 ENDP ;加法子程序JAF PROC CLCMOV CL,m LEA BX,BUF3 LEA SI,BUF4 LEA DI,SBC ADC_:MOV AL,[BX] ADC AL,[SI] DAA MOV [DI],AL INC SI INC DI INC BX LOOP ADC_ RET JAF ENDP ;减法子程序 JIAF PROCSBB_:MOV AL,1[FHA] CMP AL,2[FHA]JA BDJ1 JZ BZJ1 JMP BBJ ;m=8 ;被加数长度大于加数长度,即被加数大于加数 ;被加数长度等于加数长度,进行大小比较;被加数长度小于加数长度,即被加数小于加数。
微机原理与接口技术实验三 多字节加法
电子信息专业实验报告课程微机原理与接口技术实验实验题目多字节十进制加法学生姓名lz评分学号20171414xxxxx班级xxxxxxxx同实验者实验时间2019.10.19上午地点望江实验室基教B520电子信息学院专业实验中心一、实验目的1、掌握循环程序的设计;2、标志位判断;3、带进位的加法指令及其十进制调整指令的使用方法。
二、实验内容(含技术指标)1、设计多字节十进制加法程序;2、将被加数、加数、和、进位分别放在1000H开始的单元;3、在debug初始化要用的寄存器;4、通过循环程序完成取加数、被加数、十进制调整和修改指针的操作;5、处理进位,输出结果,观察IP、SI、CL和十进制调整前后AL、A、C的变化;6、连续执行,检查并验证结果是否正确。
三、实验仪器(仪器名称、型号,元器件名称、清单,软件名称、版本等)1、联想笔记本电脑Windows10系统2、Masm for Windows集成实验环境2015四、实验原理(基本原理,主要公式,参数计算,实现方法及框图,相关电路等)1、ADC:带进位的加法指令,ADC指令在格式和功能上都与ADD指令类似,只是相加时要把进位标志CF的当前值加到和中,结果送到目的操作数中。
2、DAA:十进制数加调整指令,用于调整AL的值,该值是由指令ADD或ADC运算二个压缩型BCD码所得到的结果。
压缩型BCD码是一个字节存放二个BCD码,低四位和高四位都是一个BCD码。
其调整规则:如果AL的低四位大于9,或AF=1则AL=AL+6,置AF=1;如果AL的高四位大于9,或CF=1则AL=AL+60H,置CF=1;如果以上两点都不成立则清除标志位AF和CF。
3、标志位的含义:AF:半加标志位。
在加法时,当位3需要向位4进位,或者在减法时位3需向位4借位时,该标志位置1;否则清0。
该标志位通常用于对BCD运算结果的调整。
CF:进位标志位。
作加法时出现进位或者作减法时出现借位,该标志位置1;否则清0。
实验三、多字节、多进制加减运算实验
实验三、多字节、多进制加减运算实验一、实验目的1.学习多字节压缩BCD码加减法运算的程序设计2.学习单字节有符号数加减运算的程序设计二、实验要求1.编写通用4字节压缩BCD码的加、减法运算程序2.编写通用单字节有符号二进制数加、减法运算程序三、实验原理对于简单的8位加减可以直接调用指令就可以了。
例如加法可以使用指令ADD以及带进位加ADDC,但单字节加减法只能在256之内进行运算;在实际应用中经常需要进行多字节运算,从而处理更大的数据。
该实验介绍单片机BCD 码多字节加、减运算通用程序的设计。
1.多字节无符号压缩BCD码加法运算假设多字节无符号被加数的最低字节的地址为R0,加数的最低字节地址为R1,字节数共为len;计算结果的地址于被加数相同。
◆xx参数:R0:被加数地址指针;R1:加数地址指针;len:字节数。
◆出口参数:@R0:计算结果;rLen:计算结果字节数。
◆使用资源:ACC,R0、R1,内部RAM单元len、rlen及存放被加数、加数、计算结果的内存单元。
示例程序如下:ADDl:PUSH PSW;保护标志寄存器内容CLR C;进位位清0MOV rlen,#00H;和的字节数先清0ADD:MOV A,@R0;取被加数ADD A,@R1;求和DA A;十进制调整MOV @R0,A;保存INC R0;地址增1INC R1INC rlen;字节数增1DJNZ len,ADD;所有字节未加完继续,否则向下执行JNC ADD20;和的最高字节无进位转ADD20MOV @R0,#01H;和的最高字节地址内容为01HINC rlenADD20:POP PSWRETEND多字节加法运算一般是按从低字节到高字节的顺序进行的,所以必须考虑低字节向高字节的进位情况,被加数和加数的压缩BCD码,最大不超过99,而99+99+1(进位)=199,此时不需要使用ADDC指令,但当两字节当最低两字节相加后,必须使用“DA A”进行十进制调整,调整后产生进位。
十进制数加减计算器的设计
十进制数加减计算器的设计1 问题描述用汇编语言设计一个十进制数加减计算器,能够实现两个二位十进制数的加减运算,并具有友好的界面。
2 设计说明该程序数据流程图:3 详细的算法描述定义两个数据段,通过键盘输入,存储于AX ,BX 中,选择运算符号“+或-”,自动运算AX ,BX 中的数据,然后将结果转化为十进制输出。
(详细解释见源程序)4 源程序与执行结果4.1 源程序:CURS MACRO A,BMOV AH,2 ;置光标位置MOV BH,0 ;页号为0MOV DH,A ;设置光标的坐标为(A.B)MOV DL,BINT 10H ;BIOS调用ENDM;-------------------------------DISPMSG MACRO MESSAGELEA DX,MESSAGE ;传递MESSAGE的偏移地址MOV AH,9 ;显示字符串INT 21H ;DOS调用ENDM;----------------------------------CLEAR MACRO COLOR ;清屏MOV AH,6 ;屏幕初始化MOV AL,0 ;页号MOV CH,0 ;设置左上角的坐标为(0,0)MOV CL,0MOV DL,100 ;设置右上角的坐标为(100,100)MOV DH,100MOV BH,COLOR ;卷入行属性INT 10H ;BIOS调用ENDM.MODEL SMALL.STACK.DATA ;数据段定义MSG0 DB '* * * * * * * * * * * * * * * * * * * *',0DH,0AH ;,0dh,0ah,0dh,0ahDB ' * *',0DH,0AH;db '* *',0dh,0ah;db '* *',0dh,0ahDB ' * --------COUNTER-------- *',0DH,0AH ;,0dh,0ah,0dh,0ahDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * DATA1:'DB '_______________ *',0DH,0AH ;,0dh,0ah,0dh,0ah,0dhDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DHDB ' * DATA2:'DB '_______________ *',0DH,0AH ;,0dh,0ah,0dh,0ah,0dhDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DHDB ' * RESULT:'DB '_______________ *',0DH,0AH,0DH ;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh DB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * * * * * * * * * * * * * * * * * * * *','$'MSG1 DB 'choose +,-','$'MSG2 DB 'you choose wrong','$',0AH,0DHMSG3 DB 'Press ESC to Exit!',0DH,0AH,'$'MSG4 DB 'Press any key to continue!',0DH,0AH,'$'MSG5 DB '-','$'MSG6 DB '.','$'MSG7 DB 'error input!','$'MSG8 DB 'data2 is wrong!','$'DATA1 DW ?DATA2 DW ?.CODE ;代码段从这里开始;--------------------------------------------DEC_DIV PROC NEARCWD ;将字转换为双字,AX内容符号扩展到DXDIV CXPUSH DXMOV DL,ALADD DL,30H ;将不是数字的字符转换为数字MOV AH,2 ;显示输出INT 21H ;DOS调用POP DXMOV AX,DXRETDEC_DIV ENDP;------------------------------------------CHANGE PROC NEAR ;该子程序的功能:将AX中存储的十六进制数转换为十进制数CMP AX,1000JAE C1 ;AX≥1000则转移CMP AX,100JAE C2 ;AX≥100则转移CMP AX,10JAE C3 ;AX≥10则转移JMP C4 ;AX<10C1: MOV CX,1000DCALL DEC_DIVC2: MOV CX,100DCALL DEC_DIVC3: MOV CX,10DCALL DEC_DIVC4: MOV CX,1DCALL DEC_DIVRETCHANGE ENDP;-------------------------------BEGIN PROC NEARBACK: CLEAR 1EHCURS 2,20 ;设置光标为(2.20)DISPMSG MSG0 ;显示用户界面CURS 8,41 ;设置光标为(8,41),第一行MOV BX,0MOV CX,2NEWCHAR1:MOV AH,1 ;键盘输入并回显INT 21H ;DOS调用CMP AL,30H ;检查输入的字符是不是数字JAE J1 ;如果不是,则转移至J1JMP D2 ;是,转移到D2执行J1: CMP AL,39H ; 与9的ASCII侣氡JBE J2 ;如果输入的字符是0-9,则转移至J2 JMP D2 ;如果不是数字,则转移至D2J2: SUB AL,30HCBW ;AL的内容符号扩展到AHXCHG AX,BXMOV DI,10MUL DIXCHG AX,BXADD BX,AXLOOP NEWCHAR1MOV DATA1,BXCURS 11,41 ;设置光标位为(11,40),第二行MOV BX,0MOV CX,2NEWCHAR2:MOV AH,1 ;键盘输入并回显INT 21H ;DOS调用CMP AL,30H ;与0的ASCII码比较JAE J3 ;如果输入数字大于等于0则跳转至J3 JMP D2J3: CMP AL,39H ;与9比较JBE J4 ;如果小于或等于9则跳转JMP D2 ;如果输入不是数字则跳转J4: SUB AL,30H ;如果输入不是0-9,则转化成相应的字符CBW ;将AL符号扩展到AHXCHG AX,BXMOV DI,10MUL DIXCHG AX,BXADD BX,AXLOOP NEWCHAR2MOV DATA2,BXMOV AX,DATA1MOV BX,DATA2PUSH AXPUSH BXCURS 15,33 ;设置光标的位置为(15.33),第三行DISPMSG MSG1 ;显示提示信息MOV AH,1 ;接受键盘输入并回显INT 21H ;DOS调用CMP AL,'+'JE ADDI ;如果运算符为+,则计算两数之和CMP AL,'-'JE SUBT ;如果运算符为-,则计算两数之差CURS 16,25 ;设置光标为(16,25)DISPMSG MSG2 ;在屏幕上输出提示信息JMP D1;----------------------------------------;ADD THE TWO DATASADDI: POP BXPOP AXADD AX,BX ;计算两数字之和PUSH AXCURS 14,41 ;设置光标位置为(14,41)POP AXCALL CHANGE ;将结果转换为十进制数JMP D1;---------------------------------------;SUBTRACT THE TWO DATASSUBT: POP BXPOP AXCMP AX,BX ;比较两数大小JAE D0 ;如果AX>=BX则跳转XCHG AX,BXPUSH AXPUSH BXCURS 14,40 ;设置光标位置为(14,40)DISPMSG MSG5 ;在屏幕上显示负号POP BXPOP AXD0: SUB AX,BX ;计算两数之差PUSH AXCURS 14,41 ;设置光标位置为(14,41)POP AXCALL CHANGE ;将结果转换为十进制数JMP D1;---------------------------------------D1: RETD2: PUSH AXPUSH BXCURS 15,33 ;设置光标位置为(15,33)DISPMSG MSG7 ;提示输入出错POP BXPOP AXRETBEGIN ENDP;----------------------------------------MAIN PROC NEARMOV AX,@DATAMOV DS,AXMOV ES,AXPUSH DSXOR AX,AXPUSH AXMOV DATA2,0 ;将缓冲区清空MOV DATA1,0AGAIN:CALL BEGINCURS 16,23 ;设置光标位置为(16.23)DISPMSG MSG3 ;在屏幕上输出提示信息,提示退出的方法CURS 17,23 ;设置光标位置为(17.23)DISPMSG MSG4 ;在屏幕上输出提示信息,提示继续的方法MOV AH,7 ;键盘输入,无回显INT 21H ;DOS调用CMP AL,27 ;判断输入的是否为ESCJNE AGAIN ;如果不是就继续执行以上运算EXIT: MOV AX,4C00H ;如果是就退出系统INT 21H ;DOS调用MAIN ENDPEND MAIN4.2 对源程序汇编生成目标文件4.3 链接目标文件生成可执行文件“12.EXE”,并用DEBUG命令调试程序4.4 运行最终可执行程序“12.EXE”,执行结果:5 使用说明打开可执行文件“十进制加减计算器.exe”,键盘输入需要运算的两个十进制数,然后小键盘选择运算符号,则程序自动运算两个数并输出结果,并提供选择“ESC退出”、“任意键继续”。
实验二、熟悉51指令(多字节十进制加法)
实验二、熟悉51指令(多字节十进制加法)一、实验目的:1、了解DAA指令使用方法。
2、掌握子程序的使用方法。
二、实验设备:TDS-MD微机教学实验系统一台MP-51单片机开发系统一台三、实验重点指令:DAA指令为二-十进制调整指令,机器码为D4,该指令是对A(累加器)的BCD码加法结果进行调整。
两个BCD码按二进制相加之后,必须经本指令调整,才能得到BCD码的和数。
DAA指令的操作为:若[(A0~3)>9]或[(AC)=1],则(A0~3)←(A0~3)+06H;若[(A4~7)>9]或[(CY)=1];则(A4~7)←(A4~7)+06H。
四、实验内容:两字节加法参考程序如下:地址指令码助记符───────────────────────────────────2000758150MOV81,#5020037820MOVR0,#2020057645MOV@R0,#45200708INCR020087675 MOV@R0,#75200A7930MOVR1,#30200C7767MOV@R1,#67200E09INCR1200F7728MOV@R1,#282011C3CLRC20127A02MOVR2,#0220141122ACALL2022201618DECR0201719DECR12018DAFADJNZR2,2014201AE4CLRA201B92E0MOVE0,C201D00NOP201EF6MOV@R0,A201F80FESJMP201F202100NOP2022E6MOVA,@R0202337ADDCA,@R12024D4DAA2025F6MOV@R0,A202622RET─────────────────────────────────上述程序实现:4575+6728=?,其中20H,21H放被加数,30H,31H放加数,两数之和放在内部ROM的1FH,20H和21H单元中。
五、实验步骤:1.将方框内程序主体装入开发机,并做认真检查。
多字节十进制加法程序设计
单片机实验报告班级:11050641X 姓名:张超学号:19指导教师:赵英亮实验一多字节十进制加法程序设计1.实验目的1.熟悉仿真器的软件使用环境及单片机汇编语言编程;2.掌握多字节十进制加法的程序设计及实现方法。
2.实验设备CPU挂箱、8031CPU模块、Keil C51软件3.实验内容编写多字节十进制加法程序( P49 ),实现下式运算:4574+6728=11302要求:被加数在片内RAM区20H、21H单元;加数在片内RAM区30H、31H单元;结果在片内RAM区20H(最高位进位)、21H(高位)、22H(低位)单元。
4.实验程序ORG 0000HLJMP MAINORG 0030HMAIN:MOV A,20HADD A,30HDA AMOV 22H,AMOV A,21HADDC A,31HDA AMOV 21H,ACLR AMOV R3,00HADDC A,R3MOV 20H,AEND5.实验步骤开机启动Keil C51软件进入μVision2 集成开发环境,确认89C51处于软件仿真状态。
完成程序的设计、编辑、编译、连接。
进入DEBUG方式,打开存储器Memory 1窗口,在窗口Address栏键入D:20H;点击鼠标右键,选择最后一项Modify Memory ,输入被加数;在窗口Address栏键入D:30H;点击鼠标右键,选择最后一项Modify Memory ,输入加数。
调试和运行程序并记录存储器Memory 1窗口实验结果。
6.实验结果得出了正确的结果7.实验图片。
两个多位十进制数相加
实验1 两个多位十进制数相加的实验
一、实验目的
1、熟悉DOS系统命令,学习数据传送和算术运算指令的用法
2、熟悉在PC机上建立、汇编、链接、调试和执行汇编语言程序的过程。
3、初步练习用DEBUG调试程序运行8086汇编语言程序的思想。
二、实验内容
将两个多位数相加,要求数和被加数均以BCD码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元内(低位在前),结果送回DATA1处。
三、对照程序框图完成下列程序
data segment
data1 db 03h,09h,01h,07h,04h
data2 db 06h,05h,00h,08h,02h
data ends
code segment
assume cs:code,dds:data
start: mov ax,data
mov si,offset data1
mov di,offset data2
mov ax,05
clc
ad: mov al,[si]
mov bl,[di]
adc al,bl
aaa
mov [si],al
inc si
inc di
loop ad
hlt
code ends
end start
四、实验结果
Data1 段存储相加结果:09,04,02,05,07,Data2 段的被加数存储:06,05,00,08,02。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告
班级:11050641X 姓名:张超
学号:19
指导教师:赵英亮
实验一多字节十进制加法程序设计1.实验目的
1.熟悉仿真器的软件使用环境及单片机汇编语言编程;
2.掌握多字节十进制加法的程序设计及实现方法。
2.实验设备
CPU挂箱、8031CPU模块、Keil C51软件
3.实验内容
编写多字节十进制加法程序( P49 ),实现下式运算:
4574+6728=11302
要求:被加数在片内RAM区20H、21H单元;
加数在片内RAM区30H、31H单元;
结果在片内RAM区20H(最高位进位)、
21H(高位)、22H(低位)单元。
4.实验程序
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV A,20H
ADD A,30H
DA A
MOV 22H,A
MOV A,21H
ADDC A,31H
DA A
MOV 21H,A
CLR A
MOV R3,00H
ADDC A,R3
MOV 20H,A
END
5.实验步骤
开机启动Keil C51软件进入μVision2 集成开发环境,确认89C51处于软件仿真状态。
完成程序的设计、编辑、编译、连接。
进入DEBUG方式,打开存储器Memory 1窗口,在窗口Address栏键入D:20H;点击鼠标右键,选择最后一项Modify Memory ,输入被加数;在窗口Address栏键入D:30H;点击鼠标右键,选择最后一项Modify Memory ,输入加数。
调试和运行程序并记录存储器Memory 1窗口实验结果。
6.实验结果
得出了正确的结果
7.实验图片。