微机原理实验报告.doc

上传人:jian****018 文档编号:9535335 上传时间:2020-04-06 格式:DOC 页数:73 大小:1.20MB
返回 下载 相关 举报
微机原理实验报告.doc_第1页
第1页 / 共73页
微机原理实验报告.doc_第2页
第2页 / 共73页
微机原理实验报告.doc_第3页
第3页 / 共73页
点击查看更多>>
资源描述
微机原理实验报告目录微机原理实验报告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二、实验步骤40三、实验思考题及所填空缺的数据的分析47四、实验结果48实验二 8255并口控制器应用实验49一、实验内容49二,实验步骤50三、实验思考题及所填空缺的数据的分析53四、实验结果54实验三 8254定时/计数器应用实验56一、实验内容56二、实验步骤56三、实验思考题及所填空缺的数据的分析60四、实验结果62接口部分实验总结63第一部 32位微机原理实验实验一 显示程序实验一、 实验步骤1. 运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示; 2. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接; 3. 使用Rmrun菜单中的Run,运行程序,观察运行结果; 4. 使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容; 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三、实验结果程序运行结果为:本程序既是把字符“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(?) 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三、实验结果程序运行结果为:本程序将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。实验三 数码转换程序实验一、将ASCII码表示的十进制数转换为二进制数(1)实验思路十进制数可以表示为:Dn10n+Dn-110n-1+D0100 =Di10i 其中Di代表十进制数1、2、39、0。 上式可以转换为: Di10i=(Dn10+Dn-1)10)+Dn-2)10+D1)10+D0 由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数结果。根据上面的原理,采取十进制数外部输入的方式储存在缓冲区中,调用缓冲区中的储存数将之转化为二进制数显示在屏幕上,转换过程的流程图下图所示。CALL INPUT显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中CALL DISPP回车换行CALL CHANGE将数据串转化为相应的数值存放在BX中CALL LIST_BX将BX中的内容以二进制的形式显示在屏幕上返回DOS显示的二进制位数为CX=16将BX左移一位将BX的最低位值赋给DL将DL中的数值转化为其ASCII码将DL中的ASCII码送往屏幕显示RET返回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 ;调用显示输入子程 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 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重新转化为十进制数,再转化为BCD码显示。本实验要求输入不是十进制数的ASCII码时要输出“FF”,通过先将输入的十进制数存放在内存中先判定是否存在非十进制数的ASCII码,如果有则输出FF“,如果没有则将输入的十进制数转化为BCD码输出。设计的程序流程图如下:CALL INPUT显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中CALL DISPP回车换行CALL CHANGE判定输入的数据串中是否有非十进制数,通过判断进行输出“FF”或BCD码返回DOS 主程序流程图BL SI指针所指的地址里储存的字符ASCII码将BL中的ASCII码与39H进行比较NYBL39HLOOP2CALL STARTA 子程序LOOP1地址指针SI加一,CH减一NCH=0?RET 返回YCALL DISPA子程序RET 返回CHANGE 子程序流程图DX STRINGA字符串的有效地址9号功能调用,显示字符串“FF!”RET 返回STARTA子程序流程图NEXTDH4BLSI中存储的字符的ASCII码地址指针SI加一BLBL-30HBL左移4位BL左移1位DLBL取DL的最低位转化为其ASCII码并显示DH减一NDH=0?YCH减一CH=0?NYRET 返回DISPA子程序流程图(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 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 LEA DX,STRINGA MOV AH,09H INT 21H RET STARTA ENDP CHANGE ENDP CODE ENDS END START(3)实验结果1)从键盘输入54321时输出如下:2)从键盘输入5432a时输出如下:三、将十六进制数的ASCII码转化为十进制数(1)实验思路十六位二进制数的值域为0-65535,最大可转换为五位十进制数。五位十进制数可表示为: ND=D4+D310+D210+D110+D0 因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。程序流程图如下:AX 内存存放的十六进制数BX10000DDX0DX:AX除以BXDI DXCALL DISPB调用显示子程序AX DIDX0BX1000DDX:AX除以BXCALL DISPB调用显示子程序DI DXDI DXDX:AX除以BXAX DIDX0BX100DCALL DISPB调用显示子程序 AX DIDX0BL10AX除以BLDH AHCALL DISPB调用显示子程序DL DHDL高四位值0,并将DL中的字符转化为其ASCII码2号功能调用返回DOS主程序流程图DL AL返回RET2号功能调用DL高四位值0,并将DL中的字符转化为其ASCII码DISPB子程序流程图(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 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)实验结果程序运行结果如下:四、BCD码转换为二进制码(1)实验思路先定义一个4Byte的空内存空间,将存储在内存空间中的四个二位十进制数的BCD码的转化为四个二位十进制数依次存储在定义的4Byte的空间中,然后从定义的空间中依次提取十进制数并转化为压缩BCD码送往屏幕输出,程序的流程图如下:SI NUM的有效地址BH4CL4ALSIAL左移4位,然后将高四位值零ALAL*10BLSI将BL高四位值零ALBL+AL将AL中的十进制数存入M中DI M的有效地址BLDIDI加一CX8将BL中的十进制数以八位二进制数显示在屏幕上回车换行地址指针SI加一,BH减一NBH=0?Y返回DOS主程序流程图(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 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)实验结果程序运行结果如下:实验四 运算类程序实验一、实验思路实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。然后将存储在内存空间中的和值显示为十六进制数在屏幕上。程序流程图如下:将X的低十六位按位权赋给AX将Y的低十六位按位权赋给BXCF清零AX AX+BX+CFZ的低两个字节AX将X的高十六位按位权赋给AX将Y的高十六位按位权赋给BXAX AX+BX+CFZ的高两个字节AXSIZ的高两位有效地址CALL DISP调用子程序SIZ的低两位有效地址CALL DISP调用子程序返回DOS主程序流程图BLSI中的字符地址指针SI加一BHSI中的字符二、实验程序 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的低两个字节 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三、实验结果程序运行结果如下:实验五 分支程序设计实验一、实验步骤1. 运行 Tddebug软件,选择 Edit菜单编写实验程序,提供 8字节的数据:0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H; 2. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接; 3. 使用Rmrun菜单中的 Run,运行程序,观察运行结果; 4. 更改数据区中的数据,考察程序的正确性。 实验程序流程图如下:BH N中的第一个数SIN的有效地址CX7地址指针SI加一BH与SI比较YBHSI?NBH与SI交换CX减一N CX=0?YDX MAX 的有效地址9号功能调用AHBHCALL DISP调用子程序回车换行BLN中的第一个数SIN的有效地址CX7BLSI?BL与SI比较地址指针SI加一YN NYCX=0?CX减一BL与SI交换BHBLDX MIN的有效地址9号功能调用CALL DISP调用子程序回车换行返回DOS主程序流程图二、实验程序 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 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三、实验结果程序运行结果如下:实验六 循环程序设计实验一、实验步骤1. 运行 Tddebug 软件,选择 Edit 菜单编写实验程序,提供 10字节的数据:12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H;2. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接; 3. 使用Rmrun菜单中的 Run,运行程序,观察运行结果; 4. 更改数据区中的数据,考察程序的正确性。 实验程序流程图如下:SI N的有效地址DH0BHSI,地址指针SI加一BH左移
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!