微机原理实验指导书反编译码.docx
《微机原理实验指导书反编译码.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书反编译码.docx(42页珍藏版)》请在冰豆网上搜索。
![微机原理实验指导书反编译码.docx](https://file1.bdocx.com/fileroot1/2023-5/29/deeb9122-d5cd-4832-88f2-d4b4bcdec19d/deeb9122-d5cd-4832-88f2-d4b4bcdec19d1.gif)
微机原理实验指导书反编译码
微机原理实验
指导书
商丘师范学院物理与信息工程系编
实验一二进制多位加法运算实验-2-
一、实验目的-2-
二、实验仪器-2-
三、实验原理-2-
四、实验步骤-3-
五、问题思考-3-
实验二数码显示实验-4-
一、实验目的-4-
二、实验仪器-4-
三、实验原理-4-
四、实验步骤-6-
五、问题思考-6-
实验三数据块移动实验-8-
一、实验目的-8-
二、实验仪器-8-
三、实验原理-8-
四、实验步骤-9-
五、问题思考-9-
实验四多分支程序实验-11-
一、实验目的-11-
二、实验仪器-11-
三、实验原理-11-
四、实验步骤-12-
五、问题思考-12-
实验五8255A并行口实验-14-
一、实验目的-14-
二、实验仪器-14-
三、实验原理-14-
四、实验步骤-16-
五、问题思考-17-
实验六8259单级中断控制器实验-19-
一、实验目的-19-
二、实验仪器-19-
三、实验原理-19-
四、实验步骤-23-
五、问题思考-23-
实验一二进制多位加法运算实验
一、实验目的
(1)学习使用加法类运算指令编程及调试方法
(2)理解程序、数据在存储器中的存储方式
二、实验仪器
微机、微机原理接口实验仪
三、实验原理
计算X+Y+Z=?
(X、Y、Z为16位二制数)。
由于本实验是三个十六位二制数相加运算,因此,当X+Y时要考虑用ADC指令,把进位C加到结果的高16位中,当(X+Y)+Z时,再把进位C加到结果的高16位中,本实验设定三个加数0FFFFH,计算结果应为2FFFDH。
数据X、Y、Z存放在内存4000H~4005H单元中。
运算结果保留在内存4100H~4102H单元中,其中4102H单元存放进位。
程序流程图:
实验程序:
CODESEGMENT;程序段开始
ASSUMECS:
CODE;定义CS为程序段段寄存器
ORG2CA0H;程序从存储器地址2CA0H开始存放
START:
CLC;清除进位标志
MOVSI,4000H;把数4000H存入SI寄存器
MOV[SI],0ffffH;被加数0ffffH(X)存入SI指定的存储器单元(4000H、4001H)10000
MOV[SI+2],0ffffH;加数0ffffH(Y)存入SI+2指定的存储器单元(4002H、4003H)20000
MOV[SI+4],0ffffH;加数0ffffH(Z)存入SI+4指定的存储器单元(4004H、4005H)30000
MOVAX,0000H;清除和的进位存储单元(4102H单元=0)
MOV[SI+102H],AX;
MOVAX,[SI];从存储器中取出被加数(X),
ADDAX,[SI+2];从存储器中取出加数(Y),实现X+Y,和在AX寄存器中,进位在CY中
ADC[SI+102H],0000;把进位存入4102H单元,[SI+102H]+0+CY
ADDAX,[SI+4];(X+Y)+Z
MOV[SI+100H],AX;X+Y+Z和的低16位存入4100H、4101H中
ADC[SI+102H],0000;(X+Y)+Z和的进位存入4102H单元中
JMP$;循环执行JMP指令,程序完成
CODEENDS;程序段结束
ENDSTART;程序结束
四、实验步骤
(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S1.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)运算结果保留在内存4100H~4102H单元中,点击DICE-8086K软件中存贮器RAM窗口,输入RAM的起始地址4100、4101、4102,单元内容应为FD、FF、02。
(3)连续运行程序,从程序、数据存储器相应地址查看程序代码、运算数据、运算结果。
(4)修改运算数据X=10000、Y=20000、Z=30000,单步运行程序,观察存储器窗口、查看运行结果。
27104E207530
五、问题思考
(1)能不能直接把变量X、Y、Z放入内存?
(2)怎样修改运算数据?
(3)查看运行结果时应注意什么问题?
实验1二进制多位加法运算程序反编译代码
地址存储值反编译的指令
2CA0F8CLC
2CA1BE0040MOVSI,4000
2CA4C704FFFFMOVWORDPTR[SI],FFFF
2CA8C74402FFFFMOVWORDPTR[SI+02],FFFF
2CADC74404FFFFMOVWORDPTR[SI+04],FFFF
2CB2B80000MOVAX,0000
2CB5MOV[SI+0102],AX
2CB98B04MOVAX,[SI]
2CBBADDAX,[SI+02]
2CBEADCWORDPTR[SI+0102],+00
2CC3ADDAX,[SI+04]
2CC6MOV[SI+0100],AX
2CCAADCWORDPTR[SI+0102],+00
2CCFEBFEJMP2CCF
实验二数码显示实验
一、实验目的
(1)了解LED数码管动态显示的工作原理及编程方法。
(2)理解显示缓冲器、字型码,掌握查表方法。
二、实验仪器
微机、微机原理接口实验仪
三、实验原理
实验箱数码显示电路如图所示,驱动数码管需要两个条件,一是通过字形代码端口输出字形代码,二是通过位型代码端口输出位型代码。
字形代码放在字形代码表中,使用DB指令建立表格,位型代码由右移指令实现。
显示数据由内存中的显示缓冲区提供,经过查表指令取出字形显示代码输出显示,
采用使用动态显示方式,循环输出显示代码。
程序流程图:
实验程序:
CODE SEGMENT;程序段开始
ASSUMECS:
CODE ;定义CS为程序段段寄存器
ORG2DF0H;程序从存储器地址2DF0H开始存放
START:
JMPSTART0;跳到程序开始处
PA EQU0FF21H;把PA字符定义给字位口地址0FF21H,使程序中的PA代表0FF21H
PB EQU0FF22H;把PB字符定义给字形口地址0FF22H
PC EQU0FF23H;把PC字符定义给键入口地址0FF23H
BUF DB?
,?
,?
,?
,?
,?
;在存储器中预定6个存储单元,作为6位数码管的显示缓冲区
data1:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h;定义显示字型码
db86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0ffh,0ffh,0ffh
START0:
CALLBUF1;程序开始,调用BUF1子程序
CON1:
CALLDISP;调用显示子程序
JMPCON1;跳转到CON1,进行主程序循环
DISP:
MOVAL,0FFH;把0FFH放入AX寄存器的低8位AL寄存器
MOVDX,PA;字位口地址0FF21H存入DX寄存器
OUTDX,AL;把0FFH送到字位口,准备把所有数码管熄灭
MOVCL,0DFH;6位数码管最高位的字位码存入CL寄存器
MOVBX,OFFSETBUF;把显示缓冲区首地址存入BX寄存器
DIS1:
MOVAL,[BX];从显示缓冲区中取出一个显示码存入AX的低8位AL
MOVAH,00H;AX寄存器高八位清零
PUSHBX;把BX寄存器的值存入堆栈存储器,以用于新的场合
MOVBX,OFFSETDATA1;把字型码表的首地址存入BX寄存器
ADDBX,AX;显示码+字型码表首地址=表内单元地址
MOVAL,[BX];查表,把某个显示码的字型码从存储器取出
POPBX;恢复原来BX的值
MOVDX,PB;字形口地址0FF22H存入DX寄存器
OUTDX,AL;把字型码输出到字形口地址0FF22H
MOVAL,CL;把字位码存入AL寄存器
MOVDX,PA;字位口地址0FF21H存入DX寄存器
OUTDX,AL;把字位码输出到字位口地址0FF21H
PUSHCX;把CX寄存器的值存入堆栈存储器,以用于新的场合
DIS2:
MOVCX,00A0H;把数00A0H存入寄存器CX,作为定时常数
LOOP$;如果CX—1≠0,重复执行指令LOOP,延时
POPCX;恢复原来CX的值
CMPCL,0FEH;比较CL寄存器的值是否等于0FEH
JZLX1;等于则跳转到LX1处,6位数码管显示完毕
INCBX;没有显示完就让BX+1,指向显示缓冲区的下一位
RORCL,1;循环右移CL寄存器的值,把显示位形码修改成下一位
JMPDIS1;跳转到DIS1
LX1:
MOVAL,0FFH;熄灭所有数码管
MOVDX,PB
OUTDX,AL
RET;子程序返回
BUF1:
MOVBUF,0DH;2把DICE88显示码存入显示缓冲区子程序
MOVBUF+1,01H0
MOVBUF+2,0CH0
MOVBUF+3,0EH8
MOVBUF+4,08H10
MOVBUF+5,08H10
RET
;-------------------------------------------------------
CODEENDS;程序段结束
ENDSTART;程序结束
四、实验步骤
(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)数码管显示“DICE88”字样。
(3)连续运行程序,从程序数据存储器相应地址查看程序代码、显示缓冲区、字型码表。
(4)修改参数,使数码管显示2008字样,单步运行程序,观察寄存器窗口、查看运行结果。
五、问题思考
(1)分析程序中BX、DX寄存器的作用。
(2)怎样控制数码管循环点亮的循环方式?
实验2数码显示实验程序反编译代码
2DF0EB23JMP2E15
2DF290NOP
2DF30000ADD[BX+SI],AL
2DF50000ADD[BX+SI],AL
2DF70000ADD[BX+SI],AL
2DF9C0DBC0
2DFAF9STC
2DFBA4MOVSB
2DFCB099MOVAL,99
2DFE92XCHGDX,AX
2DFF82F880CMPAL,80
2E0290NOP
2E038883C6A1MOV[BP+DI+A1C6],AL
2E07868EFF0CXCHGCL,[BP+0CFF]
2E0B89DEMOVSI,BX
2E0DC78CF3BF8FFFMOVWORDPTR[SI+BFF3],FF8F
2E13FFFF?
?
?
DI
2E15E83F00CALL2E57
2E18E80200CALL2E1D
2E1BEBFBJMP2E18
2E1DB0FFMOVAL,FF
2E1FBA21FFMOVDX,FF21
2E22EEOUTDX,AL
2E23B1DFMOVCL,DF
2E25BBF32DMOVBX,2DF3
2E288A07MOVAL,[BX]
2E2AB400MOVAH,00
2E2C53PUSHBX
2E2DBBF92DMOVBX,2DF9
2E3003D8ADDBX,AX
2E328A07MOVAL,[BX]
2E345BPOPBX
2E35BA22FFMOVDX,FF22
2E38EEOUTDX,AL
2E398AC1MOVAL,CL
2E3BBA21FFMOVDX,FF21
2E3EEEOUTDX,AL
2E3F51PUSHCX
2E40B9A00FMOVCX,0FA0
2E43E2FELOOP2E43
2E4559POPCX
2E4680F9FECMPCL,FE
2E497405JZ2E50
2E4B43INCBX
2E4CD0C9RORCL,1
2E4EEBD8JMP2E28
2E50B0FFMOVAL,FF
2E52BA22FFMOVDX,FF22
2E55EEOUTDX,AL
2E56C3RET
2E572ECS:
2E58C606F32D0DMOVBYTEPTR[2DF3],0D
2E5D2ECS:
2E5EC606F42D01MOVBYTEPTR[2DF4],01
2E632ECS:
2E64C606F52D0CMOVBYTEPTR[2DF5],0C
2E692ECS:
2E6AC606F62D0EMOVBYTEPTR[2DF6],0E
2E6F2ECS:
2E70C606F72D08MOVBYTEPTR[2DF7],08
2E752ECS:
2E76C606F82D08MOVBYTEPTR[2DF8],08
2E7BC3RET
实验三数据块移动实验
一、实验目的
(1)了解内存中数据块移动方法
(2)掌握分支程序的设计方法
二、实验仪器
微机、微机原理接口实验仪
三、实验原理
程序要求把内存中一数据区(称为源数据块)传送到内存另一数据区(称为目的数据块)。
源数据块和目的数据块在存贮中可能有三种情况,如下图所示。
对于两个数据块分离的情况,如图(a),数据的传送从据块的首址开始,或者从数据块的末址开始均可。
但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出如下结论:
当源数据块首址大于目的块首址时,从数据块首地址开始传送数据。
当源数据块首址小于目的块首址时,从数据块末址开始传送数据。
程序流程图:
实验程序:
CODESEGMENT;程序段开始
ASSUME CS:
CODE;定义CS为程序段段寄存器
ORG2EF0H;程序从存储器地址2EF0H开始存放
START:
MOVCX,0100H;数据传送个数0100H存放CX寄存器
MOVSI,4000H4100H;源地址4000H存入源地址寄存器SI
MOVDI,4100H4000H;目的地址4100H存入目的地址寄存器DI
CMPSI,DI;比较SI和DI的值的大小,判断
JAFADR;SI>DI则跳转到FADR处,从地址的头部开始传送数据
ADDSI,CX;SI<DI则地址的尾部开始传送数据,SI+CX形成尾部源地址
ADDDI,CX;DI+CX形成尾部目的地址
DECSI;指向第一个数据源地址
DECDI;指向第一个数据目的地址
CON1:
MOVAL,[SI];从源地址取出一个数据存入AL寄存器,地址减量传送
MOV[DI],AL;把数据存入目的地址
DECSI;减量修改源地址指针
DEC DI;减量修改目的地址指针
DEC CX;修改数据个数
JNE CON1;标志ZF≠0(CX—1≠0)则跳转到CON1,移动下一个数据
JMP$;标志ZF=0(CX—1=0)则传送结束
FADR:
MOVAL,[SI];从源地址取出一个数据存入AL寄存器,地址增量传送
MOV[DI],AL;把数据存入目的地址
INCSI;增量修改源地址指针
INCDI;增量修改目的地址指针
DECCX;修改数据个数
JNEFADR;标志ZF≠0(CX—1≠0)则跳转到FADR,移动下一个数据
JMP$;标志ZF=0(CX—1=0)则传送结束
CODE ENDS;程序段结束
ENDSTART;程序结束
四、实验步骤
(1)在源数据块4000H~40FFH中首址、末址几个单元,填入几个标志性数据。
(2)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S8.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(3)复位RST键,查看目的数据块4100H~41FFH数据是否和源数据块4000H~40FFH单元相一致。
(4)让目的地址DI和源地址SI的值对调,重新在源地址填入几个标志性数据,执行程序,查看运行结果。
五、问题思考
(1)程序是怎样实现循环控制的?
(2)分析SI、DI寄存器的作用。
实验3数据块移动程序反编译代码
地址存储值反编译的指令
2EF0B90001MOVCX,0100
2EF3BE0040MOVSI,4000
2EF6BF0042MOVDI,4100
2EF93BF7CMPSI,DI
2EFB7711JA2F0E
2EFD03F1ADDSI,CX
2EFF03F9ADDDI,CX
2F014EDECSI
2F024FDECDI
2F038A04MOVAL,[SI]
2F058805MOV[DI],AL
2F074EDECSI
2F084FDECDI
2F0949DECCX
2F0A75F7JNZ2F03
2F0CEBFEJMP2F0C
2F0E8A04MOVAL,[SI]
2F108805MOV[DI],AL
2F1246INCSI
2F1347INCDI
2F1449DECCX
2F1575F7JNZ2F0E
2F17EBFEJMP2F17
实验四多分支程序实验
一、实验目的
(1)掌握程序散转的方法,实现程序的多分支转移
二、实验仪器
微机、微机原理接口实验仪
三、实验原理
多分支程序一般用于实现键盘功能的实现,当按键的键值被读入内存指定单元后,为实现键的功能需要根据键值跳往对应程序完成相应功能。
方法是把每个程序的首地址先存放在一个表格中,利用键值查表把查得的值作为地址再利用跳转指令就可实现。
程序流程图:
实验程序:
CODESEGMENT;程序段开始
ASSUME CS:
CODE;定义CS为程序段段寄存器
ORG2F40H;程序从存储器地址2F40H开始存放
START: