《微机原理及接口技术课程设计任》加法练习程序设计说明书


摘要


微机原理是一门专业基础课程,它的主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等内容。要求对微机原理中的基本概念有较深入的了解,能够系统地掌握微型计算机的结构、8086微处理器和指令系统、汇编语言程序设计方法、微机系统的接口电路设计及编程方法等,并具有综合运用所学知识分析问题和解决问题的能力,进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
加法练习程序设计,主要工作是产生两个两位数的随机数进行加运算,而怎么产生随机数是该程序的难点。在搜集了一些资料后发现很多程序用的随机数是伪随机,是一个比较复杂算法,而不使用算法获得随机数的方法就是获取系统的时间。
先做一个RANDOM的随机种子的子程式,其实是伪随机过程,指定一个比较复杂的算法,然后根据该子程式输出的结果来产生随机的加法算式。产生一个被加数N1,产生一个加数N2。然后用ADD运算加法,将结果存进RESULT内显示N1+N2,RANDOM的随机种子子程式都调用一次,保证产生不同的加法。
关键词: 加法练习;子程序;编制

1绪论

1.1基本内容

微机原理中的基本概念有较深入的了解,能够系统地掌握微型计算机的结构、8086微处理器和指令系统、汇编语言程序设计方法、微机系统的接口电路设计及编程方法等,并具有综合运用所学知识分析问题和解决问题的能力,进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
加法练习程序设计,主要工作是产生两个两位数的随机数进行加运算,而怎么产生随机数是该程序的难点。在搜集了一些资料后发现很多程序用的随机数是伪随机,是一个比较复杂算法,而不使用算法获得随机数的方法就是获取系统的时间。在翻阅课本后得知 mov ah,2ch int 21h语句可以得到系统时间,在考虑后认为秒和百分秒比较适合,因为在短时间内这两个时间变化的多一些,比较适合用于随机数。Dh 所存的数对应的是秒,Dl 所存的数对应的是百分秒。加法直接将两个随机数相加即可,但减法就相对麻烦些,因为会出现第一个随机数比第二个随机数小得到结果为负数。为了解决这一问题,在数据段定义了两个变量,用来存放减数和被减数。在获取随机数时先不显示运算式,先将随机数的值给变量num1 和变量 mum2,如果相减结果小于 0 则转回去继续取随机数,直到取得随机数相减记过大于 0,则显示运算式继续后面的程序运行。
相对较难的部分解决后则是将整个程序流程串起来,先是显示选择加或减运算,产生的随机数并显示相应的运算式;再是输入结果,对结果进行判断给出对或错的提示,错误时提示继续输入结果,对则继续下一步;最后选择是否继续下一题,R 返回最初加减运算选择,Q 则退出。
8255A芯片 Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
完成随机给出百位数以内的加法算式,并提示输入答案,若正确给出正确提示,若错误给出错误提示,并提示输入答案;按 R 键继续下一题,按 Q 键返回 DOS的要求,设计需要输入的键盘和显示的屏幕,以8255A作为外设接口电路的设计,以键盘进行数字的输入,在DOS进行选择,最后的“R”和“Q”的操作,本次均在模拟器上进行设计。
这次微机应用系统课程设计任务要求是加法练习程序设计,虽然只要求加法运算,但在该程序里添加了减法运算,进行创新,使得程序相对不会太单调。

2方案选择及论证

2.1设计方案

加法练习程序设计,主要工作是产生两个两位数的随机数进行加运算,而怎么产生随机数是该程序的难点。在搜集了一些资料后发现很多程序用的随机数是伪随机,是一个比较复杂算法,而不使用算法获得随机数的方法就是获取系统的时间。在翻阅课本后得知 mov ah,2ch int 21h语句可以得到系统时间,在考虑后认为秒和百分秒比较适合,因为在短时间内这两个时间变化的多一些,比较适合用于随机数。Dh 所存的数对应的是秒,Dl 所存的数对应的是百分秒。加法直接将两个随机数相加即可,但减法就相对麻烦些,因为会出现第一个随机数比第二个随机数小得到结果为负数。为了解决这一问题,在数据段定义了两个变量,用来存放减数和被减数。在获取随机数时先不显示运算式,先将随机数的值给变量num1 和变量 mum2,如果相减结果小于 0 则转回去继续取随机数,直到取得随机数相减记过大于 0,则显示运算式继续后面的程序运行。
相对较难的部分解决后则是将整个程序流程串起来,先是显示选择加或减运算,产生的随机数并显示相应的运算式;再是输入结果,对结果进行判断给出对或错的提示,错误时提示继续输入结果,对则继续下一步;最后选择是否继续下一题,R 返回最初加减运算选择,Q 则退出。

2.1.1方案一

