微机原理与接口技术两个数相乘和相减实验.docx
《微机原理与接口技术两个数相乘和相减实验.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术两个数相乘和相减实验.docx(13页珍藏版)》请在冰豆网上搜索。
![微机原理与接口技术两个数相乘和相减实验.docx](https://file1.bdocx.com/fileroot1/2023-1/10/0d9ad8a2-83a6-4d11-a837-040dbb4708ef/0d9ad8a2-83a6-4d11-a837-040dbb4708ef1.gif)
微机原理与接口技术两个数相乘和相减实验
存档资料成绩:
华东交通大学理工学院
课程设计报告书
所属课程名称微机原理与接口技术
题目两个数相乘和相减实验
LCD显示实验
分院电信分院
专业班级09电子信息工程()
学 号200902104
学生姓名
指导教师李房云
2012年6月7日
目录
第1章课程设计内容要求和目的..................
(2)
1.1设计内容.....................................
(2)
1.2设计要求.....................................
(2)
1.3设计目的.....................................
(2)
第2章设计方法与步骤...........................(3)
第3章软件实验.................................(4)
3.1两个数相乘的实验..............................(4)
3.1.1两个数相乘的实验程序框图....................(4)
3.1.2两个数相乘的实验程序代码....................(6)
3.2十进制的BCD码减法运算.........................(8)
3.2.1十进制的BCD码减法运算程序框图...............(8)
3.2.2十进制的BCD码减法运算程序代码...............(9)
第4章硬件实验.................................(10)
4.1LCD显示实验..................................(10)
4.1.1LCD显示实验程序框图........................(10)
4.1.2LCD显示实验程序代码........................(11)
第5章课程设计心得体会.......................(13)
第6章参考文献.................................(14)
第1章课程设计内容要求和目的
1.1、设计内容
1.1.1、软件实验:
(1)两个数相乘的实验:
实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,算式结果在屏幕上显示出来。
(2)十进制的BCD码减法运算:
计算X-Y=Z,其中X、Y、Z为BCD码。
1.1.2、硬件实验:
编程在液晶屏上显示汉字“北京理工达盛科技有限公司”。
1.2、设计要求
(1)软件实验要求设计好程序并运行,显示;
(2)硬件实验要求能够在试验台中进行调试;
1.3、设计目的
通过硬件和软件实验的设计、编程和调试,要求学会:
1了解汇编语言的使用和设计;
2掌握微机控制系统的设计和软件的调试。
第2章设计方法与步骤
1、设计方法:
使用汇编语言对各部件进行分解设计。
2、设计步骤:
(1)功能和性能指标分析:
对题目的各项要求进行分析,整理出系统和具体系统设计所需的更具体、更详细的功能要求和技术性指标数据,以求得设计的原始依据。
(2)分解软件单元设计:
很好地理解系统的工作原理,正确利用汇编语言对具体功能的编程实现。
(3)画出总体系统框图,并对各单元部分进行语言设计的分析和程序的编写,并检查编写程序中出现的错误。
(4)按总的编程软件,调试并改进。
第3章软件实验
3.1两个数相乘的实验:
程序框图:
↓
结束
乘数→BL
↓
BL中数由ASSII码转化为十六进制数
↓
SI指向被乘数
↓
DI指向储存结果区域(预清0)
↓
计数值5→CX
↓
取被乘数[SI]单元与BL相乘
↓
AA调整
↓
结果低位与前次的进位[DI]相加
↓
AAM调整
↓
结果[DI]
↓
DI指向下一单元本次计算的进位→[DI]
↓
↓
CX=6
↓
将[DI]内存单元里的数存放到DL中,并把ASUII码转换为十进制数
↓
在屏幕上显示数据
↓
DI指向上一单元本次计算的进位→[DI]
↓
程序代码:
DATASEGMENT;定义数据段
ADB'2','3','5','3','1';被乘数
BDB'4';乘数
MDB6DUP(0);6位字节型存储单元
SDB'13532*4=$';输出的公式
DATAENDS;定义数据段结束
CODESEGMENT;定义堆栈段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA;段说明
START:
MOVAX,DATA
MOVDS,AX;DATA-->DS
MOVES,AX;DATA-->ES
MOVSI,OFFSETA;A为源操作数
MOVDI,OFFSETM;B为目的操作数
MOVCX,5;循环5次
ANDB,0FH;将ASCII码数据转换成二进制形式
MOVBYTEPTR[DI],0;将[DI]的数据类型换成字节型
L1:
MOVAL,[SI];乘数与被乘数相乘
ANDAL,0FH;取AL的低四位
MULB;AL*B
AAM;对BCD码乘法AL*B的结果进行调整
ADDAL,[DI];AL加上低位的进位
AAA;对ASCII码加法结果调整
MOV[DI],AL;把乘积的低位存入[DI]内存单元
INCDI;DI自加1
MOV[DI],AH;把乘积的高位存入[DI]内存单元
INCSI;SI自加1
LOOPL1;跳转到L1
MOVDX,OFFSETS;返回段内偏移量
MOVAH,9;写属性/字符到当前光标位置
INT21H;系统功能调用
MOVCX,6;循环6次
L2:
MOVDL,[DI];将[DI]内存单元里的数存放到DL中
ADDDL,30H;把ASUII数转换为十进制数
MOVAH,02H;设定光标位置
INT21H;显示所得数据
DECDI;DI自减1
LOOPL2;跳转到L2
MOVAX,4CH;终止当前程序并返回调用程序
INT21H;系统功能调用
CODEENDS;堆栈段结束
ENDSTART;结束程序
3.2十进制的BCD码减法运算
程序框图:
程序代码:
datasegment;数据段声明
xdb37h;第一个数据给被减数
ydb32h;第二个数据给减数
zdb?
;结果放z中
dataends;数据段结束
stacksegment;堆栈段声明
stapdb100dup(?
);分配堆栈大小
topequlengthstap;堆栈长度
stackends;堆栈段结束
codesegment;定义代码段
assumecs:
code,ds:
data,ss:
stack;伪指令指明在那个段的寄存器
start:
movax,data;初始数据段
movds,ax;将ax送到ds中
movax,stack;初始堆栈段
movss,ax;将ax送到是ss中
movsp,top;将top送到sp中
movsi,offsetx;被减数偏移地址送SI
moval,[si];被减数送AL
movdi,offsety;减数偏移地址送DI
subal,[di];减后的结果送AL
das;DAS调整
movdi,offsetz;结果的偏移地址送DI
mov[di],al;结果送DI
movah,4ch;返回DOS
int21h;结束
codeends;代码段结束
endstart;程序结束
第4章硬件实验
4.1LCD显示实验
程序框图:
程序代码:
assumecs:
code;伪指令指明在那个代码段
codesegmentpublic;定义公共段
org100h;伪指令开始地址
start:
movdx,04a6h;控制寄存器地址
movax,88h;A口方式0输出,B口方式0输出,C口低四位输出,高四位输入口
outdx,ax;输出
movax,70h;第一行地址
outdx,ax;输出
moval,0f4h;写命令控制地址
callcomd;调用写命令
calldelay;延迟时间
start1:
movsi,offset[table]
movcx,60;取模的次数
wr1:
movdx,04a4h;C口地址
inax,dx;输入
andax,80h;取C口最高位地址
jnzwr1;等于0顺序执行
moval,[si];取TABLE的值
callcomd;写命令
incsi;取下一个TABLE的值
loopwr1;循环直到取完
calldelay;调用延迟函数
ok:
jmpstart1
delay:
movcx,1000h;延迟函数大约2*2*16^3/1000=1.6MS
dlyb:
loopdlyb
ret
comd:
movdx,04a0h;A口地址
outdx,al;输出
movdx,04a6h;控制寄存器地址
movax,71h;写入第二行地址
outdx,ax;输出
mon:
movdx,04a4h;C口地址
inax,dx;输入
andax,80h;取最高位地址
jzmon;当最高位为1顺序执行
movdx,04a6h;指向控制口
movax,70h;在第一行显示
outdx,ax;输出显示
ret;返回
table:
DB0F0H,01D,00D,17D,17D,0F0H,02D,00D,30D,09D;显示字符取模
DB0F0H,03D,00D,32D,77D,0F0H,04D,00D,25D,04D
DB0F0H,05D,00D,20D,79D,0F0H,06D,00D,42D,02D
DB0F0H,01D,01D,31D,38D,0F0H,02D,01D,28D,28D
DB0F0H,03D,01D,51D,48D,0F0H,04D,01D,47D,62D
DB0F0H,05D,01D,25D,11D,0F0H,06D,01D,43D,30D
codeends;代码段结束
endstart;程序结束
第5章心得体会
通过这次课设,让我深刻的明白了,理论和实践相结合的重要性。
如果只会理论,而不注重实践,那么即使理论再好,动手能力也不见得很厉害。
设计题目下来,首先得认真的分析原理,然后仔细的查阅资料。
这次课程设计并不是很难,主要的困难来自对程序的理解。
功夫不负有心人,最后让我对原理有了清晰的认识。
编程,要写的代码很多,同时一种题目,有很多种方法可以去解决。
所以,启发了我,在以后的学习当中,遇到问题和难题时候,不要纠结于一种方法,要多多思考。
第6章参考文献
[1]周荷琴,吴秀清.《微型计算机原理与接口技术》,中国科学技术大学出版社,2008年版
[2]吴同茂,李志民.《微机原理与接口技术实验及课程设计指导书》,中南大学信息科学与工程学院,2010年10月
[3]李广波,王海,李岗.《微机接口技术与实例》,国防工业出版社,2010年版
[4]王玉良,吴晓非,《微机原理与接口技术》,北京邮电大学出版社,2006年版
致谢
从开始知道这个课设的内容时候,同学之间就相互讨论着。
特别是本课设中的乘法编程,一开始感觉很难。
后来在老师和同学的帮助下,慢慢的研究出来了。
通过这次的课设,让我知道了,学习这事,不是马马虎虎就能学好的。
最后诚挚的感谢李老师,辛苦的教我们这门课程《微机原理与接口技术》,最后祝老师工资顺利,身体健康!
!
!