资源描述
微机原理与应用实验指导书XX大学机电工程学院刘XX实验一 调试程序实验目的 初步掌握汇编语言,可以调试简单的程序实验内容 用汇编语言编写一个简单的加法运算程序。编程提要 1.进入DEBUG状态,开机进入DOS状态。CDEBUG屏幕显示:-“-”为已进入DEBUG状态,在该提示符下可键入DEBUG命令。下划线部分为用户键入的字符或命令2键入程序并汇编用DEBUG的A命令送入程序:-A 100MOV AL,33MOV DL,35ADD DL,ALSUB DL,30MOV AH,2INT 213。执行程序-G4反汇编可以用反汇编U命令将键入的程序调出,并且可以得到每条汇编指令的机器码。-u起始地址 终止地址5退出DEBUG返回DOS状态-Q6显示内存命令D-D 0100-D 起始地址 终止地址7修改存储单元命令E-E 地址8检查和修改寄存器内容命令R格式:a. Rc. R寄存器名功能:a.显示CPU内部所有寄存器的内容和全部标志位的状态。b.显示和修改一个指定寄存器的内容和标志位的状态。9追踪与显示命令T格式:a. T=地址或 T地址b. T=地址条数10命名命令N格式:N文件名11读盘命令L12.写盘命令W实验报告(写出上机结果及现象)实验二 汇编与宏汇编程序实验目的 通过实验了解汇编就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。汇编程序可以使用小汇编程序(ASM)也可以用宏汇编程序(MASM),由于宏汇编程序不但可以代替ASM,而且可以汇编具有宏定义的汇编程序,因此我们在汇编程序时使用宏汇编程序(MASM)。实验内容 执行宏汇编程序编程提要 1.汇编过程在DOS状态下,键入MASM则调入宏汇编程序,屏幕显示与操作如下:masmMicrosoft (R) Macro AssembLe Version 5.00Copyright (C) Microsoft Corp 1981-1985,1987.All rights reserved.Source filename .ASM: ex2Object filename ex2.OBJ: ex2Source listing NUL.LST: ex2Cross- reference NUL.CRF: ex2 50678+410090 Bytes symbol space free 0 Warning Errors 0 Severe Errors2.在DOS状态下,键入LINK(或LINK EX2)则系统调入LINK程序,屏幕显示操作如下:CLINKIBM Personal Computer LinkerVersion 2.00(C) Copyright IBM Corp 1981,1982,1983Object Modules .OBJ: EX2Run File EX2.EXE:EX2List FileNUL.MAP:EX2Libraries.LIB: 3.执行程序当用连接程序LINK将目标程序(.OBJ)连接定位后,可产生可执行文件(.EXE),可以在DOS状态下执行该程序。CEX2How are you !也可以键入EX2.EXECEX2.EXEHow are you !实验报告(写出上机结果及现象)实验三 初级程序的编写与调试实验实验目的 1熟练掌握DEBUG的常用命令,学会用DEBUG调试程序2深入了解数据在存储器中的存储方法,及堆栈中数据的压入与弹出3掌握各种寻址方法及简单指令的执行过程实验内容 1.设堆栈指针Sp2000H,Ax=3000H,Bx=5000H请编一程序将Ax的内容和Bx的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用Debug调试程序进行汇编与调试。2.设DS当前段指地址,BS=0300H,SI=0002H,请用DEBUG的命令将存储器依稀偏移地址300H304H连续单元顺序装入OAH、OBH、OCH、OEH。在DEBUG状态下送入下面程序,并用单元步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,Ax中的内容是什么?程序清单如下:MOV Ax.BxMOV Ax,0304HMOV Ax,0304HMOV Ax,BxMOV Ax,0001BxMOV Ax,BxSiMOV Ax,0001BxSiHLT3.设Ax=0002H,编一个程序段将Ax的内容乘10,要求用移位的方法完成。编程提要 实验内容1 将两个寄存器的内容进行交换时,必顺有一个中间寄存器才能进行内容的交换,如果用堆栈做为中间存储单元,必顺遵循先进后出的原则。 实验内容21 其中数据寄存器中的段地址为进入Debug状态后系统自动分配的段地址。2 Si和Bx的初值 可在Debug状态下,用R命令装入,也可以在程序中用指令来完成。3 用T命令程序执行执行,可进行单步跟踪执行,每执行一条指令就可以看到各寄存器的状态。也可用R命令直接调出寄存器,来栓验各寄存器内容是否确。4 在执行程序前,可用E命令将偏移地址300H304H送入OAH,OBH,OCH,ODH。 实验内容3用移位的方法完成某些乘法运算,是较为常见的方法,操作数左作一位为操作数乘2运算。 实验报告(写出上机结果及现象)实验四 计算学生平均成绩的实验实验目的 熟悉汇编语言程序的使用,掌握十 进制数的运算和设计显示程序运行结果的格式。实验内容 编写程序,计算20个分数的平均值,并以十进制表示将结果显示在屏幕上,显示格式的要求如下: 第一行显20个分数; 第二行显示AVERAGE SCORE=平均分数。编程提要 (1)自己编写算法,将求得的平均分数的十进制值,转换成十进制表示。其算法是平均分数二进制的低4位9则加6。对于高4位,将其值乘以16再与4位十进制调整的结果相加,即得到最终结果。乘法可以用多次加法实现。 (2) 显示字符串信息用DOS功能调用INT21H,功能号为09H。 (3) 显示平均数结果时,用DOS功能调用INT21H,功能号为02H。每位数必顺将其转换成相应的ASC码。参考程序流程框图CL=0? YN AL+16H 显示20个分数的数据求20个分数的数据DAACL-1 CL求得平均分的二进制值平均分数的低4位十进制调整,结果送AL显示平均分数结果返回DOS平均分数高4位CL附:参考程序;*AVGSCORE.ASM*DATA SEGMENTMES1 DB 92,85,74,81,70,68,65,78,54,43 DB 94,100,83,88,79,83,79,69,62,60MES2 DW 92,85,74,81,70,68,65,78,54,43 DW 94,100,83,88,79,83,79,69,62,60;-MES3 DB AVERAGE SCORE=,$DATA ENDS; -CODE SEGMENTASSUME CS:CODE,DS:DATA;-START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES1 MOV AH,09H INT 21H ;显示提示信息;- MOV BX,OFFSET MES2 MOV CL,20 MOV AX,0000NEXT: ADD AX,WORD PTRBX;将各分数累加求和 ADD BX,02 LOOP NEXT MOV CL,20 DIV CL;求得平均分数和二进制值 MOV DL,AL;- AND AL,0F0H;平均分数的十进制调整 MOV CL,04 ROR AL,CL MOV CL,AL;平均分数高四位进进制值送入CL MOV AL,DL AND AL.0FH CMP AL,09 JBE HAD ADD AL,06 ; 平均分数的低4位十进调整HAD: MOV BL,16H ; 平均分数高位十进制调整NT: ADD AL,BL DAA MOV BH,AL;平均分数十进制值送入BH LOOP NT;- MOV DX,OFFSET MES3 MOV AH,09H INT 21H ; 屏幕显示平均分数提示符 MOV AL,BH AND AL,0F0H COM CH,04 ROR AL,CH ADD AL,30H MOV DL,AL MOV AH,02 INT 21H ; 显示平均分数高位;- MOV AL,BH AND AL,OFH ADD AL,30H MOV DL,AL MOV AH,02 INT 21H ; 显示平均分数的低4位;- MOV AX.4C00H INT 21H ; 返回DOSCODE ENDSEND START实验报告(写出上机结果及现象)实验五 分类统计学生成绩实验实验目的 熟悉数据分类的一种方法,并掌握屏幕上显示数据格式的方法。实验内容 编写程序,将20个百分制的分数按60,6069,7079,8089,9099和100共六档进行分类,统计出每档的个数及总数。编程提要(1)分类后的结果需要转换成ASC码并在屏幕上显示。可以将ASC码的转换程序写成子程序,供调用。 (2)显示字符串和程序可以采用DOS功能调用INT21H,功能号为09H。参考程序流程框图 FIVE9099的数据个数+18089的数据个数+17079的数据个数+1设置显示信息字符串 60的数据个数+1分类数据个数送CL SIX6069的数据个数+1分类数据的指针送Sl 取分类数据 FEVEN数据60 Y FIVE FIVE EIGHT N数据70 Y SIX NINE N TEN数据80 Y FEVEN100的数据个数+1 N数据90 Y EIGHT EIGHT N数据100 Y NINE NINE N数据=100 Y TEN N SI+1、CL -1分类总数1CL=0?N Y显示字符串、显示分类结果 返回DOS附:参考程序;*SORT.ASM*DATA SEGMENTMES0 DB 92,85,74,81,70,68,65,78,54,43,0AH,0DH DB 94,100,83,88,79,83,79,69,62,60,0AH,0DH,$MES1 DB SCORE60 :,$MES2 DB SCORE60-69 :,$MES3 DB SCORE70-79 :,$MES4 DB SCORE80-89 :,$MES5 DB SCORE90-99 :,$MES6 DB SCORE=100 :,$MES7 DB TOTAL NUMBER :,$RESULT DB 92,85,74,81,70,68,65,78,54,43 DB 94,100,83,88,79,83,79,69,62,60;-TOTAL DB 00S5 DB 00S6 DB 00S7 DB 00S8 DB 00S9 DB 00S10 DB 00DATA ENDS;-CODE SEGMENTASSUME CS:CODE,DS:DATA;-START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET RESULT ;送分类数据的指针 MOV AX,0020COMP: MOV AL,SI;取数据 CMP AL,60 JL FIVE;60转FIVE入口处理 CMP AL,70 JL SIX;70转SIX入口处理 CMP AL,80 JL ESVEN;80转ESVEN入口处理 CMP AL,90 JL EIGHT;90转EIGHT入口处理 CMP AL,100 JL NINE;100转NINE入口处理 CMP AL,100 JE TEN;100转TEN入口处理 JMP NEXTFIVE: MOV AL,S5 ADD AL,01;5存入60的个数 DAA MOV S5,AL JMP NEXTSIX: MOV AL,S6 ADD AL,01;6存入60-69的个数 DAA MOV S6,AL JMP NEXTSEVEN: MOV AL,S7 ADD AL,01;7存入70-79的个数 DAA MOV S7,AL JMP NEXTEIGHT: MOV AL,S8 ADD AL,01;8存入80-89的个数 DAA MOV S8,AL JMP NEXTNINE: MOV AL,S9 ADD AL,01;9存入90-99的个数 DAA MOV S9,AL JMP NEXTTEN: MOV AL,S10 ADD AL,01;10存入=100的个数 DAA MOV S10,ALNEXT: MOV AL,T0TAL ADD AL,01 DAA MOV TOTAL,AL;TOTAL保存分类数据的个数 INC SI LOOP COMP;- MOV DX,OFFSET MES0;显示分类的结果 MOV AH,09H INT 21 MOV DX,OFFSET MES1 MOV AH,O9H INT 21H MOV AL,S5 CALL DISP MOV DX,OFFSET MES2 MOV AH,O9H INT 21H MOV AL,S6 CALL DISP MOV DX,OFFSET MES3 MOV AH,O9H INT 21H MOV AL,S7 CALL DISP MOV DX,OFFSET MES4 MOV AH,O9H INT 21H MOV AL,S8 CALL DISP MOV DX,OFFSET MES5 MOV AH,O9H INT 21H MOV AL,S9 CALL DISP MOV DX,OFFSET MES6 MOV AH,O9H INT 21H MOV AL,S10 CALL DISP MOV DX,OFFSET MES7 MOV AH,O9H INT 21H MOV AL,TOTAL CALL DISP MOV AX,4C00H INT 21H;-DISP PROC NEAR;显示分类的结果子程序。 PUSH CX ; 用于将数据转换成ASCII码, MOV BL,AL ; 并在屏幕上显示 AND AL,0F0H MOV CL,04 ROR AL,CL ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,BL AND AL,OFH ADD AL,30H AMV DL,AL MOV AH,02H INT 21H MOV DL,0DH MOV AH,O2 INT 21H MOV DL,0AH MOV AH,02 INT 21H POP CX RETDISP ENDPCODE ENDSEND START实验报告(写出上机结果及现象)实验六 求从TABLE开始的20个无符号字节的和,结果放到SUM字单元之中实验目的 熟练使用汇编语言。实验内容 从TABLE开始的10个无符号字节的和,结果放到SUM字单元之中。编程提要 源程序学生自己编写。参考程序:DATA SEGMENTTABLE DB 12H,23H,34H,45H,56H DB 67H,78H,89H,9AH,0FDHSUM DW?DATA ENDS;STACK SEGMENT DB 50 DUP(?)STACK ENDS;CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,TABLEMOV CX,10XOR AX,AXNEXT: ADD AL,SI ADC AH,0 INC SI LOOP NEXTMOV SUM,AXHLTCODE ENDS END START实验报告(写出上机结果及现象)实验七 对于三个8位无符号数80H,39H和28H,编写 S=80H*39H-28H的程序实验目的 用汇编语言编写简单的程序。实验内容 对于三个8位无符号数80H,39H和28H,编写 S=80H*39H-28H的程序。编程提要 源程序学生自己编写。参考程序:DATA SEGMENTNUM DB 80H,39H,28HRESULT DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,NUMLEA DI,RESULTMOV AL,SIMOV BL,SI+1MUL BLMOV BH,SI+2MOV BH,0SUB AX,BXMOV DI,AXMOV AH,4CHINT 21HCODE ENDS END START实验报告(写出上机结果及现象)实验八 内存自TABLE开始的连续10个单元中有放在0-9的平方值,查表求DATA中任意数X(0=X=9)的平方值,并将结果放到RESULT中实验目的 能够熟练使用汇编语言,对内存数据求值。实验内容 内存自TABLE开始的连续10个单元中有放在0-9的平方值,查表求DATA中任意数X(0=X=9)的平方值,并将结果放到RESULT中。编程提要 源程序学生自己编写。参考程序:DSEG SEGMENTTABLE DB 0,1,4,9,16,25,36,49,64,81DATA DB ?RESULT DB?DSEG ENDS SSEG SEGMENT STACK STACKDB 100 DUP (?)SSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEGBEGIN: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXLEA BX,TABLEMOV AH,0MOV AL,DATAADD BX,AXMOV AL,BXMOV RESULT,ALMOV AH,4CHINT 21HCSEG ENDSEND BEGIN实验报告(写出上机结果及现象)实验九 编写程序,数据以字节变量BUFFER为首地址的50个单元清零实验目的 能够熟练使用汇编语言进行编程。实验内容 编写程序,数据以字节变量BUFFER为首地址的50个单元清零。编程提要 源程序学生自己编写。参考程序:DATA SEGMENTBUFFER DB 50 DUP(?)COUNT DB 50DATA ENDSSTACK SEGMENT DW 32 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV CL,COUNTLEA BX,BUFFERAGAIN: MOV BX,0INC BXCMP BX,COUNTJB AGAINMOV AH,4CHINT 21HCODE ENDSEND START0实验报告(写出上机结果及现象) 实验十 编程:把用ASCII码形式表示的数转换为二进制码。ASCII码存放在以TABLE为首的地址的内存单元中转换结果放在SUM单元中实验目的 使用汇编编程进行内码转换。实验内容 把用ASCII码存放在以TABLE为首的地址的内有单元中转换结果放在SUM。编程提要 源程序学生自己编写。参考程序:DATA SEGMENTTABLE DB 2,6,A,1SUM DB 2 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATABEGIN: MOV AX,DATAMOV DS,AXMOV CL,4MOV CH,CLLEA SI,TABLECLD XOR AX,AX XOR DX,DXNEXT1: LODS TABLE AND AL,7FH CMP AL,0JL ERRORCMP AL,9JG NEXT2SUB AL,30HJMP SHORT NEXT3NEXT2: CMP AL,AJL ERRORCMP AL,FJG ERRORSUB AL,37HNEXT3: OR DL,ALROR DX,CLDEC CHJNZ NEXT1MOV WORD PTR SUM,DXMOV AH,4CHINT 21HCODE ENDS END BEGIN实验报告(写出上机结果及现象)实验十一 编程:把存放在BUFF中的16位二进制数转换为ASCII码表示的等值数字字符串(自设一个16位数)实验目的 使用汇编编程进行内码转换。实验内容 把存放在BUFF中的16位二进制数转换为ASCII码表示的等值数字字符串(自设一个16位数)。编程提要 源程序学生自己编写。参考程序:DATA SEGMENTBUFF DW 4FB6HASCC DB 5 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,5LEA DI,ASCCXOR DX,DXMOV AX,BUFFMOV BX,0AHAGAIN:DIV BXADD DL,30HMOV DI,DLINC DIAND AX,AXJZ STOMOV DL,0LOOP AGAINSTO: MOV AX,4CH INT 21HCODE ENDS END START实验报告(写出上机结果及现象)实验十二 编程:将两个多字节二进制数求和实验目的 熟练运用汇编语言求和。实验内容 将两个多字节二进制数求和。编程提要 源程序学生自己编写。参考程序:DATA SEGMENTBUFF1 DB 4FH,0B6H,7CH,34H,56H,1FHBUFF2 DB 13H,24H,57H,68H,0FDH,9AHSUM DB 6 DUP(?)CONT DB 3DATA ENDS;CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFF1MOV DI,OFFEST BUFF2MOV BX,OFFEST SUMMOV CL,CONTMOV CH,0CLCGOON:MOV AX,SIADC AX,DIADD SI,2ADD DI,2MOV BX,AXADD BX,2LOOP GOONMOV AX,4CHINT 21HCODE ENDS END START实验报告(写出上机结果及现象)实验十三 编程:将一个二进制数转换为BCD码实验目的 熟练运用汇编语言数值转换。实验内容 将一个二进制数转换为BCD码编程提要 源程序学生自己编写。参考程序:DATA SEGMENTMBIN DW 4FB6HMBCD DB 5 DUP(?)DATA ENDS;CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AXMOV AX,MBINLEA BX,MBCDXOR DX,DXMOV CX,0AHDIV CXMOV BX,DLMOV DL,0DIV CXINC BXMOV BX,DLMOV DL,0DIV CXINC BXMOV BX,DLMOV DL,0DIV CXINC BXMOV BX,DLINC BXMOV BX,ALMOV AH,4CHINT 21HCODE ENDS END START实验报告(写出上机结果及现象)微机原理及应用实验指导书实验一 8255并行接口应用实验一、实验目的:1学习并掌握8255的各种工作方式及其应用。2学习在系统接口实验单元上构造实验电路。二、实验设备:XFJW-1教学实验系统。三、实验内容及步骤:(一)系统中的8255芯片18255可编程并行接口芯片介绍图1-1 8255引脚图图1-2(a) 工作方式控制字图1-2(b) C口按位置位/复位控制字8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5v单电源供电,能在以下三种方式下工作:方式0基本输入/出方式 ; 方式1选通输入/出方式; 方式2双向选通输入/出方式。8255的内部结构及引脚如图1-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图1-2所示。2系统中的8255芯片8255的数据线片选信号线、地址线、读写控制线等分别与系统总线连接,其A、B、C三个端口以排针形式引出,供8255实验使用,其线路如图1-3所示,端口地址如表1-1所示。图1-3 系统中的8255线路表1-1 8255端口地址信号线寄存器编址IOY7A口0e0HB口0e1HC口0e2H控制寄存器0e3H3接口实验单元中的开关和发光二极管电路图1-4图1-5 实验线路图四、实验步骤:18255接口应用实验(1)(1) 按图1-5所示实验线路接线并编写程序,编程要求:使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用1组开关信号接入端口B,端口A输出线接至一组发光二极管上,然后通过对8255芯片编程来实现输入/出功能。(2)输入程序并检查无误,经汇编、链接后装入系统。(3)运行程序,拨动开关组,观察发光二极管应一一对应。五、分析整理实验数据,写出实验程序实验二 交通灯控制实验一、实验目的:通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。二、实验设备:XFJW-1型教学实验系统。三、实验内容:如图2-1,L15、L14、L13作为南北路口的交通灯与PC5、PC6、PC7相连,L12、L11、L10作为东西路口的交通灯与PC0、PC1、PC2相连,编程使六个灯按交通灯变化规律燃灭。发光二极管“0”为亮,“1”为灭。图2-1实验接线图十字路口交通灯的变化规律要求:(1)南北路口的绿灯、东西路口的红灯同时亮30秒左右。(2)南北路口的黄灯闪烁若干次,同时东西路口红灯继续亮。(3)南北路口的红灯、东西路口的绿灯同时亮30秒左右。(4)南北路口的红灯继续亮,同时东西路口的黄灯亮闪烁若干次。(5)转(1)重复。程序流程图如下:开始设置8255C口输出南北路口绿灯亮,东西路口红灯亮长延时南北路口黄灯闪,东西路口红灯亮短延时长延时南北路口绿灯亮,东西路口红灯亮南北路口红灯亮,东西路口黄灯闪短延时四、实验步骤:(1)按图接线。(实线为与系统连接的线,虚线为与外设连接的线)(2)输入程序并检查无误,经汇编、链接后装入系统。(3)运行程序,观察发光二极管。五、分析整理实验数据,写出实验程序实验三 七段数码管一、实验目的:掌握数码管显示数字的原理。二、实验设备:XFJW-1型教学实验系统。三、实验内容:静态显示:按图连接好电路,将8255的C口PC0PC6分别与7段数码管的段码驱动输入端ag相连,位码驱动输入端1接PC7(选中)。数码管顺次显示0-7。图3-1 实验接线图(1)实验台上的七段数码管为共阴极接法,段码采用同相驱动,输入端加高电平,选中的数码管亮。(2)七段数码管的字型代码表如下页表:显示字型gfedcba段码001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fh参考程序流程图如下:开始将8255设为C口输出将段码自8255C口输出延时四、实验步骤:(1)按图接线。(实线为与系统连接的线,虚线为与外设连接的线)(2)输入程序并检查无误,经汇编、链接后装入系统。(3)运行程序,观察数码管显示情况。五、分析整理实验数据,写出实验程序实验四 38译码实验一、实验目的:掌握译码的原理。二、实验设备:XFJW-1型教学实验系统。三、实验内容:按图4-1连接好电路,将8255的C口PC0PC2分别与译码芯片74LS138的A、B、C脚相连。74LS138的Y0-Y7与电平显示单元的L0-L7相连,编程使发光二极管L0-L7依次亮。图4-1 实验接线图四、实验步骤:(1)按图4-1搭接实验线路。(实线为与系统连接的线,虚线为与外设连接的线)(2)输入源程序并检查无误,经汇编、链接后装入系统。(3)运行实验程序,观察发光二极管情况。五、分析整理实验数据,写出实验程序
展开阅读全文