1、微机原理实验指导书反编译码微机原理实验指导书商丘师范学院物理与信息工程系编实验一 二进制多位加法运算实验 - 2 -一、实验目的 - 2 -二、实验仪器 - 2 -三、实验原理 - 2 -四、实验步骤 - 3 -五、问题思考 - 3 -实验二 数码显示实验 - 4 -一、实验目的 - 4 -二、实验仪器 - 4 -三、实验原理 - 4 -四、实验步骤 - 6 -五、问题思考 - 6 -实验三 数据块移动实验 - 8 -一、实验目的 - 8 -二、实验仪器 - 8 -三、实验原理 - 8 -四、实验步骤 - 9 -五、问题思考 - 9 -实验四 多分支程序实验 - 11 -一、实验目的 - 11
2、 -二、实验仪器 - 11 -三、实验原理 - 11 -四、实验步骤 - 12 -五、问题思考 - 12 -实验五 8255A并行口实验 - 14 -一、实验目的 - 14 -二、实验仪器 - 14 -三、实验原理 - 14 -四、实验步骤 - 16 -五、问题思考 - 17 -实验六 8259单级中断控制器实验 -19 -一、实验目的 - 19 -二、实验仪器 - 19 -三、实验原理 - 19 -四、实验步骤 - 23 -五、问题思考 - 23 -实验一 二进制多位加法运算实验一、实验目的(1)学习使用加法类运算指令编程及调试方法(2)理解程序、数据在存储器中的存储方式二、实验仪器微机、微
3、机原理接口实验仪三、实验原理计算XYZ?(X、Y、Z为16位二制数)。由于本实验是三个十六位二制数相加运算,因此,当XY时要考虑用ADC指令,把进位C加到结果的高16位中,当(XY)Z时,再把进位C加到结果的高16位中,本实验设定三个加数0FFFFH,计算结果应为2FFFDH。数据X、Y、Z存放在内存4000H4005H单元中。运算结果保留在内存4100H4102H单元中,其中4102H单元存放进位。程序流程图: 实验程序:CODE SEGMENT ;程序段开始 ASSUME CS:CODE ;定义CS为程序段段寄存器 ORG 2CA0H ;程序从存储器地址2CA0H开始存放START: CL
4、C ;清除进位标志 MOV SI,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 MOV AX,0000H ;清除和的进位存储单元(4102H单元=0) MOV SI+102H,AX ; MOV AX,SI ;从存储器中取出被加数(X), AD
5、D AX,SI+2 ;从存储器中取出加数(Y),实现X+Y,和在AX寄存器中,进位在CY中 ADC SI+102H,0000 ;把进位存入4102H单元,SI+102H+0+CY ADD AX,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指令,程序完成 CODE ENDS ;程序段结束 END START ;程序结束四、实验步骤(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打
6、开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S1.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。(2)运算结果保留在内存4100H4102H单元中,点击DICE-8086K软件中存贮器RAM窗口,输入RAM的起始地址4100、4101、4102,单元内容应为FD、FF、02。(3)连续运行程序,从程序、数据存储器相应地址查看程序代码、运算数据、运算结果。(4)修改运算数据X=10000、Y=20000、Z=30000,单步运行程序,观察存储器窗口、查看运行结
7、果。2710 4E20 7530五、问题思考(1)能不能直接把变量X、Y、Z放入内存?(2)怎样修改运算数据?(3)查看运行结果时应注意什么问题?实验1二进制多位加法运算程序反编译代码地址 存储值 反编译的指令2CA0 F8 CLC2CA1 BE0040 MOV SI,40002CA4 C704FFFF MOV WORD PTR SI,FFFF2CA8 C74402FFFF MOV WORD PTR SI+02,FFFF2CAD C74404FFFF MOV WORD PTR SI+04,FFFF2CB2 B80000 MOV AX,00002CB5 MOV SI+0102,AX2CB9 8B
8、04 MOV AX,SI2CBB ADD AX,SI+022CBE ADC WORD PTR SI+0102,+002CC3 ADD AX,SI+042CC6 MOV SI+0100,AX2CCA ADC WORD PTR SI+0102,+002CCF EBFE JMP 2CCF实验二 数码显示实验一、实验目的(1)了解LED数码管动态显示的工作原理及编程方法。(2)理解显示缓冲器、字型码,掌握查表方法。二、实验仪器微机、微机原理接口实验仪三、实验原理 实验箱数码显示电路如图所示,驱动数码管需要两个条件,一是通过字形代码端口输出字形代码,二是通过位型代码端口输出位型代码。字形代码放在字形代码
9、表中,使用DB指令建立表格,位型代码由右移指令实现。显示数据由内存中的显示缓冲区提供,经过查表指令取出字形显示代码输出显示,采用使用动态显示方式,循环输出显示代码。程序流程图:实验程序:CODE SEGMENT ;程序段开始ASSUME CS:CODE ;定义CS为程序段段寄存器 ORG 2DF0H ;程序从存储器地址2DF0H开始存放START:JMP START0 ;跳到程序开始处 PA EQU 0FF21H ;把PA字符定义给字位口地址0FF21H,使程序中的PA代表0FF21H PB EQU 0FF22H ;把PB字符定义给字形口地址0FF22HPC EQU 0FF23H ;把PC字符
10、定义给键入口地址0FF23HBUFDB ?,?,?,?,?,?;在存储器中预定6个存储单元,作为6位数码管的显示缓冲区data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h;定义显示字型码 db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0ffh,0ffh,0ffhSTART0:CALL BUF1 ;程序开始,调用BUF1子程序CON1: CALL DISP ;调用显示子程序 JMP CON1 ;跳转到CON1,进行主程序循环DISP: MOV AL
11、,0FFH ;把0FFH放入AX寄存器的低8位AL寄存器MOV DX,PA ;字位口地址0FF21H存入DX寄存器 OUT DX,AL ;把0FFH送到字位口,准备把所有数码管熄灭 MOV CL,0DFH ;6位数码管最高位的字位码存入CL寄存器 MOV BX,OFFSET BUF;把显示缓冲区首地址存入BX寄存器DIS1: MOV AL,BX ;从显示缓冲区中取出一个显示码存入AX的低8位AL MOV AH,00H ;AX寄存器高八位清零 PUSH BX ;把BX寄存器的值存入堆栈存储器,以用于新的场合 MOV BX,OFFSET DATA1;把字型码表的首地址存入BX寄存器 ADD BX,
12、AX ;显示码+字型码表首地址=表内单元地址 MOV AL,BX ;查表,把某个显示码的字型码从存储器取出 POP BX ;恢复原来BX的值 MOV DX,PB ;字形口地址0FF22H存入DX寄存器 OUT DX,AL ;把字型码输出到字形口地址0FF22H MOV AL,CL ;把字位码存入AL寄存器 MOV DX,PA ;字位口地址0FF21H存入DX寄存器 OUT DX,AL ;把字位码输出到字位口地址0FF21H PUSH CX ;把CX寄存器的值存入堆栈存储器,以用于新的场合DIS2: MOV CX,00A0H ;把数00A0H存入寄存器CX,作为定时常数 LOOP $ ;如果CX
13、10,重复执行指令LOOP,延时 POP CX ;恢复原来CX的值 CMP CL,0FEH ;比较CL寄存器的值是否等于0FEH JZ LX1 ;等于则跳转到LX1处,6位数码管显示完毕 INC BX ;没有显示完就让BX+1,指向显示缓冲区的下一位 ROR CL,1 ;循环右移CL寄存器的值,把显示位形码修改成下一位 JMP DIS1 ;跳转到DIS1LX1: MOV AL,0FFH ;熄灭所有数码管 MOV DX,PB OUT DX,AL RET ;子程序返回BUF1: MOV BUF,0DH ;2把DICE88显示码存入显示缓冲区子程序 MOV BUF+1,01H 0 MOV BUF+2
14、,0CH 0 MOV BUF+3,0EH 8 MOV BUF+4,08H 10 MOV BUF+5,08H 10 RET;- CODE ENDS ;程序段结束 END START ;程序结束四、实验步骤(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。(2)数码管显示“DICE 88”字样。(3)连续运行程序,从程序数据
15、存储器相应地址查看程序代码、显示缓冲区、字型码表。(4)修改参数,使数码管显示2008字样,单步运行程序,观察寄存器窗口、查看运行结果。五、问题思考(1)分析程序中BX、DX寄存器的作用。(2)怎样控制数码管循环点亮的循环方式?实验2数码显示实验程序反编译代码2DF0 EB23 JMP 2E152DF2 90 NOP2DF3 0000 ADD BX+SI,AL2DF5 0000 ADD BX+SI,AL2DF7 0000 ADD BX+SI,AL2DF9 C0 DB C02DFA F9 STC2DFB A4 MOVSB2DFC B099 MOV AL,992DFE 92 XCHG DX,AX2
16、DFF 82F880 CMP AL,802E02 90 NOP2E03 8883C6A1 MOV BP+DI+A1C6,AL2E07 868EFF0C XCHG CL,BP+0CFF2E0B 89DE MOV SI,BX2E0D C78CF3BF8FFF MOV WORD PTR SI+BFF3,FF8F2E13 FFFF ? DI2E15 E83F00 CALL 2E572E18 E80200 CALL 2E1D2E1B EBFB JMP 2E182E1D B0FF MOV AL,FF2E1F BA21FF MOV DX,FF212E22 EE OUT DX,AL2E23 B1DF MOV
17、CL,DF2E25 BBF32D MOV BX,2DF32E28 8A07 MOV AL,BX2E2A B400 MOV AH,002E2C 53 PUSH BX2E2D BBF92D MOV BX,2DF92E30 03D8 ADD BX,AX2E32 8A07 MOV AL,BX2E34 5B POP BX2E35 BA22FF MOV DX,FF222E38 EE OUT DX,AL2E39 8AC1 MOV AL,CL2E3B BA21FF MOV DX,FF212E3E EE OUT DX,AL2E3F 51 PUSH CX2E40 B9A00F MOV CX,0FA02E43 E2
18、FE LOOP 2E432E45 59 POP CX2E46 80F9FE CMP CL,FE2E49 7405 JZ 2E502E4B 43 INC BX2E4C D0C9 ROR CL,12E4E EBD8 JMP 2E282E50 B0FF MOV AL,FF2E52 BA22FF MOV DX,FF222E55 EE OUT DX,AL2E56 C3 RET2E57 2E CS:2E58 C606F32D0D MOVBYTE PTR 2DF3,0D2E5D 2E CS:2E5E C606F42D01 MOVBYTE PTR 2DF4,012E63 2E CS:2E64 C606F52D
19、0C MOVBYTE PTR 2DF5,0C2E69 2E CS:2E6A C606F62D0E MOVBYTE PTR 2DF6,0E2E6F 2E CS:2E70 C606F72D08 MOVBYTE PTR 2DF7,082E75 2E CS:2E76 C606F82D08 MOV BYTE PTR 2DF8,082E7B C3 RET实验三 数据块移动实验一、实验目的(1)了解内存中数据块移动方法(2)掌握分支程序的设计方法二、实验仪器微机、微机原理接口实验仪三、实验原理程序要求把内存中一数据区(称为源数据块)传送到内存另一数据区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三
20、种情况,如下图所示。对于两个数据块分离的情况,如图(a),数据的传送从据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。可以得出如下结论:当源数据块首址大于目的块首址时,从数据块首地址开始传送数据。当源数据块首址小于目的块首址时,从数据块末址开始传送数据。程序流程图: 实验程序:CODE SEGMENT ;程序段开始 ASSUME CS:CODE ;定义CS为程序段段寄存器 ORG 2EF0H ;程序从存储器地址2EF0H开始存放START: MOV CX,0100H ;数据传送个数0100H存放CX寄存器 MOV SI,400
21、0H 4100H ;源地址4000H存入源地址寄存器SI MOV DI,4100H 4000H ;目的地址4100H存入目的地址寄存器DI CMP SI,DI ;比较SI和DI的值的大小,判断 JA FADR ;SIDI则跳转到FADR处,从地址的头部开始传送数据 ADD SI,CX ;SIDI则地址的尾部开始传送数据,SI+CX形成尾部源地址 ADD DI,CX ;DI+CX形成尾部目的地址 DEC SI ;指向第一个数据源地址 DEC DI ;指向第一个数据目的地址CON1: MOV AL,SI ;从源地址取出一个数据存入AL寄存器,地址减量传送 MOV DI,AL ;把数据存入目的地址
22、DEC SI ;减量修改源地址指针 DEC DI ;减量修改目的地址指针 DEC CX ;修改数据个数 JNE CON1 ;标志ZF0(CX10)则跳转到CON1,移动下一个数据 JMP $ ;标志ZF=0(CX1=0)则传送结束FADR: MOV AL,SI ;从源地址取出一个数据存入AL寄存器,地址增量传送MOV DI,AL ;把数据存入目的地址 INC SI ;增量修改源地址指针 INC DI ;增量修改目的地址指针 DEC CX ;修改数据个数 JNE FADR ;标志ZF0(CX10)则跳转到FADR,移动下一个数据 JMP $ ;标志ZF=0(CX1=0)则传送结束CODE END
23、S ;程序段结束 END START ;程序结束四、实验步骤(1)在源数据块4000H40FFH中首址、末址几个单元,填入几个标志性数据。(2)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S8.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。(3)复位RST键,查看目的数据块4100H41FFH数据是否和源数据块4000H40FFH单元相一致。(4)让目的地址DI和源地址S
24、I的值对调,重新在源地址填入几个标志性数据,执行程序,查看运行结果。五、问题思考(1) 程序是怎样实现循环控制的?(2) 分析SI、DI寄存器的作用。实验3数据块移动程序反编译代码地址 存储值 反编译的指令2EF0 B90001 MOV CX,01002EF3 BE0040 MOV SI,40002EF6 BF0042 MOV DI,41002EF9 3BF7 CMP SI,DI2EFB 7711 JA 2F0E2EFD 03F1 ADD SI,CX2EFF 03F9 ADD DI,CX2F01 4E DEC SI2F02 4F DEC DI2F03 8A04 MOV AL,SI2F05 88
25、05 MOV DI,AL2F07 4E DEC SI2F08 4F DEC DI2F09 49 DEC CX2F0A 75F7 JNZ 2F032F0C EBFE JMP 2F0C2F0E 8A04 MOV AL,SI2F10 8805 MOV DI,AL2F12 46 INC SI2F13 47 INC DI2F14 49 DEC CX2F15 75F7 JNZ 2F0E2F17 EBFE JMP 2F17实验四 多分支程序实验一、实验目的(1)掌握程序散转的方法,实现程序的多分支转移二、实验仪器微机、微机原理接口实验仪三、实验原理多分支程序一般用于实现键盘功能的实现,当按键的键值被读入内存指定单元后,为实现键的功能需要根据键值跳往对应程序完成相应功能。方法是把每个程序的首地址先存放在一个表格中,利用键值查表把查得的值作为地址再利用跳转指令就可实现。程序流程图:实验程序:CODE SEGMENT ;程序段开始 ASSUME CS:CODE ;定义CS为程序段段寄存器 ORG 2F40H ;程序从存储器地址2F40H开始存放START:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1