不带进位的加法运算指令 ADD
ADD 指令完成两个操作数相加,并将结果保存在目的操作数中。
指令格式: ADD OPRD1, OPRD2
功能:操作数 OPRD1 与 OPRD2 相加,结果保存在 OPRD1 中。
说明:操作数 OPRD1 可以是累加器 AL 或 AX,也可以是其它通用寄存器或存储器操
作数,OPRD2 可以是累加器、其它通用寄存器或存储器操作数,还可以是立即数。OPRD1和OPRD2 不能同时为存储器操作数,不能为段寄存器。ADD 指令的执行对全部 6 个状态标志位产生影响。

例如:
ADD AL, BL ;AL+BL 结果存回 AL 中。
ADD AX, SI ;AX+SI 结果存回 AX 中。
ADD BX, 3DFH ;BX+03DFH 结果存回 BX 中。
ADD DX, DATA[BP+SI] ;DX 与内存单元相加,结果存回 DX 中。
ADD BYTE PTR[DI], 30H ;内存单元与 30H 相加,结果存回内存单元中。
ADD [BX], AX ;内存单元[BX]与 AX 相加,结果存回[BX]中。
ADD [BX+SI], AL ;内存单元与 AL 相加,结果存回内存单元中。

2.1.2方案二

带进位的加法运算指令 ADC
ADC 指令完成两个操作数相加之后,再加上 Flags 的进位标志 CF。CF 的值可能为 1或 0。
指令格式: ADD OPRD1, OPRD2
功能:操作数 OPRD1 与 OPRD2 相加后,再加上 CF 的值,结果保存在 OPRD1 中。
说明:对操作数的要求与 ADD 指令一样。

例如:
ADC AL, BL
ADC AX, BX
ADC [DI], 30H
ADC 指令主要用于多字节数的加法运算,以保证低位向高位的进位被正确接收。

2.1.3方案三

加 1 指令 INC
加 1 指令又称增量指令,指令不影响 CF 标志位。
指令格式:INC OPRD
功能:OPRD 加 1 后送回 OPRD。
说明:操作数 OPRD 可以是寄存器或存储器操作数,指令可以完成字节或字的加 1 操作。

例如:
INC AL
INC AX
INC BYTE PTR[SI]
INC WORD PTR[BX+DI]

2.2方案论证

以每一种方案进行测试,最后以方案一为最终方案,先是设计了一个菜单,用于选择进行加法运算还是减法运算,菜单显示来自数据段的字符串。选择后变转到 jiafa或 jianfa程序段中,调用产生随机数的random1(秒)和 random2(百分秒)程序段中并显示运算式。将输入的答案通过 show 程序段将其转换成 ASCII 码显示出来,再由 get 程序段将输入的答案转换成对应的数,最后转换成数的答案与计算机运算结果比较,如果相减为 0 则对,提示 correct,否则输入的答案是错的,提示 error 并让其继续输入答案直到正确为止。在答案正确后,提示“Continue® or Exit(Q)?”是否继续下一题,按 R 继续下一题,按 Q 则返回 DOS。

3硬件系统说明

基本设计通过以8086为主要的设计,主要用到AD0到AD15的引脚和A16到A19的引脚和其他引脚等,用到三个74AHC373DW的微型芯片的D1到D8的引脚和Q1到Q8的引脚以及部分引脚,用到两个74HC245CIR的微型芯片的A1到A8引脚和B1到B8的引脚以及部分其他引脚,用到两个74HC138D的微型芯片的A、B、C三个引脚和OE引脚,分别用到四个M62256-2F1的微型芯片的A0到A14引脚和Q0到Q7引脚以及其他部分引脚,并进行将M62256-2F1重新封装,改变引脚,对程序的满足,最后用到四个74HC32的异或门的所有引脚。
加法训练练习主要是利用汇编语言在DOS上进行训练,在基础的硬件系统添加一个8255A芯片进行输出端口和输入端口的控制,用开关进行键盘的模拟,用模拟电路放大器进行显示屏的模拟。以实现整个硬件程序的功能模块的使用。在8255A中进行开关编程,以实现键盘的功能。

3.1硬件设计思路

加法运算训练程序,主要是微型芯片进行随机的组合,然后在显示屏幕上进行加法和减法的显示,利用键盘进行运算结果的输入,根据提示进行每一步的要求操作。
随机内部芯片主要用到有8086微处理器、8255A微型处理器、74AHC373DW微型芯片、74HC245CIR的微型芯片、74HC138D微型芯片、M62256-2F1微型芯片、74HC32的异或门进行组合。
键盘主要开关进行模拟,在8255A进行编程设置,已完成数字键盘的输入,进行结果的输入。显示器也通过8355A进行输出控制。
将所有芯片引脚进行链接,组成和封装,构成硬件的总体设计,最后即可实现显示减法和加法的输出和控制,完成任务的要求。

