微机原理-循环设计实验报告(免费)

合集下载

微机原理与应用综合实验—循环程序设计

微机原理与应用综合实验—循环程序设计

94 A2:PUSH AX 95 MOV DL,' ' 96 MOV AH,2 97 INT 21H 98 POP AX 99 ADD AX,BX 100 SHL AX,1 101 RET 102 A3:PUSH AX 103 MOV DL,' ' 104 MOV AH,2 105 INT 21H 106 POP AX 107 SUB AX,BX 108 SHL AX,1 109 RET 110 111 RET 112 CHRAC ENDP 113 MOV AH,4CH 114 INT 21H 115 CODE ENDS 116 END MAIN
45 ;********************************************** 46 INPUTPRO PROC NEAR 47 PUSH CX ;保护现场 48 PUSH AX 49 PUSH BX 50 SHL AX,1 ;得到每一行输入的字符(‘*’、‘ ’)总数 51 MOV CX,0001H 52 LOP:CALL CHRAC 53 INC CX ;CX自加 54 CMP CX,AX 55 JNA LOP;判断相等就换行 56 POP BX 57 POP AX ;恢复现场 58 POP CX 59 RET 60 INPUTPRO ENDP 61 ;********************************************** 62 ;子程序:输入每一个‘*’和‘ ’和0AH(换行字符) 63 ;********************************************** 64 CHRAC PROC NEAR 65 CMP CX,AX 66 JZ A1; 67 MOV DL,'*' 68 69 SHR AX,1 ;满足空格的条件 70 SUB AX,BX 71 CMP CX,AX 72 JNA A2 73 ADD AX,BX 74 ADD AX,BX 75 CMP CX,AX 76 JNB A3 77 78 SUB AX,BX 79 SHL AX,1 80 PUSH AX 81 MOV AH,2 82 INT 21H 83 POP AX 84 RET 85 A1:PUSH AX 86 MOV DL,0DH 87 MOV AH,2 88 INT 21H 89 MOV DL,0AH 90 MOV AH,2 91 INT 21H 92 POP AX 93 RET

微机原理实验报告册(3篇)

微机原理实验报告册(3篇)

第1篇一、实验目的1. 理解和掌握微机的基本组成和工作原理;2. 熟悉微机硬件设备和实验仪器的使用方法;3. 提高动手实践能力,培养解决实际问题的能力;4. 深入理解微机原理课程内容,为后续课程学习奠定基础。

二、实验内容1. 微机系统认识实验2. 微机硬件组成实验3. 微机指令系统实验4. 微机寻址方式实验5. 微机程序设计实验6. 微机接口技术实验三、实验仪器与设备1. 微机原理实验箱2. 示波器3. 数字万用表4. 计算机一台5. 实验指导书四、实验步骤与内容1. 微机系统认识实验(1)观察实验箱的结构,了解各个模块的功能;(2)熟悉实验箱的电源、复位、运行等按钮的使用方法;(3)学习微机系统的工作流程,包括加电、复位、启动等过程;(4)观察微机系统启动后的运行状态,了解各个模块的协同工作。

2. 微机硬件组成实验(1)观察实验箱的CPU、内存、I/O接口等硬件模块;(2)学习CPU的内部结构,包括寄存器、控制单元、运算单元等;(3)学习内存的存储原理,了解ROM、RAM等存储器的特点;(4)学习I/O接口的工作原理,了解中断、DMA等传输方式。

3. 微机指令系统实验(1)学习微机指令系统的基本格式,包括操作码、地址码等;(2)掌握微机指令系统的寻址方式,包括立即寻址、直接寻址、间接寻址等;(3)编写简单的汇编语言程序,实现加、减、乘、除等运算;(4)学习微机中断处理过程,了解中断向量表、中断服务程序等概念。

4. 微机寻址方式实验(1)学习微机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等;(2)编写程序,实现不同寻址方式下的数据访问;(3)观察不同寻址方式对程序执行速度的影响。

5. 微机程序设计实验(1)学习汇编语言程序设计的基本方法,包括数据定义、指令编写、程序结构等;(2)编写简单的程序,实现数据交换、排序等操作;(3)学习微机程序的调试方法,包括单步执行、断点设置等。

6. 微机接口技术实验(1)学习微机接口技术的基本概念,包括并行接口、串行接口等;(2)观察实验箱中的并行接口、串行接口等模块,了解其工作原理;(3)编写程序,实现数据在并行接口、串行接口之间的传输;(4)学习微机中断处理在接口技术中的应用。

