微机原理实验指导书反编译码.docx

上传人:b****4 文档编号:24656566 上传时间:2023-05-29 格式:DOCX 页数:42 大小:204.77KB
下载 相关 举报
微机原理实验指导书反编译码.docx_第1页
第1页 / 共42页
微机原理实验指导书反编译码.docx_第2页
第2页 / 共42页
微机原理实验指导书反编译码.docx_第3页
第3页 / 共42页
微机原理实验指导书反编译码.docx_第4页
第4页 / 共42页
微机原理实验指导书反编译码.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

微机原理实验指导书反编译码.docx

《微机原理实验指导书反编译码.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书反编译码.docx(42页珍藏版)》请在冰豆网上搜索。

微机原理实验指导书反编译码.docx

微机原理实验指导书反编译码

微机原理实验

指导书

商丘师范学院物理与信息工程系编

实验一二进制多位加法运算实验-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:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1