3.2系统构成框图

在这里插入图片描述

图3-1 硬件设计总图

3.3芯片选择

8255A芯片 Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
方式0 :基本的输入输出方式,即无须联络就可以直接进行的 I/O方式。其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2: 双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
8255A是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O口:A组包括A口及C口高4位,B组包括B口及C组的低4位。
A口可以设置为方式0、方式1、方式2,B口与C口只能设置为方式0或方式1.
在这里插入图片描述

图3-2 8255A芯片示意图

Intel 8086是16位微处理器芯片,是x86架构的鼻祖。Intel 就推出了 Intel它是以8080和8085的设计为基础,拥有类似的寄存器组,但是地址总线扩充为20位。总线接口单元(Bus Interface Unit)透过6字节预存(prefetch) 的队列(queue)位指令给执行单元(Execution Unit),所以取指令和执行是同步的,8086 CPU有20条地址线,可直接寻址1MB的存储空间,每一个存储单元可以存放一个字节(8位)二进制信息。
8086是Intel系列的16位微处理器,芯片上有4万个晶体管,采用 HMOS工艺制造,用单一的+5V电源,时钟频率为4.77MHz~10MHz。
8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。可寻址的内存空间为1MB。
8086 把段地址左移 4 位然后把它加上偏移地址。大部分的人都认为这是一个很不好的设计,因为这样的结果是会让各分段有重叠。尽管这样对组合语言而言大部分被接受(也甚至有用),可以完全地控制分段,使在编程中使用指针(如C编程语言) 变得困难。它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。更坏的是,这种方式产生要让内存扩充到大于 1 MB 的困难。而 8086 的寻址方式改变让内存扩充较有效率。
在这里插入图片描述

图3-3 8086芯片示意图

4软件系统说明

4.1软件设计主流程图

在这里插入图片描述

图4-1主流程图

4.2加法练习算式

在这里插入图片描述

图4-2 加法运算流程图

4.3减法练习算式

在这里插入图片描述

图4-3 减法运算流程图

4.3源程序清单

DATAS SEGMENT
msg db '*******************************',
0dh,0ah,'$'addp db '* 1. Addition to practice *: ',0dh,0ah,'$'subp db '*
2. Subtraction to practice *: ',0dh,0ah,'$'sele db 'Input your chioce: ,''$'corr db 20h,20h,'Correct!',0dh,0ah,'$'
erro db 20h,20h,'Error!',0dh,0ah,'$'
rorq db 'Continue(R) or Exit(Q)?,
'0dh,0ah,'$'exit db 0dh,0ah,' 
Press any key to quit...,'0dh,0ah,'$'
sum dw 0
num1 dw 0
num2 dw 0
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUMECS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
again:
mov dx,offset msg
mov ah,09h
int 21h
mov dx,offset addp
mov ah,09h
int 21h
mov dx,offset subp
mov ah,09h
int 21h
mov dx,offset msg
mov ah,09h
int 21h
select:
call huan
mov dx,offset sele
mov ah,09h
int 21h
mov ah,1
int 21h
cmp al,31h
jz jiafa
cmp al,32h
call huan
jz jianfa
gono:
mov dx,offset rorq
mov ah,09h
int 21h
key:
mov ah,1
int 21h
cmp al,72h
jz select
cmp al,71h
jnz key
call huan
mov dx,offset exit
mov ah,09h
int 21h
mov ah,4ch
int 21h
jiafa:
call huan
call random1
mov sum,ax
call show
mov dl,'+'
mov ah,2
int 21h
call random2
add sum,ax
call show
jmp next
jianfa:
call random1
mov sum,ax
mov num1,ax
call random2
sbb sum,ax
mov num2,ax
cmp sum,0
jl jianfa
mov ax,num1
call show
mov dl,'-'
mov ah,2
int 21h
mov ax,num2
call show
jmp next
next:
mov dl,'='
mov ah,2
int 21h
call input
cmp bp,sum
jz done
mov dx,offset erro
mov ah,09h
int 21h
jmp next
done:
mov dx,offset corr
mov ah,9
int 21h
jmp gono
random1:
mov ah,2ch
int 21h
mov al,dh
mov ah,0
ret
random2:
mov ah,2ch
int 21h
mov al,dl
mov ah,0
ret
show:
mov ax,ax
aam
or ax,3030h
xchg ah,al
mov dx,ax
mov ah,2
int 21h
mov dl,dh
int 21h
ret
input:
mov bp,0
mov cx,3
get:
mov ah,0
int 16h
cmp al,0dh
jz ok
cmp al,'0'
jb get
cmp al,'9'
ja get
mov ah,0eh
int 10h
and ax,0fh
xchg bp,ax
mov bx,10
mul bx
add bp,ax
loop get
ok:
cmp cx,3
ret
huan:
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
MOV AH,4CH
INT 21H
CODES ENDS
END START