微机原理(循环程序设计)

微机原理(循环程序设计)
MOV SI,OFFSET B
MOV [DI],DL
MOV DH,8
SUB DH,DL
MOV [SI],DH
MOV AH,4CH
INT 21H
CODEENDS
END START
已知有5个正数,3个负数,则DH、DL分别为03和05,运行程序结束后,查询这两个区域,运行结果如图:
2.汇编程序如下:
DATA SEGMENT
MOV BX,OFFSET BUF2
BEGIN:MOV AX,[DI]
CMP AX,0000H
JGE F1
MOV [BX],AX
INC BX
INC BX
JMP F2
F1:MOV [SI],AX
INC DL
INC SI
INC SI
F2:INC DI
INC DI
LOOP BEGIN
MOV DI,OFFSET A
END START
用AX来存放TOTOL,DX存COUNT,运行结果如图:
实验总结:
通过本次实验,对循环结构程序设计能熟练掌握并且应用,同时弥补了一些没有注意到的细节,比如取某段数据首地址,偏移量等语句的使用,通过练习操作,相信会使我对微机及汇编知识的学习大有帮助。
实验内容:
一、试验题目:
1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
2.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。

微机原理多重循环实验

微机原理多重循环实验

实验四多重循环实验一、实验目的:掌握循环程序编写方法二、实验内容:例5.8 在附加段中有一个字数组,其首地址已经存放在DI寄存器中,在数组的第一个字中存放该数组的长度。

要求编制一个程序是该数组中的数按照有小到大的次序排列。

在程序中定义一个附加段,存放要排序的数组。

为了查看最后排序后的数组是否按照要求排序完毕,可以通过程序输出附加段的内容,也可以在调试程序中显示附加段的内容,本例采用后者。

三、源代码data segmentsave_cnt dw ?start_addr dw ?data endsprognam segmentbubble proc farassume cs:prognam,ds:datapush dspush cxpush axpush bxmov ax,datamov ds,axmov start_addr,dimov cx,es:[di]mov save_cnt,cxinit: mov bx,1dec save_cntjz sortedmov cx,save_cnt mov di,start_addrnext:add di,2mov ax,es:[di]cmp es:[di+2],ax jae contxchg es:[di+2],ax mov es:[di],axsub bx,bxcont: loop nextcmp bx,0je initsorted: mov di,start_addr pop bxpop axpop cxpop dsretbubble endpprognam endsend四、实验过程:1、编译:C:\MASM 58.ASM2、链接:C:\LINK 58.OBJ3、调试:C:\DEBUG 58.EXE1)、先用命令U反汇编整个程序,查看每条指令的物理地址-U内存地址指令代码反汇编的程序代码-U2)、想查看程序初始化后,各个寄存器的内容,用G命令让程序运行到CALL INIT 后一条指令的地址3)、经过取地址操作,查看数据段DS、附加段ES中的内容:由寄存器内容可以看出,数据段中的save_cnt取得了数组的长度,start_addr取得了数组的首地址,寄存器CX记录未排序的数组的大小4)、查看数据的交换过程-u 001d;查找一下内循环结束地址-t察看flags标志寄存器的CF位,检验程序的执行走方向,CF=1,可知要执行交换操作-d es:0000;交换前AX寄存器和地址ES:0004内的值如下:-d es:0000;交换后AX寄存器和地址ES:0004内的值如下:-g 0045;内循环运行排序一次,看排序是否成功-d es:0000;最大的数2D已经排在最后面6、完全运行完毕,看整个程序是否达到了题目要求-d ds:0000-d es:0000;已经排序完成-q。

微机原理实验报告

微机原理实验报告

微机原理实验报告微机原理与接口技术实验报告学院:信息工程学院班级:学号:姓名:实验一:系统认识实验1 实验目的:掌握TD-PITE 80X86 微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。

2 实验设备:PC机一台,TD-PITE 实验装置一套。

3 实验内容:编写实验程序,将00H~0FH 共16 个数写入内存3000H 开始的连续16 个存储单元中。

4 实验步骤:1. 运行Wmd86 软件,进入Wmd86 集成开发环境。

2. 环境调试,“设置”选项中选择汇编语言。

