微机原理实验(含解答程序)
- 格式:doc
- 大小:100.00 KB
- 文档页数:35
《微机原理》实验参考答案实验1 汇编基本指令及顺序程序设计实验实验2 分支与DOS中断功能调用程序设计实验实验3 循环结构程序设计实验实验4 存储器扩展实验实验5 8259应用编程实验实验1汇编基本指令及顺序程序设计实验一、实验目的1、掌握汇编语言的开发环境和上机过程;2、掌握DEBUG命令;3、掌握顺序程序设计方法;4、掌握寻址方式;5、理解和掌握汇编基本指令的功能。
二、实验内容1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。
要求:用3种方法实现。
答:方法一CODE SEGMENTASSUME CS:CODESTART: MOV AX,3000HMOV BX,5000HMOV CX,AXMOV AX,BXMOV BX,CXCODE ENDSEND START方法二CODE SEGMENTASSUME CS:CODESTART: MOV AX,3000HMOV BX,5000HXCHG AX,BXCODE ENDSEND START方法三CODE SEGMENTASSUME CS:CODESTART: MOV AX,3000HMOV BX,5000HPUSH AXPUSH BXPOP AXPOP BXCODE ENDSEND START2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOV AX,BX 寄存器寻址,将BX内容送AXMOV AX,[BX] 寄存器间接寻址,将DS:BX内存单元内容送AXMOV AX,10[BX] 寄存器相对寻址,将DS:BX+10内存单元内容送AX 在DEBUG调试模式,用A命令直接编辑相应指令并用T命令单步执行,执行后查询相应寄存器的值并用D命令查内存。
3、已知有如下程序段:MOV AX,1234HMOV CL,4在以上程序段的基础上,分别执行以下指令:ROL AX,CL AX=2341HROR AX,CL AX=4123HSHL AX,CL AX=2340HSHR AX,CL AX=0123HSAR AX,CL AX=0123HRCL AX,CL 带进位标志位的循环左移RCR AX,CL 带进位标志的循环右移4、设有以下部分程序段:TABLE DW 10H,20H,30H,40H,50HENTRY DW 3┇LEA BX,TABLEADD BX,ENTRYMOV AX,[BX]┇要求:(1)将以上程序段补充成为一个完整的汇编程序。
《微机原理及应用技术》课程实验报告实验一片内输入、输出实验【预习内容】1.二进制、十进制及十六进制的表示方法及相互转换方法。
二进制XXXXB如1111B 十进制XX如15 十六进制0xXX如0x0f相互转换方法:十进制转二进制方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
二进制转十进制方法为:把二进制数按权展开、相加即得十进制数。
二进制转十六进制方法为:4位二进制数按权展开相加得到1位十六进制数。
(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
十六进制转二进制方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
十进制转十六进制有两种方法间接法把十进制转成二进制,然后再由二进制转成十六进制。
直接法把十进制转十六进制按照除16取余,直到商为0为止。
十六进制转成十进制方法为:把十六进制数按权展开、相加即得十进制数。
2.C语言基本数据类型、定义方式以及赋值范围。
(1)整数类型(2)浮点类型3.写出至少一种软件延时程序并说明原理。
基本原理:利用循环结构反复执行空语句占用指令周期,实现等待延时。
void Delay1ms() //@12.000MHz{unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}4.掌握for循环及while循环,掌握if语句及switch语句。
for语句for (/*初始化 int i=0*/; /*判断条件 i<count*/; /*执行语句 i++*/) {/* code */}while语句while (/* condition */){/* code */}do{/* code */} while (/* condition */);switch/case语句switch (/*表达式*/){case/*值1*/ : /* code */; break;case/*值2*/ : /* code */; break;...default : /* code */break;}If/if-else语句if (/* condition */){/* code */}else if (/* condition */){/* code */}else{/* code */}5.什么是单片机?什么是单片机最小系统?单片机最小系统三要素是什么?单片机(Microcontrollers,亦称MCU),即单芯片微型计算机,包括了CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。
实验一汇编语言的工作环境与上机步骤【实验目的】1、熟悉汇编语言的WINDOWS环境下Emu8086的操作环境和操作方法。
2、学会用实验的方式验证理论,进一步熟悉汇编语言开发环境。
3、深刻理解寻址方式的意义以及80X86指令的各种寻址方式。
4、深刻理解80X86各种指令的真正含义及功能。
5、了解汇编语言的程序结构、完成一个简单的程序的填充。
【实验环境】硬件环境IBM/PC 及其兼容机软件环境可视化编程环境Emu8086【实验内容及要求】1、对寄存器和存储单元赋值,观察每个寄存器和存储单元的值。
首先,完成对以下寄存器和存储单元的赋值,赋值内容如下:DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1350H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H。
以下为仿真语句示例:MOV AX,1000HMOV DS,AX ;给数据段DS赋初值1000HMOV AX,2000HMOV SS,AX ;给扩展段SS赋初值 2000HMOV AX,1A2BHMOV BX,1200HMOV CX,339AHMOV BP,1200HMOV SP,1350HMOV SI,1354H ;给通用寄存器赋初值MOV [1350H],0A5HMOV [1351H],3CHMOV [1352H],0FFHMOV [1353H],26HMOV [1354H],52HMOV [1355H],0E7HMOV [26A4H],9DHMOV [26A5H],16H ;给数据段偏移量为1350H~1355H、126A4H~126A5H的存储单元赋初值MOV SS:[1350H],88HMOV SS:[1351H],51H ;给堆栈段偏移量为1350H、1351H的存储单元赋初值2、在以上环境下,请仿真以下简单指令,在下列各小题的空格中填入相应指令的仿真执行结果,并与理论分析结果相比较,确认是否一致。
《微机原理与接口技术》实验报告淮海工学院机械工程学院实验报告书课程名:微机原理与接口技术题目:实验一:程序的编辑、汇编、连接和调试班级:装备092班学号:010912206姓名:邓浩评语:成绩:指导教师:批阅时间:年月日一、目的与要求通过对一个简单程序的编辑、汇编、连接及调试,学习汇编语言程序设计上机操作的基本方法,为以后各项实验以及为实际的程序设计建立基础。
二、实验内容或题目1、验证题对给出的程序进行编辑、汇编、连接和调试。
以下程序段用以显示信息“HELLO.”。
2、设计题编写一程序,实现两个存储单元X,Y中两数相加,并将相加结果存放在SUM变量中,上机调试程序;检查执行结果。
三、实验步骤与源程序实验步骤:编辑源代码,文件名.asm开始——>运行——>输入cmd,显示dos界面查询编译环境所在路径EDIT编译源代码文件名.asm文件TLINK连接生成文件名.obj文件TD运行F8单步执行查看虚拟存储器1、验证题dseg segmentmess1 db 'hello','$'dseg endscseg segmentassume ds: dseg,cs: csegstart: mov ax,dsegmov ds,axmov dx,offset mess1mov ah,09hint 21hmov ah,4chint 21hcseg endsend start2、设计题data segmentx db 2y db 3sum db ?data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xadd al,ymov sum,almov ah,4chint 21hcode endsend start四、测试数据与实验结果(可以抓图粘贴)1、验证题2、设计题五、结果分析与实验体会通过这次实验,我对汇编语言程序设计上机操作的基本方法有了初步掌握。
实验一、I/O程序设计一.实验内容:I/O程序设计(一)实验内容:1.编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。
2.从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。
3.编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上,例:5=00000101B (二)实验步骤: 1. 画出实验流程图。
2. 运行Tddebug软件,选择Edit菜单编写实验程序 3. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
4. 使用Rmrun菜单中的Run运行程序,观察运行结果。
5. 使用Rmrun菜单中的Debug调试程序。
单步执行指令,观察各寄存器及数据区的内容。
6. 更改数据区中的数据,考察程序的正确性。
二.分析设计思想。
设计思路:首先将该数以十六进制数形式分解,然后将每一位分别转换为ASCII码送屏幕显示。
其中0H~9H之间的数加30H,即可得0H~9H的ASCII码,而AH~FH的ASCII码,则需再加7H,参见表5-1。
参考程序流程如图2-1所示。
示例程序参见参考程序清单。
三.程序清单及流程DATA SEGMENTMES DB 'Show a as hex:',0AH,0DH,'$'SD DB 'a'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MES ;显示提示信息MOV AH,09H INT 21HMOV SI,OFFSET SD 4MOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START四.实验结果。
微机原理实验报告实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容将两个多位十进制数相加, 要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1.DATA2为首的5个内存单元中(低位在前), 结果送回DATA1处。
三、程序框图图3-1四、参考程序清单程序名: XIANGJ.ASMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END EQU $-1DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1SUM DB 5 DUP(?) DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1ENDMOV DI,OFFSET DATA2ENDCALL ADDAMOV AX,4C00HINT 21HADDA PROC N EARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30HSUB BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05HCLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALDEC SIDEC DILOOP A D2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30H DEC SIDEC DIDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五: 结果分析这次试验依次将相加数和被相加数存入AL, BL, 依次从低位向高位相加, 然后把结果放在内存中, 根据程序走向, 相加的结果依次放在内存地址DS:0000到DS:0004的位置上, 和我们实验预期结果一样。
第一章习题答案1-1 请说明CPU的功能以及CPU是如何执行指令和程序的。
答:CPU的功能是执行程序和统筹处理计算机系统中各类事务。
CPU执行指令分为3步:取指令、分析指令、执行指令;计算机程序是由一条条指令按一定的顺序排列组成的,CPU执行程序的过程就是一条条指令累计执行的过程,其方式分为串行作业方式和流水线作业方式。
1-2 请说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。
答:CPU:由控制器和运算器构成,控制器的作用是执行指令和协调系统各部件的工作;运算器的作用是进行逻辑运算和算术运算。
存储器:存储计算机工作时使用的信息,即指令代码和数据代码。
I/O接口电路:具有数据缓冲、数据隔离及数据转换的功能。
1-3 请问对于容量位8K的存储器芯片,它的地址线是多少根?答:8K=8192=213,故地址线为13根。
另附:存储器的数据线由存储器的字长决定,例如一块32K×16(存储器容量显示格式:存储单元数×存储单元的字长)的存储器,其地址线为15根,数据线为16根。
1-4 将十进制数78,134,分别用二进制数、十六进制数和8421BCD吗表示。
答:(78)D=(1001110)B=(4E)H=(01111000)8421BCD(134)D=(10000110)B=(86)H=(000100110100)8421BCD注:8421BCD码为4位表示一个十进制数符,本质是符号不是数值,所以不可省略0。
1-5 将下列真值分别转化为用8位和16位二进制数表示的原码、补码和反码。
X=1000100;[X]8位原=[X]8位反=[X]8位补=01000100;[X]16位原=[X]16位反=[X]16位补=0000000001000100X= -1000100[X]8位原=11000100,[X]8位反=10111011,[X]8位补=10111100;[X]16位原=1000000001000100,[X]16位反=1111111110111011,[X]16位补=1111111110111100;X= -0111111[X]8位原=10111111,[X]8位反=11000000,[X]8位补=11000001;[X]16位原=1000000000111111,[X]16位反=1111111111000000,[X]16位补=1111111111000001;1-6 将下列补码转化成二进制数的真值。
微机原理实验报告
专业班级姓名学号
实验题目日期
实验二:并行接口8255A实验
一、实验目的
熟悉8255A的工作原理及应用方法;掌握其接口电路设计及编程方法。
二、实验设备
MUT-III型实验箱、计算机一套。
三、实验内容
8255A的A口作为输入口,与逻辑电平开关相连。
8255A的B口作为输出口,与发光二极管相连。
编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。
四、实验原理
原理:本实验用到两部分电路:开关量输入输出电路和8255可编程并口电路。
开关量输入输出电路看实验一介绍
8255A可编程并口电路。
微机原理实验课题(共16个内容,附解答程序)(汇编程序可以使用MASM FOR WINDOWS)1.将偏移地址为2000h开始的100个单元依次设置为0~99。
2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
3. 编写程序,在屏幕上分行显示自己的姓名、学号。
4. 编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
5. 用分支结构设计程序实现符号函数100010xy xx>⎧⎪==⎨⎪-<⎩,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
6. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
7. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
8. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
9. 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
10. 将字形变量x以二进制数的形式在屏幕上显示输出。
11. 将字形变量x以十六进制数的形式在屏幕上显示输出。
12. 将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。
13. 编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。
(要求:在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N 小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。
14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。
(注意:首先判断正负,正数直接转换,负数以补码的形式存放;要求显示输入数据的提示信息,用子程序实现(段内),显示转换后结果结果的功能用子程序实现(段间)15. 设计一个密码验证程序,在数据段设定一个密码,程序执行时首先显示输入密码的提示信息,要求输入密码,将输入的密码同设定的密码进行比较,相同则显示欢迎信息,密码错误显示错误信息并要求重新输入,三次错误则显示非法用户信息并退出程序。
可以定义宏实现多次需要的操作。
16. 对以上程序进行修改,对初始密码利用某种算法进行加密,在比较时利用同样的算法对输入密码进行转换后再进行比较,增加对密码的保护。
解答程序如下1.将偏移地址为2000h开始的100个单元依次设置为0~99。
STACKl SEGMENT STACK ;8088宏汇编程序DW 64 DUP(?) ;定义堆栈段STACKl ENDSCODE SEGMENTASSUME CS:CODE ;定义代码段START: MOV DI,[2000H] ;程序开始设数据区首址MOV CX,100 ;字节数送入cx中MOV AL,0000NEXT: MOV [DI],AL ;写入一字节INC DI ;修改地址指针INC BX ;修改数据INC ALDEC CXJNZ NEXTHLTCODE ENDS ;代码段结束END START ;程序结束2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
STACKl SEGMENT STACKDW 64 DUP (?)STACKl ENDSDATA SEGMENTXL1 DW 50HXL2 DW 12HXH1 DW 30HXH2 DW 25HYL1 DW 32HYL2 DW 55HYH1 DW 74HYH2 DW 32HDATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START:MOV AX,DATAMOV DS,AXMOV AX,XL1ADD AX,YL1MOV BP,AXMOV AX,XL2ADD AX,YL2MOV SI,AXMOV AX,XH1ADD AX,YH2MOV DI,AXMOV AX,XH2ADD AX,YH2MOV DX,AXCODE ENDSEND START3. 编写程序,在屏幕上分行显示自己的姓名、学号。
datas segmentnam db 'name hu li hu tu$'num db 'number 20121201$'datas endsstacks segmentdw 100 dup(?)stacks endscodes segmentassume cs:codes,ds:datas,ss:stacksstart:mov ax,datasmov ds,axmov dx,offset nammov ah,9int 21hmov ah,2int 21hmov dl,0dhint 21hmov dx,offset nummov ah,9int 21hcode segment endsend start4. 编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
data segmentx dw ?pf db 0,01,04,9,16,25,36,49,64,81y dw ?prom dw 'please input a number:$'data endscode segmentassume ds:data,ss:stack,cs:codestart:mov ax,datamov ds,axmov dx,offset prom int 21hmov ah,1int 21hand al,0fhmov x,axlea bx,pfmov ax,xxlatmov y,axmov ah,4chint 21hcode endsend start5. 用分支结构设计程序实现符号函数100010xy xx>⎧⎪==⎨⎪-<⎩,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
DATAS SEGMENTx db -4y db ?;此处输入数据段代码da db 'y=1','$'den db 'y=0','$'xiao db 'y=-1','$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXmov al,xcmp al,0JL nextjg next1mov y,0lea dx,denmov ah,09hint 21hjmp next2next1:mov y,1lea dx,damov ah,09hint 21hjmp next2next:mov y,-1lea dx,xiaomov ah,09hint 21hnext2:MOV AH,4CHINT 21HCODES ENDSEND START6. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
DATAS SEGMENTy db 'error','$';此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATAS MOV DS,AXmov ah,1int 21hcmp al,61hjge next1jmp next4 next1:cmp al,7Ah jle next2jmp next4 next2:sub al,20h next3:mov dl,al mov ah,2int 21hjmp next5 next4:lea dx,ymov ah,09h int 21h next5:MOV AH,4CH INT 21H CODES ENDSEND START7. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
DATAS SEGMENTshuzi db 'digital','$'zimu db 'letter','$'qita db 'other','$';此处输入数据段代码DATAS ENDSSTACKS SEGMENTstring db ?;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ah,1 ;此处输入代码段代码int 21hcmp al,30hjge next1jmp next6next1:cmp al,39hjle next2cmp al,41hjge next3jmp next6 next3:cmp al,5Ah jle next5jmp next8 next8:cmp al,61h jle next6jge next4 next5:lea dx,zimu mov ah,09h int 21hjmp next7 next4:cmp al,7Ah jle next5jmp next6 next2:lea dx,shuzi mov ah,09hint 21hjmp next7 next6:lea dx,qitaint 21hnext7:MOV AH,4CHINT 21HCODES ENDSEND START8. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
data segmentx db 15data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov al ,xand al,0fhcmp al,9JBE nextadd al,7next:add al,30hmov ah,2int 21hmov ah,4chint 21hcode endsend start9. 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。