微机原理实验报告_第1页
微机原理实验报告_第2页
微机原理实验报告_第3页
微机原理实验报告_第4页
微机原理实验报告_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理实验报告 2 目录 微机原理实验报告 . 1 目录 . 2 第一部 32 位微机原理实验 . 4 实验一 显示程序实验 . 4 一、 实验步骤 . 4 二、 实验程序 . 5 三、实验结果 . 5 实验二 数据传送实验 . 6 一、实验步骤 . 6 二、实验 程序 . 6 三、实验结果 . 7 实验三 数码转换程序实验 . 8 一、将 ASCII 码表示的十进制数转换为二进制数 . 8 二、将十进制数的 ASCII码转化为 BCD码 . 12 三、将十六进制数的 ASCII码转化为十进制数 . 19 四、 BCD码转换为二进制码 . 23 实验四 运算类程序实验 . 26 一、实验思路 . 26 二、实验程序 . 28 三、实验结果 . 29 实验五 分支程序设计实验 . 30 一、实验步骤 . 30 二、实验程序 . 33 三、实验结果 . 34 实验六 循环程序设计实验 . 35 一、实验步骤 . 35 二、实验程序 . 37 三、实验结果 . 38 汇编语言部分实验总结 . 39 第二部分 32 位微机接口技术实验 . 40 实验一 8259 中断控制器应用实验 . 40 一、实验内容 . 40 3 二、实验步骤 . 40 三、 实验思考题及 所填空缺的数据的分析 . 47 四、实验结果 . 48 实验二 8255 并口控制器应用实验 . 49 一、实验内容 . 49 二,实验步骤 . 50 三、实验思考题及 所填空缺的数据的分析 . 53 四、实验结果 . 54 实验三 8254 定时 /计数器应用实验 . 56 一、实验内容 . 56 二、实验步骤 . 56 三、实验思考题及 所填空缺的数据的分析 . 60 四、实验结果 . 62 接口部分实验总结 . 63 4 第一部 32 位微机原理实验 实验一 显示程序实验 一、 实验步骤 1. 运行 Tddebug 软件,选择 Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图 1-1示; 2. 使用 Compile 菜单中的 Compile和 Link对实验程序进行汇编、连接; 3. 使用 Rmrun 菜单中的 Run,运行程序,观察运行结果; 4. 使用 Rmrun 菜单中的 Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容; 5. 更改数据区中的数据,考察程序的正确性。 5 二、 实验程序 实验程序如下: DATA SEGMENT MES DB Show a as hex:, 0AH,0DH,$ SD DB a DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, OFFSET MES ;显示提示信息 MOV AH, 09H INT 21H MOV DI, OFFSET SD MOV AL, DS:DI AND AL, 0F0H ;取高 4 位 SHR AL,4 CMP AL, 0AH ;是否是 A 以上的数 JB C2 ADD AL, 07H C2: ADD AL, 30H MOV DL, AL ;显示字符 MOV AH, 02H INT 21H MOV AL, DS:DI AND AL, 0FH ;取低 4 位 CMP AL, 0AH JB C3 ADD AL, 07H C3: ADD AL, 30H MOV DL, AL ;显示字符 MOV AH, 02H INT 21H MOV AX, 4C00H ;返回 DOS INT 21H CODE ENDS END START 三、实验 结果 程序运行结果为: 6 本程序既是把字符“ a”转化为其 ASCII码并以 10进制数的形式显示在屏幕上。 实验二 数据传送实验 一、实验步骤 1. 运行 Tddebug 软件,选择 Edit菜单; 2. 使用 Compile 菜单中的 Compile和 Link对实验程序进行汇编、连接; 3. 使用 Rmrun 菜单中的 Run,运行程序,观察运行结果; 4. 使用 Rmrun 菜单中的 Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄 存器及数据区的内容; 5. 更改数据区中的数据,考察程序的正确性。 二、实验程序 DDATA SEGMENT ;定义源数据段 MSR DB HELLO,WORLD!$ LEN EQU $- MSR DDATA ENDS EXDA SEGMENT ;定义附加数据段 MSD DB LEN DUP(?) 7 EXDA ENDS MYSTACK SEGMENT STACK ;定义堆栈段 DW 20 DUP(?) MYSTACK ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE, DS:DDATA, ES:EXDA START: MOV AX, DDATA MOV DS, AX ;装载数据段寄存器 MOV AX, EXDA MOV ES,AX ;装载附加数据段寄存器 MOV SI, OFFSET MSR ;设置 SI MOV DI, OFFSET MSD ;设置 DI MOV CX, LEN NEXT: MOV AL, SI ;开始传输数据 MOV ES:DI, AL INC SI INC DI DEC CX JNZ NEXT PUSH ES POP DS ;将附 加段寄存器的段值赋给数据段寄存器 MOV DX, OFFSET MSD MOV AH, 9 INT 21H MOV AX, 4C00H ;利用 DOS 功能调用返回 DOS 状态 INT 21H CODE ENDS END START 三、实验结果 程序运行 结果为: 8 CALL INPUT 显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中 CALL DISPP 回车换行 CALL CHANGE 将数据串转化为相应的数值存放在BX 中 本程序 将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。 实验三 数码转换程序实验 一、 将 ASCII码表示的十进制数转换为二进制数 ( 1)实验思路 十进制数可以表示为: Dn 10n+Dn-1 10n-1+ +D0 100 =Di 10i 其中Di代表十进制数 1、 2、 3 9、 0。 上式可以转换为: Di10i=(Dn10+Dn -1)10)+Dn -2)10+D1)10+D0 由上式 可归纳十进制数转换为二进制的方法:从十进制数的最高位 Dn开始作乘 10加次位的操作,依次类推,则可求出二进制数结 果。 根据上面的原理,采取十进制数外部输入的方式储存在缓冲区中,调用缓冲区中的 储存数将之转化为二进制数显示在屏幕上,转换过程的流程图 下图 所示。 9 CALL LIST_BX 将 BX 中的内容以二进制的形式显示在屏幕上 返回 DOS 显示的二进制位数为 CX=16 将 BX 左移一位 将 BX 的最低位值赋给 DL 将 DL中的数值转化为其 ASCII 码 将 DL 中的 ASCII 码送往屏幕显示 10 LIST_BX 子程序流程图 ( 2)实验程序 DATA SEGMENT STRING DB Input:,$ NUM DB 6,?,6 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX CALL INPUT ;调用显示输入子程 RET 返回 11 CALL DISPP ;回车换行 CALL CHANGE ;调用将输入字符串转化为相应的十进制数值子程 CALL LIST_BX ; 调用将十进制数转化为二进制数并输出子程 MOV AH,4CH INT 21H INPUT PROC LEA DX,STRING MOV AH,09H INT 21H LEA DX,NUM MOV AH,0AH INT 21H RET INPUT ENDP CHANGE PROC LEA SI,NUM+2 MOV CL,NUM+1 MOV CH,0 MOV AX,0 MOV DI,10 NEXT: MUL DI MOV BH,0 MOV BL,SI AND BL,0FH ADD AX,BX INC SI LOOP NEXT ZERO: MOV BX,AX RET CHANGE ENDP LIST_BX PROC MOV CX,16 ;规定输出二进制位数为 16 位 ROTATE: ROL BX,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP ROTATE RET LIST_BX ENDP 12 DISPP PROC MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H RET DISPP ENDP CODE ENDS END START ( 3)实验结果 当输入为五位十进制数 00012时,输出结果如下: 二、将十进制数的 ASCII码转化为 BCD码 ( 1) 实验思路 十进制数 与 BCD 码之间的转化只是将每一位的十进制数转化为四位的二进制数,按位显示即可,而在内存中的十进制数是以其 ASCII码的形式存储,要将内存中的十进制数转化为 BCD码要先将每一位的 ASCII重新转化为十进制数,再 13 CALL INPUT 显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中 CALL DISPP 回车换行 CALL CHANGE 判定输入的数据串中是否有非十进制数, 通过判断进行输出“ FF”或 BCD码 转化为 BCD码显示。本实验要求输入不是十进制数的 ASCII码时要输出“ FF”,通过先将输入的十进制数存放在内存中先判定是否存在非十进制数的 ASCII码,如果有则输出 FF“,如果没有则将输入的十进制数转化为 BCD码输出。设计的程序流程图如下: 主程序流程图 返回 DOS 14 BL SI 指针所指的地址里储存的字符 ASCII 码 将 BL 中的 ASCII 码与 39H进行比较 LOOP1 地址指针 SI 加一, CH 减一 Y N N Y CALL DISPA 子程序 RET 返回 LOOP2 CALL STARTA 子程序 RET 返回 CHANGE 子程序流程图 DX STRINGA 字符串的有效地址 CH=0? BL 39H 15 9 号功能调用,显示字符串“ FF!” RET 返回 STARTA子程序流程图 NEXT DH 4 BL SI 中存储的字符的 ASCII 码 地址指针 SI 加一 BL BL-30H BL 左移 4 位 BL 左移 1 位 DL BL 取 DL 的最低位转化为其 ASCII 码并显示 DH 减一 N CH 减一 Y DH=0? 16 ( 2)实验程序 DATA SEGMENT STRING DB Input:,$ STRINGA DB FF!,$ NUM DB 6,?,6 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: MOV AX,DATA MOV DS,AX CALL INPUT ; 调用输入显示子程序 CALL DISP ; 调用回车换行子程序 CALL CHANGE ; 调用字符串判定及转化显示程序 MOV AH,4CH INT 21H RET MAIN ENDP DISP PROC MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H RET DISP ENDP INPUT PROC LEA DX,STRING MOV AH,09H INT 21H N Y RET 返回 DISPA 子程序流程图 CH=0? 17 LEA DX,NUM MOV AH,0AH INT 21H RET INPUT ENDP CHANGE PROC LEA SI,NUM+2 MOV CH,NUM+1 NEXT: MOV BL,SI CMP BL,39H JLE LOOP1 JMP LOOP2 LOOP1: INC SI DEC CH JNZ NEXT CALL DISPA ; 调用 BCD 码转换显示 子程序 RET LOOP2: CALL STARTA ; 调用 “FF“显示程序 RET DISPA PROC LEA SI,NUM+2 MOV CH,NUM+1 NEXTA: MOV DH,4 MOV BL,SI INC SI SUB BL,30H MOV CL,4 ROL BL,CL ROTATE: ROL BL,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H DEC DH JNZ ROTATE DEC CH JNZ NEXTA RET DISPA ENDP STARTA PROC 18 LEA DX,STRINGA MOV AH,09H INT 21H RET STARTA ENDP CHANGE ENDP CODE ENDS END START ( 3)实验结果 1)从键盘输入 54321时输出如下: 2)从键盘输入 5432a时输出如下: 19 三 、将十 六 进制数的 ASCII码转化为 十进制数 ( 1)实验思路 十六位二进制数的值域为 0-65535,最大可转换为五位十进制数。五位十进制数 可表示为: ND=D4 +D310 +D210 +D110+D0 因此,将十六位二进制数转换为五位 ASCII 码表示的十进制数,就是求D1-D4,并将它们转化为 ASCII码。 程序流程图如下: AX 内存存放的十六进制数 BX 10000D DX 0 DX: AX 除以 BX DI DX CALL DISPB 调用显示子程序 AX DI DX 0 BX 1000D DX: AX 除以 BX DI DX CALL DISPB 调用显示子程序 20 AX DI DX 0 BX 100D DX: AX 除以 BX DI DX CALL DISPB 调用显示子程序 AX DI DX 0 BL 10 AX 除以 BL DH AH CALL DISPB 调用显示子程序 DL DH DL 高四位值 0,并将 DL 中的字符转化为其 ASCII 码 2 号功能调用 返回 DOS 主程序流程图 21 ( 2)实验程序 DATA SEGMENT N DW 000CH DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,N ;十六进制数除以 10000D MOV BX,10000D MOV DX,0 DIV BX MOV DI,DX CALL DISPB MOV AX,DI ;余数除以 1000D MOV DX,0 MOV BX,1000D DIV BX MOV DI,DX CALL DISPB MOV AX,DI ;余数除以 100 MOV DX,0 MOV BH,0 MOV BL,100D DIV BX MOV DI,DX CALL DISPB DL AL DL 高四位值 0,并将 DL 中的字符转化为其 ASCII 码 2 号功能调用 返回 RET DISPB 子 程序流程图 22 MOV AX,DI ;余数除以 10 MOV DX,0 MOV BL,10 DIV BL MOV DH,AH CALL DISPB MOV DL,DH ;余数 显示 AND DL,0FH ADD DL,30H MOV AH,2H INT 21H MOV AH,4CH INT 21H DISPB PROC ;显示子程序 MOV DL,AL AND DL,0FH ADD DL,30H MOV AH,2H INT 21H RET DISPB ENDP CODE ENDS END START ( 3)实验结果 程序运行结果如下: 23 四、 BCD码转换为二进制码 ( 1)实验思路 先定义一个 4Byte 的空内存空间 ,将存储在内存空间中的四个二位十进制数的 BCD码的 转化为四个二位十进制数依次存储在定义的 4Byte的空间中,然后从定义的空间中依次提取十进制数并转化为压缩 BCD码送往屏幕输出,程序的流程图如下: SI NUM 的有效地址 BH 4 CL 4 AL SI AL 左移 4 位,然后将高四位值零 AL AL*10 BL SI 将 BL 高四位值零 AL BL+AL 将 AL 中的十进制数存入 M 中 DI M 的有效地址 BL DI DI 加一 CX 8 将 BL 中的十进制数以八位二进制数显示在屏幕上 24 ( 2)实验程序 DATA SEGMENT NUM DB 11H,22H,33H,44H M DB 4 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,NUM MOV BH,4 NEXTA: MOV CL,4 ;将 BCD 码转化为十进制数 MOV AL,SI ROL AL,CL AND AL,0FH MOV BL,10 MUL BL MOV BL,SI AND BL,0FH ADD AL,BL LEA DI,M ;将转化为的十进制数存进 M 中 MOV DI,AL LEA DI,M ;调用 M 中的十进制数并以八位二进制数的形式显示 MOV BL,DI 地址指针 SI 加一, BH 减一 回车换行 N Y 返回 DOS 主程序流程图 BH=0? 25 INC DI MOV CX,8 NEXT: ROL BL,1 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,2H INT 21H LOOP NEXT CALL DISP INC SI DEC BH JNZ NEXTA MOV AH,4CH INT 21H DISP PROC MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H RET DISP ENDP CODE ENDS END START ( 3)实验结果 程序运行结果如下: 26 实验四 运算类程序实验 一、实验 思路 实验利用累加器 AX,先求低十六位和,并存入低址存储单元,后求高 16位和,再存入高址存储单元。由于低位和可能向高位 有进位,因而高位字相加语句需用 ADC指令,则低位相加有进位时, CF=1,高位字相加时,同时加上 CF中的1。 然后将存储在内存空间中的和值显示为十六进制数在屏幕上。程序流程图如下: 将 X 的低十六位按位权赋给 AX 将 Y 的低十六位按位权赋给 BX CF 清零 AX AX+BX+CF 将 X 的高十六位按位权赋给 AX 将 Y 的高十六位按位权赋给 BX AX AX+BX+CF Z 的低两个字节 AX Z 的高两个字节 AX 27 CALL DISP 调用子程序 SI Z 的高两位有效地址 CALL DISP 调用子程序 SI Z 的低两位有效地址 返回 DOS 主程序流程图 BL SI 中的字符 地址指针 SI 加一 BH SI 中的字符 28 二、实验程序 DATA SEGMENT X DD 001565A0H Y DD 0021B79EH Z DB 4 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: MOV AX,DATA ; 将 X 的低十六位和 Y 的低十六位相加 MOV DS,AX LEA SI,X MOV AL,SI INC SI MOV AH,SI LEA DI,Y MOV BL,DI INC DI MOV BH,DI CLC ADC AX,BX LEA SI,Z ; 将相加之和存入 Z 的低两个字节 MOV SI,AX LEA SI, X+2 ; 将 X 的高十六位和 Y 的高十六位相加 MOV AL,SI INC SI MOV AH,SI LEA DI,Y+2 MOV BL,DI INC DI MOV BH,DI ADC AX,BX LEA SI,Z+2 ; 将相加之和存入 Z 的高两个字节 MOV SI,AX LEA SI,Z+2 CALL DISP ; 调用子 程序以 16 进制显示 Z 的高两个字节 LEA SI,Z CALL DISP ; 调用子程序以 16 进制显示 Z 的低两个字节 29 MOV AH,4CH INT 21H RET MAIN ENDP DISP PROC ; 以 16 进制数显示 子程序 MOV BL,SI INC SI MOV BH,SI MOV CH,4 MOV CL,4 NEXT: ROL BX,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,39H JLE PRINT ADD DL,07H PRINT: MOV AH,2H INT 21H DEC CH JNZ NEXT RET DISP ENDP CODE ENDS END START 三、实验结果 程序运行结果如下: 30 实验五 分支程序设计实验 一、实验步骤 1. 运行 Tddebug 软件,选择 Edit菜单编写实验程序,提供 8字 节的数据: 0D9H, 07H, 8BH, 0C5H, 0EBH, 04H, 9DH, 0F9H; 2. 使用 Compile 菜单中的 Compile和 Link对实验程序进行汇编、 连接; 3. 使用 Rmrun 菜单中的 Run,运行程序,观察运行结果; 4. 更改数据区中的数据,考察程序的正确性 。 实验程序流程图如下: BH N 中的第一个数 SI N 的有效地址 CX 7 地址指针 SI 加一 BH 与 SI比较 BH SI? BH 与 SI交换 CX 减一 CX=0? Y N N Y 31 DX MAX 的有效地址 9 号功能调用 AH BH CALL DISP 调用子程序 回车换行 BL N 中的第一个数 SI N 的有效地址 CX 7 地址指针 SI 加一 BL 与 SI比较 BL SI? BL 与 SI交换 CX 减一 CX=0? Y N N Y 32 DX MIN 的有效地址 9 号功能调用 BH BL CALL DISP 调用子程序 回车换行 返回 DOS 主程序流程图 33 二、实验程序 DATA SEGMENT N DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H MAX DB The Maximum is:$ MIN DB The minimum is:$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BH,N ; 比较得最大值 LEA SI,N MOV CX,7 LOOP1: INC SI CMP BH,SI JAE LOOP2 XCHG BH,SI LOOP2: DEC CX JNZ LOOP1 LEA DX,MAX CALL DISP1 ; 九号功能调用 MOV AH,BH CALL DISP ; 以 16 进制数的形式显示最大值 CALL DISP2 ; 回车换行 MOV BL,N ; 比较得最小值 LEA SI,N MOV CX,7 LOOP3: INC SI CMP BL,SI JBE LOOP4 XCHG BL,SI LOOP4: DEC CX JNZ LOOP3 LEA DX,MIN CALL DISP1 ; 九号功能调用 MOV BH,BL CALL DISP ; 以 16 进制数的形式显示最小值 CALL DISP2 ; 回车换行 MOV AH,4CH 34 INT 21H DISP PROC MOV CH,2 MOV CL,4 NEXT: MOV AX,BX ROL AX,CL MOV BX,AX MOV DL,AL AND DL,0FH ADD DL,30H CMP DL,39H JLE PRINT ADD DL,07H PRINT: MOV AH,2H INT 21H DEC CH JNZ NEXT RET DISP ENDP DISP1 PROC MOV AH,09H INT 21H RET DISP1 ENDP DISP2 PROC MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H RET DISP2 ENDP CODE ENDS END START 三、实验结果 程序运行结果如下: 35 实验六 循环程序设计实验 一、实验步骤 1. 运行 Tddebug 软件,选择 Edit 菜单编写实验程序,提供 10 字节的数据: 12H, 88H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论