语言环境选择界面3. 新建文档,编写程序,程序如下:SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000HMOV CX, 16AA1: MOV [SI], ALINC SIINC ALLOOP AA1AA2: JMP AA2CODE ENDSEND START4. 编译连接,程序无误下载:信息界面5. 连接PC与实验系统的通讯电缆,打开实验系统电源。

6. 下载程序,查看内存3000H 开始的连续16 个存储单元中的内容,显示如下:8.由于该内存段原始数据与实验数据相同,便于区分观察,将该内存段初始化,然后查看:9.点击运行程序,在此查看该段内存:10.设置断点,执行程序:5 操作练习编写程序,将内存3500H 单元开始的8 个数据复制到3600H 单元开始的数据区中。

通过调试验证程序功能,使用E命令修改3500H 单元开始的数据,运行程序后使用D命令查看3600H 单元开始的数据。

1、编写程序如下:SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3500HMOV DI, 3600HMOV CX, 8AA1: MOV AL, [SI]MOV [DI], ALINC SIINC DILOOP AA1AA2: JMP AA2CODE ENDSEND START2、执行过程如上,内存变化如下:程序执行前程序执行后实验二:数制转换实验1、实验目的1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解;2. 熟悉程序调试的方法。

汇编语言、微机原理、接口技术-实验三:循环程序实验

汇编语言、微机原理、接口技术-实验三:循环程序实验
外层循环:初始化BL。初始化比较两个数的指针。当BL=0时,提前退出循环。
图一:直接选择排序
图二:冒泡排序
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等
基本要求源代码:
冒泡排序关键代码:
mov cx,4 ; CX length-1
mov si,offset a ; DI string pointer
INC SI jna j1
loop lp3 xchg al,[si+2]
HLT mov [si],al
A DW '5','7','1','9','2' inc bl
; si string pointer j1:
;cx length-1 inc si
sort proc inc si
lp2: loop lp1
计算机硬件实验室实验报告
课程名称:
姓名
学号
班级
成绩
设备名称及软件环境
Windows XP操作系统emu8086仿真器proteus仿真器
实验名称
[0003]循环程序实验
实验日期
2012/11/6
一.实验内容
1.实现内存数据访问,用两种方法对五个字从大到小排序
2.扩展要求
1.用冒泡法时快排
2.理论分析或算法分析
思考内容:冒泡排序之所以能实现快速排序,是每一次排序都将最大或最小的放在最后或最前,并且有个来统计交换的次数,一旦交换的次数为0时直接退出循环。
五.结论\
完成了本次实验要求的实验内容。学会了实现内存数据访问,用两种方法实现对五个字从大到小排序
报告提交日期

北邮微机原理软件实验报告

北邮微机原理软件实验报告

微机原理软件实验报告实验二分支、循环程序设计一.实验目的1.开始独立进行汇编语言程序设计。

2.掌握基本分支,循环程序设计。

3.掌握最简单的DOS 功能调用。

二.实验内容1.安排一个数据区,内存有若干个正数,负数和零。

每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

三.流程图四.源代码DATA SEGMENTZ DW 0 ;数据中0的个数A DW 0 ;数据中大于0的个数B DW 0 ;数据中小于0的个数NUM DW 9,8,0,-7,6,-5,-4,3,2,-1,0,-8,-1,9,0,0,1 ;设定的一组数据,其中4个0,7个正数,6个负数,符合题目要求N DW ($-NUM)/2 ;该组数据的个数TYPE0 DB 0DH, 0AH, 'Number of zeros : $'TYPE1 DB 0DH, 0AH, 'Number of greater than 0 : $'TYPE2 DB 0DH, 0AH, 'Number of less than 0 : $'LOCATE DW TYPE0, TYPE1, TYPE2DATA ENDSSTACK SEGMENT STACKDW 128 DUP(?)STACK ENDSCODE SEGMENTASSUME DS:DATA, SS:STACK, CS:CODESTART: MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AX ;初始化DS、SS指向STAMOV BX, OFFSET NUM ;将NUM中第一个数字的地址送入BXMOV CX, N ;将N中数字个数送入CXLOOP1: MOV AX, [BX] ;取出NUM中的第一个数字CMP AX, 0 ;与零相比JZ IFZ ;判断结果为是0,跳转到IFZ处继续执行SAL AX, 1JC IFL ;判断结果是小于0,跳转到IFLINC WORD PTR A ;否则,A自加,然后继续执行程序JMP C ONTINUEIFL: INC WORD PTR B ;B计数加1JMP C ONTINUEIFZ: INC Z ;Z计数加1CONTINUE:ADD BX, 2 ;指针+2,继续送入下一数字LOOP LOOP1 ;循环CX次判断MOV CX, 3 ;共显示3个字符串XOR BX, BXDISP:MOV DX, LOCATE[BX]MOV AH, 09H ;DOS 09号功能调用,显示字符串INT 21HMOV DX, Z[BX]ADD DX, '0' ;转换为ASCII码MOV AH, 02H ;DOS 02号功能调用,显示字符INT 21HADD BX, 2 ;指针+2(DW)LOOP DISPMOV AX, 4C00HINT 21H ;返回DOS系统CODE ENDSEND START五.运行结果六.预习题1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?答:0—9的ASCII码值依次为:30H,31H,32H,33H,34H,35H,36H,37H,38H,39H。

