《微机原理与接口技术实验报告.doc》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验报告.doc(22页珍藏版)》请在三一办公上搜索。
1、目 录实验一 数据传送2实验二 算术运算8实验三 代码转换14实验四 程序的基本结构练习20实验五 存储器(RAM 6264)扩展25实验六 可编程并行接口(8255)扩展28实验七 可编程计数/定时器(8253)扩展34实验八 A/D、D/A转换45实验九 可编程串行通信接口(8251)扩展53 实验一:数据传送实验学时:2实验类型:验证实验要求:必修一实验目的1学习程序设计的基本方法和技能,掌握用汇编语言设计、编写、调试和运行程序的方法;学习用全屏幕编辑软件QEDIT.EXE建立源程序(.ASM文件);学习用汇编软件MASM.EXE对源文件汇编产生目标文件(.OBJ文件);学习用连接程序L
2、INK.EXE对目标文件产生可执行文件(.EXE文件);学习用调试软件TD.EXE调试可执行文件;2掌握各种寻址方法以及简单指令的执行过程。二实验器材PC机三实验组织运行要求1利用堆栈实现AX的内容与BX的内容进行交换。堆栈指针SP=2000H,AX=3000H,BX=5000H;2汇编、调试、观察、记录结果;用QEDIT.EXE软件输入汇编语言源程序,以.ASM格式文件存盘;用MASM对源程序进行汇编产生二进制目标文件(.OBJ文件),再用连接程序LINK产生可执行文件(.EXE文件);用调试软件TD调试、运行程序,观察、记录结果。四实验步骤1进入子目录E:SY86后,利用QEDIT.EXE
3、(简称Q)送入以下汇编语言源程序,并以 M1.ASM文件存盘汇编语言程序的上机过程进入SY86子目录E:CDSY868 E:SY86进入QEDIT.EXE 编辑界面E:SY86 Q8 输入文件名*.ASM(如M1.ASM)后,输入源程序源程序DATASEGMENTPARAPUBLICDATA ;数据段定义DB512DUP(0) DATAENDS STACK SEGMENT PARASTACKSTACK ;堆栈段定义DB512DUP(?)STACKENDS CODESEGMENTPARAPUBLICCODE ;代码段定义ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK
4、MAINPROC FAR ;定义过程程序PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AX MOVSP,2000hMOVAX,3000hMOVBX,5000hPUSHAXPUSHBXPOPAXPOPBXRETMAIN ENDP ;结束主要部分程序CODE ENDS ;结束代码段END MAIN ;结束汇编用MASM程序产生.OBJ文件操作如下:E:SY86 MASM M1.ASM M1.OBJ8Microsoft(R)Macro Assembler Version 5.00Copyright(C)Microsoft Corp 1981-198
5、5,1987. All rights reserved.Object FilenameHEXASC.OBJ:8Source listingNUL.LST:8Cross-reference NUL.CRF:851576+385928 Bytes symbol space free0 Warning Errors0 Severe Errors以上说明汇编过程已经完成。用LINK程序产生EXE文件操作如下:E:SY86LINK M1.OBJ8Microsoft(R)Overlay Linker Version 3.60Copyright(C)Microsoft Corp 1983-1987. All
6、 rights reserved. Run File M1.EXE:8List File NUL.MAP:8Libraries .LIB:8E:SY86LINK程序输出3个文件:.EXE文件;.LIB库文件;.MAP列表文件。连接过程全部完成,可以执行程序;在TD状态下用单步运行F8对M1.EXE文件进行调试,观察、记录结果。E:SY86TD8进入TD调试软件后用单步执行F8命令从首地址开始执行指令并观察相应变化。运行结果如下:F88 AX=0000 BX=0000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7
7、SS=17F7 CS=17F7 IP=0103 NV UP DI PL NZ NA PO NC 17F7:0103 B80030MOVAX,3000F88 AX=3000 BX=0000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=0106 NV UP DI PL NZ NA PO NC 17F7:0106 BB0050MOVBX,5000F88 AX=3000 BX=5000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000
8、DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=0109 NV UP DI PL NZ NA PO NC 17F7:0109 50PUSHAXF88AX=3000 BX=5000 CX=000D DX=0000 SP=1FFE BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=010A NV UP DI PL NZ NA PO NC 17F7:010A 53PUSHBXF88 AX=3000 BX=5000 CX=000D DX=0000 SP=1FFC BP=0000 SI=0000 DI=0000 D
9、S=17F7 ES=17F7 SS=17F7 CS=17F7 IP=010B NV UP DI PL NZ NA PO NC 17F7:010B 58POPAXF88 AX=5000 BX=5000 CX=000D DX=0000 SP=1FFE BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=010C NV UP DI PL NZ NA PO NC 17F7:010C 5BPOPBXF88 AX=5000 BX=3000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000 DS=
10、17F7 ES=17F7 SS=17F7 CS=17F7 IP=010D NV UP DI PL NZ NA PO NC17F7:010D F4HLT2用以上同样的方法,完成下列程序的调试:编辑、汇编、连接、运行程序,观察、记录结果。输入以下汇编程序(分号 “;” 后面内容不需输入)用单步运行执行程序,按分号后的要求记录结果。源程序DATASEGMENT PARA PUBLIC DATADATAENDSSTACKSEGMENT PARA STACK STACKDB512 DUP (?)STACK ENDSCODESEGMENT PARA PUBLIC CODEASSUMECS:CODE,DS:
11、DATA,ES:DATA,SS:STACKSTARTPROC FARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOV DS,AXMOV ES,AX MOVAX,2000H;AH=20HMOVDS,AX ;AL=00HDS=2000HMOVSS,AX;SS=2000HAX=2000HMOVBX,2030H;BH=20HBL=30HMOVSI,BX;SI=2030HMOVDI,3040H;DI=3040HMOVSI,DI;SI=3040HMOVSP,50FFH;SP=50FFHMOVDX,SP;DH=50HDL=0FFHMOVCL,25;CL=25(19H)MOVBL,CL;CL=
12、19HBL=19HMOVAH,0F0H;AH=0F0HMOVCH,AH;CH=0F0HMOVBYTE PTRDI,64;(DI)=40HMOVWORD PTRSI,256;(SI)=00H (SI+1)=01HMOVDL,SI+1;DL=01HMOVDH,1+SI;DH=01HMOVAL,1SI;AL=01HMOVWORD PTRBXSI,34;(BX+SI)=22H(BX+SI+1)=00HMOVBX+SI+4,BL;(BX+SI+4)=19HMOVBP,2BX+DI;BP=0100HMOVBP,AL;(BP)=01HMOVAX,BPDI;AX=8B00HMOVBL,AL;BL=00HMOV
13、ES,BX;ES=2000HPUSHBX;SP=50FDH(SP,SP+1)=2000HPUSHDI;SP=50FBH(SP,SP+1)=3040HPOPCX;SP=50FDHCX=3040HPOPDX;SP=50FFHDX=2000HXCHGAX,BP;AX=0101HBP=8B00HXCHGDH,BL;DH=00HBL=20HLAHF;FLAG=NV UP DI PL NZ NA PO NC;FLAG=00000000;AH=02HSAHF;FLAG=NV UP DI PL NZ NA PO NC;FLAG=00000000;AH=02HPUSHF;SP=50FDH(SP,SP+1)=31
14、02HPOPF;SP=50FDH;FLAG= NV UP DI PL NZ NA PO NC;FLAG=00000000NOPSTARTENDPCODEENDSENDSTART以文件名“E2”存盘;单步运行程序,每运行一条指令即检查相应结果并予以记录;利用断点运行、跟踪运行和全速运行等功能调试程序、运行程序并检查结果。运行结果:各寄存器及内存变化如上。五思考题常用的数据传送指令有几种类型?试归纳并举例说明。答:常用的数据传送指令有四种类型:1.通用数据传送指令MOV OPRD1,OPRD2例:MOV AX,2000H;AX=2000H压栈指令 PUSH OPRD出栈指令 POP OPRD例:P
15、USH AX;SP=SP-2,(SP,SP+1)=AX POP AX;AX=(SP,SP+1),SP=SP+2交换指令 XCHG PORD1,OPRD2例:MOV AX,02FFH MOV BP,0001HXCHG AX,BP;AX=0001H,BP=02FFH2.累加器专用传送指令输入、输出指令 IN、OUT例:IN AX,DX;AX=( DX+1, DX) OUT DX,AX;( DX+1, DX) =AX换码指令 XLAT例:XLAT;AL=(BX+AL)3.地址传送指令有效地址送寄存器 LEA REG,SRC例:LEA SI,DAT1;SI=ADDR(DAT1)指针送DS和寄存器 LD
16、S REG,SRC例:LDS DI,BX;DI=(DS16+BX),DS=(DS16+BX+2)指针送ES和寄存器 LES REG,SRC例:LES DI,BX;DI=(DS16+BX),ES=(DS16+BX+2)4.标志寄存器传送指令标志传送指令 例:LAHF;AHPSW的低字节 SAHF;PSW的低字节AH标志进、出栈 例:PUSHF;SPSP-2,(SP+1,SP)PSW POPF;PSW(SP+1,SP),SPSP+2实验二:算术运算实验学时:2实验类型:设计实验要求:必修一实验目的1验证算术运算基本指令;2正确使用加、减、乘、除程序,为设计综合算术运算程序打好基础;3学习独立编程;
17、4深入学习、掌握TD调试软件的使用方法。二实验器材PC机三实验内容及步骤1加、减法运算要求调试以下程序源程序DATASEGMENT PARA PUBLIC DATADATAENDSSTACKSEGMENT PARA STACK STACKDB512 DUP (?)STACK ENDSCODESEGMENT PARA PUBLIC CODEASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROC FARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOV DS,AXMOV ES,AX MOV AX,2040H;AH=20H,AL=40H,CF=0
18、ADDAL,AH;AH=20H,AL=60H,CF=0MOVCX,257;CX=0101H,CF=0MOV SI,AX;SI=2060H,SUBSI,CX;SI=1F5FH,CX=010H,CF=0SUBCH,CL;CH=00H,CL=01H,CF=0ADCAX,CX;AX=2061H,CX=0001H, CF=0MOVWORD PTR SI,513;(SI,SI+1)=0201HADC SI,AL ;(SI,SI+1)=0262H,CF=0SBBAX,SI;AX=1DFFH,CF=0INCBYTE PTR SI+1 ;(SI,SI+1)=0362HDECBYTE PTR SI;(SI,SI+
19、1)=0361HDAA;AH=1DH, AL=65H, AF=1,CF=1AAA;AH=1EH, AL=0BH, AF=1,CF=1RETSTART ENDPCODE ENDSEND START运行结果:各寄存器及内存数据如上。2加、减法程序设计要求试设计、编写程序,计算(UP1)+(UP2)-(UP3),结果存放在DX中。如25+48-19=?其中UP1、UP2、UP3的内容均为二位十进制数,并以非压缩BCD码格式存入存储器:(UP1)= 0205H,(UP2)= 0408H,(UP3)= 0109HUP1 = 2050H, UP2 = 2150H, UP3 =2250H源程序DATASEG
20、MENT PARA PUBLIC DATADATAENDSSTACKSEGMENT PARA STACK STACKDB512 DUP (?)STACK ENDSCODESEGMENT PARA PUBLIC CODEASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROC FARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOV DS,AXMOV ES,AX MOV AX,0000MOV DX,0000MOV SI,2050HMOV DI,2150HMOV BP,2250HMOV WORD PTRSI,0205HMOV WORD PTRDI
21、,0408HMOV WORD PTRBP,0109HMOV AL,SI;送被加数低8位ADD AL,DI;低8位相加AAA;加法ASCII调整MOV DL,AL;暂存MOV AL,SI+1;送被加数高8位ADC AL,DI+1;带进位加AAA;加法ASCII调整XCHG AL,DL;AL与DL交换SUB AL,BP;和的低8位减减数的低8位AAS;减法ASCII调整XCHG AL,DL;AL与DL交换,存低8位结果SBB AL,BP+1;高8位带进位减AAS;减法ASCII调整MOV DH,AL;存高8位结果RETSTARTENDPCODEENDSENDSTART运行结果:DX=0504H3乘
22、法程序设计要求:试设计、编写程序,计算(A)(B)。A、B表示内存单元,分别存放着二个用非压缩BCD码表示的十进制数(如34、56)。内存单元(A)=04H,(A1)=03H,内存单元(B)=06H,(B1)=05H,计算结果应为非压缩的BCD码表示的十进制数,存放在以C为首地址的4个连续内存字节单元中。设内存单元A=2200H、B=2220H、C=2240H;源程序DATASEGMENT PARA PUBLIC DATADATAENDSSTACKSEGMENT PARA STACK STACKDB512 DUP (?)STACK ENDSCODESEGMENT PARA PUBLIC COD
23、EASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROC FARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOV DS,AXMOV ES,AX MOV AX,0MOV BX,0MOV DI,223AHMOV SI,2230HMOV AL,04H;被乘数低8位送ALMOV BL,06H;乘数低8位送BLMUL BL;相乘,AL=18H,CF=0AAM;调整,AH=02H,AL=04HMOV WORD PTR DI,AX;存结果,(DI,DI +1)= 04H,02HMOV AL,03H;被乘数高8位送ALMUL BL;被乘数高8位乘以乘数低
24、8位,AL=12H,CF=0AAM;调整,AH=01H,AL=08HADD AL,DI+1;部分积相加,AL=0AHAAA;调整,AH=02H,AL=00H,AF=1,CF=1MOV WORD PTR DI+1,AX;存结果,(DI +1,DI +2)= 00H,02HMOV AL,04H;被乘数低8位送ALMOV BL,05H;乘数高8位送BLMUL BL;相乘,AL=14HAAM;调整,AH=02H,AL=00HMOV WORD PTRSI,AX;存结果,(SI,SI +1)= 00H,02HMOV AL, 03H;被乘数高8位送ALMUL BL;被乘数高8位乘以乘数高8位,AL=0FHA
25、AM;调整,AH=01H,AL=05HADD AL,SI+1;部分积相加,AL=07HAAA;调整,AH=01H,AL=07H,AF=0,CF=0MOV WORD PTR SI+1,AX;存结果,(SI+1,SI +2)= 07H,01HMOV AL,DI;AL=04HMOV BP,2240H;乘积首址2240HMOV BP,AL ;存积低位,(2240H)=04HMOV AL,DI+1ADD AL.SI+1AAA;调整,AH=01H,AL=00H,AF=0,CF=0MOV BP+1,AL;存积低位加1,(2241H)=00HMOV AL,DI+2 ;AL=02HADC AL,SI+1 ;AL
26、=09H,AF=0,CF=0AAA;调整,AH=01H,AL=09HMOV BP+2,AL;存积低位加2,(2242H)=09HMOV AL,0ADC AL,SI+2 ;AL=01H,AF=0,CF=0AAA;调整,AH=01H,AL=01HMOV BP+3,AL;存积高位,(2243H)=01HRETSTARTENDPCODEENDSENDSTART运行结果:(2243H)=01H,(2242H)=09H,(2241H)=00H,(2240H)=04H;积=1904H4除法程序设计(选做)要求试设计、编写程序,计算(A)(B),A、B表示内存单元,数据自定。其中除数(B)是16位十六进制数,
27、存放在BX中;被除数(A)是32位十六进制数,高16位存放在DX,低16位存放在AX中;结果为32位十六进制数的商存放在BX:AX中;16位十六进制余数存放在DX中。设置数据时如果除数等于零或者商大于16位,则应考虑溢出处理。源程序(避免溢出的除法程序)STACK SEGMENT PARA STACK STACK DW32 DUP(0)STACKENDSDATA SEGMENT PARA DATADATA ENDSCODE SEGMENT PARA CODE ASSUME CS:CODE,DS:DATA,SS:STACKDIVUO PROC FAR PUSH DS MOV AX,0 PUSH
28、AX MOV AX,DATA MOV DS,AX MOV AX,1FCDH;被除数低16位 MOV DX,3B78H;被除数高16位 MOV BX,7C9AH;16位除数 CMP BX,0;除数=0? JNZ DVROK;不为零,转 DIV BX;为零,除 JMP SHORT GO_DOSDVROK:PUSH ES PUSH DI PUSH CX MOV DI,0;取出当前的INT 0向量并保存之 MOV ES,DI PUSH ES:DI PUSH ES:DI+2 LEA CX,OVR_INT;获得INT 0向量 MOV ES:DI,CXMOV CX,SEG OVR_INT MOV ES:DI
29、+2,CX DIV BX;做除法 SUB BX,BXRESTORE:POP ES:DI+2;恢复 INT 0 向量 POP ES:DI POP CX POP DI POP ESGO_DOS:RETOVR_INT:POP CX LEA CX,RESTORE PUSH CX PUSH AX MOV AX,DX SUB DX,DX DIV BX POP CX PUSH AX MOV AX,CX DIV BX POP BXIRETDIVUOENDPCODEENDSENDDIVUO运行结果:商BX:AX=7A2EH,余数DX=5821H程序流程框图开始Y除数为0?INT0 中断做除法NY有溢出?INT0
30、 中断转OVR-INT处理放除数、被除数N结束四思考题1若对两个带符号的双精度数作加、减法运算,该怎样处理。 答:如果对两个带符号的双精度数作加、减法运算,则运算应按照带符号的加、减法考虑。2在编写乘法程序时,若(B)是一个带符号非压缩的BCD码,则程序应该怎样编写。答:如果乘数是一个带符号非压缩的BCD码,则运算应按照带符号的乘法考虑。首先保存被乘数和乘数的符号位,正常运算后,在结果加上符号位。实验三:代码转换实验学时:2实验类型:设计实验要求:必修一实验目的1设计常见的代码转换程序,通过实际操作,调试并检验所设计程序的正确性;2提高独立编程的能力。二实验器材PC机三实验内容1十六进制数AS
31、CII码要求:试设计、编写程序,将一个十六进制数0FBE9H转换为ASCII码并在屏幕上显示出来。源程序 NAME HEXASCDATA SEGMENT PARA PUBLIC DATAHEX DW 0EBF9HASC DB 20 DUP(0)DATA ENDSSTACK SEGMENT PARA STACK STACKDB 512 DUP (?)STACK ENDSCODE SEGMENT PARA PUBLIC CODE ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX
32、,DATA MOV DS,AX MOV ES,AX MOV CX,0004HMOV AX, HEX;取十六进制数0EBF9H LEA BX,ASC AA: PUSH CXMOV CL,04H;给循环计数器赋转换代码长度 ROL AX,CL;十六进制数循环左移 PUSH AX AND AX,000FH CMP AL,0AH;判别是否为“09” JB ASCII;是“09”转ASCII ADD AL,07HASCII:ADD AL,30H MOV DH,AL MOV CL,04H;给循环计数器赋转换代码长度 SHR DH,CL;逻辑右移 MOV DL,AL AND DX,0F0FH OR DX,3
33、030H MOV BX,DH;(BX)=46H,(BX)=42H,(BX)=45H, (BX)=39H, INC BX MOV BX,DL INC BX POP AX POP CX LOOP AA MOV AL,$ MOV BX,AL MOV AH,09H LEA DX,ASC INT 21H RETSTART ENDP CODE ENDS END START在TD状态下分别用单步执行、全速运行对HEXASC.EXE文件进行调试、运行,结果正确;在DOS状态下运行可执行文件HEXASC.EXE,结果正确。屏幕显示:45424639。2ASCII码BCD码要求:试设计、编写程序,完成以下功能。设
34、有一组ASCII码数据:3332H,3537H,3946H,3239H,3642H,存放在起始地址为DS:150H的连续内存单元内,数组长度存入CX 。经过转换后的BCD码存放在起始地址为DS:160H的连续内存续单元内,如果待转换的数据不是十进制数的ASCII码,则对应的结果单元存放“0FFH”。源程序NAME ASCBCDDATA SEGMENT PARA PUBLICDATAORG 0150HDATA1 DW 3332H,3537H,3946H,3239H,3642HORG 0160HDB 10 DUP(?)DATA ENDSSTACK SEGMENT PARA STACKSTACKDB
35、 512 DUP(?)STACK ENDSCODE SEGMENT PARA PUBLICCODEASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROC FARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AX MOV CX,0AH;循环计数器赋转换代码数组长度LEA DI,DATA1;ASCII首址送DILEA SI,DATA2;BCD首址送SIBB: MOV BL,0FFH;错误标志BLMOV AL,DI;ASCII码送ALCMP AL,3AH;检查是否为大于9的ASCII码JNB DONE;是
36、转DONESUB AL,30H;不是,取ASCII码低4位JB DONE;小于0的十进制数,转DONEMOV BL,AL;BCD码送BLDONE:MOV AL,BL;错误标志或结果送ALMOV SI,AL;转换结果送BCD数据区INC DIINC SILOOP BB;(CX)不为0,转BBRETSTART ENDPCODE ENDSEND START运行结果:从DS:160H开始的连续内存单元的BCD码数据为: 02,03,07,05,0FF,09,09,02,0FF,06,。程序流程框图开始ASCII首址送DIBCD首址送SI数组长度送CX取待转换数Y待转换数39H?NCX-1=0?Y结束S
37、ISI+1DIDI+1置错误标志0FFHN待转换数减30H存转换结果3BCD码二进制要求:试设计、编写程序,完成以下功能。有一组非压缩的BCD码数据存放在起始地址为DS:180H的连续内存单元内,数组长度存入CX。经过转换后的二进制数存放在起始地址为DS:190H的连续内存单元内。非压缩的BCD码数据如下:0802,0103,0009,0706,0407,。源程序NAME BCD2DATA SEGMENTORG 0180HDAT1 DW 0802H,0103H,0009H,0706H,0407HORG 0190HDAT2 DB 10 DUP(?)DATA ENDSSTACK SEGMENT PARA STACKSTACKDB 512 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATAMOV DS,AX MOV ES,AX MOV CX,05H;循环计数器赋转换代码长度LEA DI,DAT1;BCD码首址送DI LEA SI,DAT2;二进制首址送SIXL:MOV AL,DI+1
链接地址:https://www.31ppt.com/p-2881999.html