5运行结果

在windows下调试汇编程序,因为不能直接使用masm5.0,得借助dosbox当运行加法程序时如下图5-1程序运行图所示
在这里插入图片描述

图5-1 程序运行图

选择“1”加法练习时如下图5-2进行加法训练图所示
在这里插入图片描述

图5-2 进行加法训练图

选择“2”加法练习时如下图5-3进行加法训练图所示

在这里插入图片描述

图5-3 进行加法训练图

当没此出错时,系统会报出提示如图5-4 提示错误图,一直到计算正确如图。
在这里插入图片描述

图5-4 提示错误图

正确后提示继续“R”或者退出“Q”,选择“R”后继续进入菜单模式,选择“Q”后继续进入DOS模式。如下图5-5 菜单模式和图5-6 DOS界面图所示:

在这里插入图片描述

图5-5 菜单模式

在这里插入图片描述

图5-6 DOS界面图

6所选芯片清单

表6-1所选芯片清单表

芯片型号所有个数
80861
8255A1
74AHC373DW3
74HC245CIR2
74HC138D2
M62256-2F14
74HC324

总结

本次设计顺利完成,运用自己上课所学的知识和各种资料完成了此次的课程设计,虽然这次制作的程序仍有许多的缺陷,但是能在课设这两周的时间能完成已经非常不错了。在程序的编写过程中,遇到了许许多多的困难,在小组成员的一同努力下,克服了许许多多的困难。课程设计的过程是自我探索、自我学习的过程,其中,我们不仅学到了专业的知识,也提升了自己的学习能力。
在本次课程设计中,我运用课堂所学的微机原理和接口知识,以及各种资料来完成我的课程设计。我在此次课程设计中,认识到了自己的不足,同时也锻炼自己的探索能力和动手能力。也在仔细阅读了课程设计要求后进行了具体排版,即相关资料的查找和总合、设计图的调试和截图记录、说明书的编写和排版,在课程设计过程中让我充分感受到了技术重要性,不仅锻炼了自己,还锻炼了我对知识的熟练程度。
本次课程设计中也让我认识到了在微机原理和接口学习中的不足,只能基本上实现加法练习程序设计,有一定可靠性,但是仍有许多功能无法实现希望在将来能够丰富自己的知识,不断完善自己。

参考文献

[1]. 辛博、王博、朱张青. 微机原理与接口技术[M].南京大学出版社, 2019
[2]. 周伟、林凡强. 单片微机原理及应用[M].重庆大学出版社, 2018
[3]. 辛博、王博. 微机原理与接口技术实验教程[M].南京大学出版社, 2020
[4]. 程宏斌、孙霞主编. 基于Proteus的微机原理仿真实验[M]. 2019
[5]. 宗素兰、唐飞、岳明道、李文艺、赵水英. 微机原理与接口技术、单片机原理及应用实验指导书[M].人民邮电出版社, 2016
[6]. 乔志伟、张艳兵、李顺增. 微机原理与接口技术[M].人民邮电出版社, 2014
[7]. 包宋建主编. 微机原理与接口技术[M]. 2020
[8]. 李崇维、段绪红、李德智. 微机原理与接口技术实验教程.基于Proteus仿真[M]. 2019

致谢

首先,感谢学校能给我们这次学习的机会,其次感谢我的指导老师,本次设计任务的完成是在我的指导老师的指导下进行的。在每次设计遇到问题时老师们不辞辛苦的讲解使得我的程序设计顺利的进行,也使我心中的疑惑得到解决。在此向导师表示衷心地感谢!老师严谨的工作态度,渊博的专业知识,负责的工作态度,都是我学习的榜样。
在这次课程设计的撰写中,我得到了许多人的帮助。首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次课程设计的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计上的难题。感谢在整个课程设计期间和我密切合作的同学,和在各个方面给予过我帮助的伙伴们,把一个庞大的,从来没有做过的课程设计,圆满地完成了。正是因为有了你们的帮助,才让我学到了本次课程设计所涉及的新知识,更让我感觉到了知识以外的东西,那就是团结的力量。
其次,我要感谢我同学,从课程设计的选题到设计完成这一在整个过程中,我得到了十足的成长。虽然我经历了困难,但是我最终体会到了成功的喜悦。在不断的自我探索自我努力的情况下,我才能最终完成这一课程设计,感谢所有对此的付出伙伴,我在此由衷的感谢大家。

  • 37
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Run_Snails

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值