《单片微型计算机原理及接口技术》循环程序实验报告

《单片微型计算机原理及接口技术》循环程序实验报告

《单片微型计算机原理及接口技术》循环程序实验报告课程名称:单片微型计算机原理及接口技术实验类型:验证型实验项目名称:循环程序实验一、实验目的和要求1.实验目的熟悉Keil uVision2集成开发环境,熟练使用Keil uVision软件,熟悉条件转移指令及比较转移指令的运用,掌握循环程序的设计及调试方法。

2.实验要求通过下列循环程序输入、修改和调试,掌握断点执行的调试方法,以及在循环程序中如何通过断点的方法调试程序。

二、实验内容和原理程序功能:将片内RAM从21H单元开始存放的5个数求和,结果送片外2000H单元中。

ORG0000HMOV R0,#21HMOV R1,#05HCLR ALOOP:ADD A,@R0INC R0DJNZ R1, LOOPMOV DPTR, #2000HMOVX@DPTR, ASJMP$END三、主要仪器设备单片机专业开发工具Keil uVision 5。

四.操作方法和实验步骤(一)输入程序1. 建立工程文件在桌面上双击Keil uVision2图标,点击“工程(Project)”->“新建工程(New Project…)”命令,在出现的对话框中输入项目名SY2.Uv2,选择合适的文件夹下建立新的工程项目SY2.Uv2,再在“S 为目标‘Target1’选择设备”对话框,在“数据库内容”下选择Atmel,点开“+”号,选择89C51器件,点击确定按钮。

2. 源程序文件的建立使用菜单“文件”->“新建”命令,弹出源程序编辑窗口,输入以下程序,点击“文件” ->“另存为”命令,保存文件名为SY2.ASM (保存文件统一放在新建的SY1文件夹中)。

3.将文件加入到工程项目中鼠标右键点击左侧的“工程窗口”,在弹出式菜单中选择“增中文件到组‘Source Group 1’”,然后找到SY2.ASM ,点击Add按钮,将SY1.ASM添加到项目中去。

(二)编译、连接(三)设置好工程后,即可以进行编译、连接。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的1、掌握循环程序的设计方法。

2、掌握比较指令、转移指令和循环指令的使用方法。

3、进一步掌握调试工具的使用方法。

二、实验预习要求1、复习比较指令、条件转移指令和循环指令。

2、复习循环程序的结构、循环控制方法等知识。

3、读懂“实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。

4、根据“实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。

5、从“实验习题”中任选一道题目,编写源程序,以便上机调试。

三、实验内容计算1+2+……n=?,其中n通过键盘输入。

要求在屏幕上提供如下信息:Please input a number(1 627): ;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum ;其中n为用户输入的数,sum为所求的累加和程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。

