微机原理与接口实验报告实验一INTRL88软件实验杭州电子科技大学自动化09级.docx
《微机原理与接口实验报告实验一INTRL88软件实验杭州电子科技大学自动化09级.docx》由会员分享,可在线阅读,更多相关《微机原理与接口实验报告实验一INTRL88软件实验杭州电子科技大学自动化09级.docx(16页珍藏版)》请在冰豆网上搜索。
![微机原理与接口实验报告实验一INTRL88软件实验杭州电子科技大学自动化09级.docx](https://file1.bdocx.com/fileroot1/2023-1/2/24f61b3b-3b52-4a3d-a670-3a95395c5320/24f61b3b-3b52-4a3d-a670-3a95395c53201.gif)
微机原理与接口实验报告实验一INTRL88软件实验杭州电子科技大学自动化09级
微机原理与接口
实验报告
实验名称:
INTRL88软件实验
班级:
学号:
姓名:
指导老师:
2011年月日
实验一INTEL88软件实验
(一)两个多位十进制数相减实验
1.实验要求
将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前),并且先后在数码管上显示出来,相减的结果转化为ASCII码送回DATA。
2.实验目的
1.学习数据传送和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
3.程序说明:
流程图
4.源程序清单及执行结果:
NEQU5
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
PUSHCS
POPDS
LEASI,DATA1;显示子程序入口参数
MOVCX,N
CALLLEDSHOW;显示被减数
CALLDELAY
LEASI,DATA2
MOVCX,N
CALLLEDSHOW;显示减数
CALLDELAY
LEASI,DATA1
LEADI,DATA2
MOVCX,N
CLD
CLC
MOVAH,00H
MINUS:
MOVAL,[SI]
ANDAL,0FH
MOVDL,[DI]
ANDDL,0FH
SUBAL,DL
SUBAL,AH
AAS
MOVAH,00H
ADCAH,00H
ORAL,30H
MOV[SI],AL
INCSI
INCDI
LOOPMINUS
CMPAH,01H
JNESHOW
SHOW_SIGN:
LEASI,NEGTIVE
MOVCX,1
CALLLEDSHOW
CALLDELAY
SHOW:
LEASI,DATA1
MOVCX,N
CALLLEDSHOW
CALLDELAY
JMPOVER
LEDSHOWPROC
PUSHAX
PUSHBX
PUSHDX
PUSHF
MOVDX,239H;初始化(8279芯片命令字端口)
MOVAL,00;左边输入,八位显示外部译码八位显示
OUTDX,AL
MOVBX,CX
MOVCX,08
MOVDX,238H;8279芯片数据端口
MOVAL,00
NEXT1:
OUTDX,AL;熄灭所有数码管
LOOPNEXT1
MOVCX,BX
NEXT:
MOVAL,[SI];取被显示的数
LEABX,LED;查表
XLAT;查表的结果送AL
MOVDX,238H
OUTDX,AL;显示一个数
INCSI
LOOPNEXT
POPF
POPDX
POPBX
POPAX
RET
LEDDB45DUP(00H)
DB40H,80H,00H;减号,点号字型码
DB3FH,06H,5BH,4FH;0-3字型码
DB66H,6DH,7DH,07H;4-7字型码
DB7FH,6FH;8-9字型码
DB7DUP(00H)
DB77H,7CH,39H,5EH;A-D字型码
DB79H,71H,7DH,76H;E-H字型码
DB0FH;I字型码
DB7DUP(00H)
DB67H,50H,6DH;Q-S字型码
DB11DUP(00H),08H;"_"字型码
LEDSHOWENDP
DELAYPROC;延时子程序
PUSHAX
PUSHCX
PUSHF
MOVAL,0AH
DELAY1:
MOVCX,0FFFFH
DELAY2:
NOP
LOOPDELAY2
DECAL
JNZDELAY1
POPF
POPCX
POPAX
RET
DELAYENDP
OVER:
NOP
HLT
DATA1DB34H,35H,36H,37H,38H;第一个数据(作为被减数)
DATA2DB35H,34H,35H,36H,37H;第二个数据(作为减数)
RESULTDB6DUP(00H)
NEGTIVEDB2DH
CODEENDS
ENDSTART
;执行结果:
(按显示顺序)876547654511109
(二)两个数相乘的实验
1.实验要求:
实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,并先后显示到数码管上,乘法结果在数码管上显示出来。
2.实验目的:
掌握乘法指令和循环指令的用法。
3.程序说明:
流程图
4.源程序清单及执行结果:
NEQU4
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
PUSHCS
POPDS
LEASI,DATA1
MOVCX,N
CALLLEDSHOW
CALLDELAY
LEASI,DATA2
MOVCX,N
CALLLEDSHOW
CALLDELAY
CLC
LEASI,DATA1
LEADI,DATA2
LEABX,RESULT
MOVCX,N
MOVAH,00
MUL1:
PUSHCX
MOVDL,[DI];取乘数
ANDDL,0FH
MOVCX,N
LEASI,DATA1
MUL2:
MOVAL,[SI];取被乘数
ANDAL,0FH
MULDL
AAM
ADDAL,[BX]
AAA
MOV[BX],AL
INCBX
ADD[BX],AH
INCSI
LOOPMUL2
POPCX;取回乘数循环控制量
SUBBX,N-1
INCDI
LOOPMUL1
LEASI,RESULT
MOVCX,N+N
CALLLEDSHOW
CALLDELAY
JMPGAMEOVER
LEDSHOWPROC;显示子程
PUSHAX
PUSHBX
PUSHDX
PUSHF
MOVDX,239H
MOVAL,00
OUTDX,AL
MOVBX,CX
MOVCX,08
MOVDX,238H
MOVAL,00
NEXT1:
OUTDX,AL
LOOPNEXT1
MOVCX,BX
NEXT:
MOVAL,[SI]
ANDAL,0FH
LEABX,LED
XLAT
MOVDX,238H
OUTDX,AL
INCSI
LOOPNEXT
POPF
POPDX
POPBX
POPAX
RET
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H
DB5EH,79H,71H
LEDSHOWENDP;显示子程结束
DELAYPROC;延时子程
PUSHAX
PUSHCX
PUSHF
MOVAL,0AH
DELAY1:
MOVCX,06FFFH
DELAY2:
NOP
LOOPDELAY2
DECAL
JNZDELAY1
POPF
POPCX
POPAX
RET
DELAYENDP;延时子程结束
GAMEOVER:
HLT
DATA1DB32H,35H,36H,38H;第一个数据(作为被乘数)
DATA2DB39H,34H,37H,33H;第二个数据(作为乘数)
RESULTDB8DUP(00)
CODEENDS
ENDSTART
;执行结果:
(按显示顺序)4455568225313310
(三)BCD码相乘实验
1.实验要求:
实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式存放,各占一个内存单元,乘积存入在另外两个内存单元中,由于没有组合的BCD码乘法指令,程序中采用将乘数1作为计数器,累加另一个乘数的方法得到计算结果。
2.实验目的:
掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。
3.程序说明:
流程图
4.源程序清单及执行结果:
NEQU2
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
PUSHCS
POPDS
LEABX,DATA1
MOVAL,[BX]
ANDAL,0FH
PUSHBX
LEABX,TDATA1
MOV[BX],AL
POPBX
MOVAL,[BX]
MOVCL,4
SHRAL,CL
LEABX,TDATA1
MOV[BX+1],AL
OR[BX],3030H;TDATA1中存被乘数的ASCII码
LEASI,TDATA1
MOVCX,N
CALLLEDSHOW
CALLDELAY
LEABX,DATA2
MOVAL,[BX]
ANDAL,0FH
PUSHBX
LEABX,TDATA2
MOV[BX],AL
POPBX
MOVAL,[BX]
MOVCL,4
SHRAL,CL
LEABX,TDATA2
MOV[BX+1],AL
OR[BX],3030H;TDATA2中存乘数的ASCII码
LEASI,TDATA2
MOVCX,N
CALLLEDSHOW
CALLDELAY
CLC
LEASI,TDATA1
LEADI,TDATA2
LEABX,RESULT
MOVCX,N
MOVAH,00
MUL1:
PUSHCX
MOVDL,[DI];取被乘数
ANDDL,0FH
MOVCX,N
LEASI,TDATA1
MUL2:
MOVAL,[SI]
ANDAL,0FH
MULDL
AAM
ADDAL,[BX]
AAA
MOV[BX],AL
INCBX
ADD[BX],AH
INCSI
LOOPMUL2
POPCX;取回被乘数偏移量
LEABX,RESULT
INCBX
INCDI
LOOPMUL1
LEASI,RESULT
MOVCX,N+N
CALLLEDSHOW
CALLDELAY
JMPGAMEOVER
LEDSHOWPROC;显示子程
PUSHAX
PUSHBX
PUSHDX
PUSHF
MOVDX,239H
MOVAL,00
OUTDX,AL
MOVBX,CX
MOVCX,08
MOVDX,238H
MOVAL,00
NEXT1:
OUTDX,AL
LOOPNEXT1
MOVCX,BX
NEXT:
MOVAL,[SI]
ANDAL,0FH
LEABX,LED
XLAT
MOVDX,238H
OUTDX,AL
INCSI
LOOPNEXT
POPF
POPDX
POPBX
POPAX
RET
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H
DB5EH,79H,71H
LEDSHOWENDP;显示子程结束
DELAYPROC;延时子程
PUSHAX
PUSHCX
PUSHF
MOVAL,0AH
DELAY1:
MOVCX,06FFFH
DELAY2:
NOP
LOOPDELAY2
DECAL
JNZDELAY1
POPF
POPCX
POPAX
RET
DELAYENDP;延时子程结束
GAMEOVER:
NOP
DATA1DB22H;第一个数据(作为被乘数)
DATA2DB33H;第二个数据(作为乘数)
TDATA1DB2DUP(00);存放DATA1的ASCII码,方便调用
TDATA2DB2DUP(00);存放DATA2的ASCII码,方便调用
RESULTDB4DUP(00)
CODEENDS
ENDSTART
;执行结果:
(按显示顺序)2233726
心得体会:
通过本次的上机实验,让我初步认识了实验台,了解其基本的操作和上面元器件的使用和连接方法。
熟悉了INTEL88实验软件LCA88ET的基本操作,熟悉了程序的编写,编译和调试等功能,学会了实验机/仿真机的基本设置方法。
通过实验中的编程,让我进一步加深了对微机编程的认识,加深了BCD码和ASCII码的理解,学会了数码管显示子程序和延时子程序的编写。
以前只是在书本上学习堆栈、循环、调用子程序等,学习过程中有些还是不明白,通过本次实验加深了理解。
实验中也遇到了一些问题,如数码管显示不正确,仿真机和实验机不能连接正常,通过自己仔细查找原因和向同学请教,都一一解决,锻炼了我独立思考,主动解决问题的能力。