1、编程指导(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。

将键盘输入的十进制数转换为二进制数的程序清单如下:DATA SEGMENTINF1 DB "Please input a number (0-65535):$"IBUF DB 7,0,6 DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET INF1MOV AH, 09HINT 21HMOV DX, OFFSET IBUF ;键入一个十进制数(<65535)MOV AH, 0AHINT 21HMOV CL, IBUF+1 ;十进制数的位数送CXMOV CH, 0MOV SI, OFFSET IBUF+2 ;指向输入的第一个字符(最高位)MOV AX, 0 ;开始将十进制数转换为二进制数AGAIN: MOV DX, 10 ; ((0⨯10+a4) ⨯10+…) ⨯10+aMUL DXAND BYTE PTR [SI], 0FHADD AL, [SI]ADC AH, 0INC SILOOP AGAINMOV AH, 4CHINT 21HCODE ENDSEND START本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。

(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数。

将二进制数转换为十进制数的程序清单如下:DATA SEGMENTOBUF DB 6 DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV BX, OFFSET OBUF+5MOV BYTE PTR [BX],'$'MOV CX, 10 ;做(DX):(AX)/10运算LOOP1: MOV DX, 0 ;被除数高16位清0DIV CXADD DL, 30H ;将DL中的一位十进制数转换为ASCII 码DEC BXMOV [BX], DLOR AX, AXJNZ LOOP1;判断商是否为0,不为0继续MOV DX, BXMOV AH, 09HINT 21H;显示转换得到的十进制数MOV AH, 4CH INT 21H CODE ENDS END START本程序功能:将存储在AX 寄存器中的二进制数转换为十进制数并显示。

2、 流程图及程序框架(1) 流程图(2) 程序框架DATA SEGMENTINF1 DB "Please input a number (0-65535):$"IBUF DB 7,0,6 DUP(?) OBUF DB 6 DUP (?) DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOVCX, AX MOV AX, 0 MOV BX, 1 LOOP2: ADD AX, BX INC BX LOOP LOOP2CODE ENDS END START3、完整源程序代码 DATA SEGMENTINF1 DB "Please input a number(0-65535):$" IBUF DB 7,0,6 DUP(?) OBUF DB 6 DUP(?) DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AXMOV DX,OFFSET INF1 MOV AH,09H INT 21HMOV DX,OFFSET IBUF MOV AH,0AHINT 21HMOV CL,IBUF+1MOV CH,0MOV SI,OFFSET IBUF+2 MOV AX,0AGAIN:MOV DX,10MUL DXAND BYTE PTR[SI],0FH ADD AL,[SI]ADC AH,0INC SILOOP AGAINMOV CX,AXMOV AX,0MOV BX,1LOOP2:ADD AX,BXINC BXLOOP LOOP2MOV BX,OFFSET OBUF+5 MOV BYTE PTR[BX],'$' MOV CX,0AHLOOP1:MOV DX,0DIV CXADD DL,30HDEC BXMOV [BX],DLOR AX,AXJNZ LOOP1MOV DL,0AHMOV AH,02HINT 21HMOV DX,BXMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验截图:四、实验习题1、从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和累加和。

显示格式为:1+2+…+n=sum其中n为累加个数,sum为累加和。

data segmentobuf db 6 dup(?)eu db '+','$'eb db 0dh,'=',0dh,'$'data endsdisplay macro stringmov dx,offset stringmov ah,09hint 21hendmcode segmentmain proc farassume cs:code,ds:datastart: mov ax,datamov ds,axmov ax,1mov cx,0loop1:adc cx,axcmp ax,1je allpush axdisplay eupop axall: call exchangeinc axcmp cx,60000jc loop1push axpush cxdisplay ebmov ax,cxcall exchangepop cxpop axmov ah,4chint 21hretmain endpexchange proc nearpush axpush bxpush cxmov bx,offset obuf+5mov byte ptr [bx],'$'mov cx,10loop2:mov dx,0div cxadd dl,30hdec bxmov [bx],dlor ax,axjnz loop2mov dx,bxmov ah,09hint 21hpop cxpop bxpop axret exchange endp code endsend start实验截图:2、从键盘输入6个加数N1、N2、N3、N4、N5和N6(均为1 4位的无符号十进制整数),求和并将计算结果在屏幕上显示出来。

3、从键盘输入一个无符号十进制整数(小于65536),将其转换为二进制数,统计该二进制数中包含的1的个数,并将统计结果在屏幕上显示出来。

4、从键盘输入N个无符号十进制整数(小于256),将其转换为二进制数后存放在字节变量BUF存储区中;对这N个数进行由大到小排序,排序后将其仍存储在BUF中;最后将排序后的结果在屏幕上显示出来。

(说明,以上习题任选一道题,附上流程图及源程序代码,然后把其他的两道题删掉)五、实验小结这次实验虽然难度不大,但在做的过程中也遇到了不少困难,有些错误不容易找出来,必须仔细的看和修改,所以要求我们养成良好的编码风格和习惯,尤其是源程序很长的时候,这就显得尤为重要。

相关文档
最新文档