微机原理-循环设计实验报告(免费)
- 格式:doc
- 大小:926.00 KB
- 文档页数:7
第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)学习微机中断处理在接口技术中的应用。
实验四多重循环实验一、实验目的:掌握循环程序编写方法二、实验内容:例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. 熟悉程序调试的方法。
微机原理软件实验报告实验二分支、循环程序设计一.实验目的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、掌握循环程序的设计方法。
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+a) ?10+…) ?10+a 04 MUL DXAND BYTE PTR [SI], 0FHADD AL, [SI]ADC AH, 0INC SILOOP AGAINMOV AH, 4CHINT 21HCODE ENDSEND START本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。
微机原理实验报告实验目的,通过本次实验,掌握微机原理的基本知识,了解微机系统的组成和工作原理,掌握微机系统的组装和调试方法。
实验一,微机系统组成及工作原理。
1.1 微机系统的组成。
微机系统由中央处理器(CPU)、内存、输入设备、输出设备和外部设备等组成。
其中,CPU是微机系统的核心部件,负责控制整个系统的运行。
1.2 微机系统的工作原理。
微机系统的工作原理是通过CPU对内存中的指令进行解释和执行,从而实现各种功能。
CPU通过总线与内存、输入输出设备进行数据传输和控制信号的交换,实现对整个系统的控制和管理。
实验二,微机系统的组装和调试。
2.1 微机系统的组装。
在组装微机系统时,首先要选择合适的主板、CPU、内存、硬盘等配件,然后按照正确的安装顺序和方法进行组装。
组装完成后,还需连接电源、显示器、键盘、鼠标等外部设备。
2.2 微机系统的调试。
组装完成后,需要对微机系统进行调试,检查各个部件是否连接正确,是否能够正常工作。
通过BIOS设置和操作系统的安装,完成对微机系统的调试和配置。
实验三,微机系统的应用。
3.1 微机系统的应用领域。
微机系统广泛应用于各个领域,如办公、教育、科研、娱乐等。
在办公领域,微机系统可以用于文字处理、表格制作、图像处理等;在教育领域,微机系统可以用于多媒体教学、网络教学等。
3.2 微机系统的发展趋势。
随着科技的不断发展,微机系统也在不断更新换代,性能不断提升,体积不断缩小,功耗不断降低。
未来,微机系统将更加智能化、便携化,成为人们生活、工作不可或缺的一部分。
结论,通过本次实验,我对微机原理有了更深入的了解,掌握了微机系统的组成和工作原理,了解了微机系统的组装和调试方法,对微机系统的应用和发展趋势也有了一定的认识。
这对我今后的学习和工作将有很大的帮助。
实验一显示程序实验一、实验目的1. 掌握在PC机上以十六进制形式显示数据的方法;2. 掌握部分DOS功能调用使用方法;3. 熟悉Tddebug调试环境和Turbo Debugger的使用。
二、实验所用设备1. PC微机一台。
三、实验内容一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT21H)。
(1) 显示单个字符输出入口:AH=02H调用参数:DL=输出字符(2) 显示字符串入口:AH=09H调用参数:DS:DX=串地址,’$’为结束字符(3) 键盘输入并回显入口:AH=01H返回参数:AL=输出字符(4) 返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验步骤1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;3.使用Rmrun菜单中的Run,运行程序,观察运行结果;4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;5.更改数据区中的数据,考察程序的正确性。
图1-1 显示程序实验流程图五、参考程序清单六、实验报告内容及要求写出程序调试过程及运行情况。
1.将参考程序写入轻松汇编编辑框。
2.点击保存,然后编译,结果框显示编译成功。
3.点击生成,显示链接成功。
4.点击运行,显示如图:实验二数据传送实验一、实验目的1. 熟悉Tddebug调试环境和Turbo Debugger的使用;2. 掌握与数据有关的不同寻址方式。
二、实验所用设备1. PC微机一台。
三、实验内容将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
循环程序设计实验报告
西安交通大学
文少轩
一、实验目的
1.掌握循环程序设计方法;
2.掌握数据的统计和排序方法。
二、实验设备
IBM-PC 微型计算机一台
三、实验要求
1. 复习比较指令、循环控制指令的用法;
2. 根据流程图和编程提示,预先编写汇编语言程序;
3. 有兴趣的同学请编写出实验习题中的程序
四、实验内容及数据记录
1.在屏幕上显示提示信息“Please input 10 numbers:”,提示用户输入10个数(数的
范围在0~99之间),然后从键盘上读入这10个数。
接着对这10个数从小到大进行排序,并统计0~59、60~79、80~99的数各有多少。
最后在屏幕上显示排序后的数(每个数之间用逗号分隔)并显示统计的结果。
显示格式如下:
Sorted numbers:xx,xx,xx,xx,xx,xx,xx,xx,xx,xx
0~59:xx
60~79:xx
2.实验习题:从键盘输入任意输入一个字符串,统计其中A~Z字符出现的次数(不分大
小写,没出现次数就记为0),并把结果显示在屏幕上。
显示格式如下:
A:xx
B:XX
……
五、实验小结
1.编制循环程序首先要根据循环的层数及每层的次数,采用合适的寄存器并赋值,然后每次循环完成就给相应的寄存器进行减1操作,对寄存器的值进行判断,非零则继续循环,如此进行;
2.对于程序中经常要用到的程序段,可以将其定义为宏,需要时,直接调用。
一、实验目的1. 理解微机循环结构的基本原理;2. 掌握循环结构的编程方法;3. 熟悉微机实验环境及工具的使用;4. 提高编程能力和问题解决能力。
二、实验环境1. 实验设备:PC微机一台;2. 实验软件:汇编语言编程软件(如MASM、TASM等);3. 实验工具:汇编语言编程手册、实验指导书。
三、实验内容1. 循环结构的原理及编程方法循环结构是程序设计中常用的一种结构,它可以简化程序设计,提高编程效率。
本实验主要介绍以下循环结构:(1)顺序循环结构:按照顺序执行程序中的语句,直到循环条件不满足为止。
(2)当型循环结构:当循环条件满足时,执行循环体内的语句;当循环条件不满足时,退出循环。
(3)直到型循环结构:执行循环体内的语句,直到循环条件不满足为止。
2. 循环结构的编程实例(1)求1到100的和程序代码如下:```MOV CX, 100 ; 设置循环次数为100MOV AX, 0 ; 初始化累加器AX为0SUM_LOOP:ADD AX, CX ; 将循环次数加到AX上LOOP SUM_LOOP ; 判断CX是否为0,如果不为0,则继续循环```(2)计算Fibonacci数列的前10项程序代码如下:```MOV CX, 10 ; 设置循环次数为10MOV AX, 0 ; 初始化累加器AX为0MOV BX, 1 ; 初始化累加器BX为1FIB_LOOP:ADD AX, BX ; 将BX加到AX上XCHG AX, BX ; 将AX的值传给BXDEC CX ; 循环次数减1JNZ FIB_LOOP ; 判断CX是否为0,如果不为0,则继续循环```3. 循环结构的调试及优化在编程过程中,可能会遇到循环结构不正确、效率低下等问题。
以下是一些调试及优化方法:(1)检查循环条件是否正确;(2)优化循环体内的语句,减少计算量;(3)使用循环嵌套结构,提高程序效率;(4)合理使用循环变量,减少内存占用。
四、实验结果与分析1. 实验结果通过实验,我们成功实现了以下功能:(1)求1到100的和;(2)计算Fibonacci数列的前10项;(3)掌握了循环结构的编程方法及调试技巧。
微机原理软件实验报告班级:姓名:学号:班内序号:日期:实验B 分支,循环程序设计实验报告一.实验目的:开始独立进行汇编语言程序设计;; 掌握基本分支,循环程序设计;;掌握 DOS调用. 二.实验内容:安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9; .编写一个程序统数据区中正数,负数和零的个数;.将统计结果在屏幕上显示.统计出正奇数,正偶数,负奇数,负偶数以及零的个数.。
三.预习题:1、十进制数 0 -- 9 所对应的 ASCII 码是什么?答:30H,31H,32H,33H,34H,35H,36H,37H,38H,39H2、如何将十进制数 0 -- 9 在屏幕上显示出来?答:转化为ASCII 码,然后: MOV AH,02H MOV DL,Y INT 21H3、如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:和零作比较,判断是否为零,CMP NUM ,00H ; AND NUM, 00H;判正:AND NUM,80H ; OR NUM ,7FH; SUB NUM,00H; SHL NUM,1; 判负:AND NUM,80H ; OR NUM,7fh ; SUB NUM,00H ; SHL NUM,1;四、实验过程(一)、流程图从数据区读入数字宏定义开始是 否是 否否 是 否是 否是判零操作零计数器数加判断负数是否为偶数 是否为奇数负数计数器加1 正数计数器加1负偶计数器负奇计数器加正奇计数器正偶计数器加数据读完显示结束(二)、源代码SHOW MACRO X ;;宏定义用于显示提示语句MOV AH,09HMOV DX, OFFSET XINT 21HENDMSHOW1 MACRO Y ;;宏定义用于显示数值MOV AH,02HMOV DL,YINT 21HENDMDAT SEGMENTA DB 1,16,70,-1,-2,1,0,-2,0,-2,9S EQU $-A ;待分类的数PLUS DB ? ;存储正数MINUS DB ? ;存储负数LING DB ? ;存储零EVE DB 0 ;存负偶数ODD DB 0 ;存负奇数ZEVE DB 0 ;存正偶数ZODD DB 0 ;存正奇数STRING DB 'THE NUMBER OF POSITIVE NUMBERS IS ', '$'STRINM DB 0DH,0AH,'THE NUMBER OF NEGATIVE NUMBERS IS ', '$' STRINN DB 0DH,0AH,'THE NUMBER OF ZERO IS ', '$'STRING1 DB 0DH,0AH,'THE NUMBER OF POSITIVE ODD NUMBERS IS ', '$'STRING2 DB 0DH,0AH,'THE NUMBER OF POSITIVE EVEN NUMBERS IS ', '$'STRING3 DB 0DH,0AH,'THE NUMBER OF NEGATIVE ODD NUMBERS IS ', '$'STRING4 DB 0DH,0AH,'THE NUMBER OF NEGATIVE EVEN NUMBERS IS ', '$'DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DAT,SS:STASTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV CX,SLEA BX,ACON: MOV AL,BYTE PTR[BX]OR AL,ALJZ ZERO ;判断是零JS FU ;判断是负数JMP ZHENG ;判断是正数ZERO: INC LING ;零个数自加JMP DONEFU: INC MINUS ;负数个数自加AND AL,01HJZ OU ;判断是负偶数INC ODD ;判断是负奇数,负奇数个数自加 JMP DONEOU: INC EVE ;负偶数个数自加JMP DONEZHENG: INC PLUS ;正数个数自加AND AL,01HJZ ZOU ;判断是正偶数INC ZODD ;正奇数个数自加JMP DONEZOU: INC ZEVE ;正偶数个数自加JMP DONEDONE: INC BX ;指向下一个内存数LOOP CONADD LING,30H ;转换为ASCII码ADD MINUS,30HADD PLUS,30HADD ODD,30HADD EVE,30HADD ZODD,30HADD ZEVE,30HSHOW STRING ; 提示语句SHOW1 PLUS ;大于0的数SHOW STRINN ;提示语句SHOW1 LING ; 等于0的数 SHOW STRINM ;提示语句SHOW1 MINUS ;小于0的数 SHOW STRING1 ;提示语句SHOW1 ZODD ;正奇数个数数 SHOW STRING2 ;提示语句SHOW1 ZEVE ;正偶数个数SHOW STRING3 ;提示语句SHOW1 ODD ;负奇数个数SHOW STRING4 ;提示语句SHOW1 EVE ;负偶数个数RETSTAR ENDPCODE ENDSEND STAR(三)、实验分析数据区待统计的数据为:1,16,70,-1,-2,1,0,-2,0,-2,9实验结果如下图所示。
微机原理及接口技术实验报告班级:光094-2姓名:....学号:20091350429实验一熟悉宏汇编程序及debug一.实验目的1.学习并掌握汇编语言指令寻址方式2.熟悉在PC机上用DEBUG调试和运行汇编语言指令的过程。
二.实验内容根据给定寄存器内容及存储单元内容,运行给定指令,观察记录运行结果1、给定的寄存器内容及存储单元内容(DS)=2000H,(SI)=0002H,(BX)=0100H(20100H)=1H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H2、指令(1)M OV AX,1200H(2)M OV AX,BX(3)M OV AX,[1200H](4)M OV AX,[BX](5)M OV AX,1100H[BX](6)M OV AX,[BX][SI](7)M OV AX,1100H[BX][SI]四.调试步骤1.运行DEBUG。
2.用A命令汇编指令(1)3.按给定寄存器和存储单元内容修改寄存器和存储单元内容。
4.单步运行指令,查看结果5.重复上述步骤,调试指令(2)——(7)指令寻址方式源操作数有效地址源操作数物理地址指令运行结果(AX)1 立即寻址 0100 20100 12002 寄存器寻址 0103 20103 01003 直接寻址 1200 21200 4c2a4 寄存器间接寻址0100 20100 34125 寄存器相对寻址1200 21200 4c2a6 基址变址寻址 0102 20102 78567 相对基址变址寻址1202 21202 65b7 六.思考题1、汇编语言指令有哪些寻址方式?用于寻址的寄存器有哪些?立即数寻址、直接寻址,寄存器寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,基址变址相对寻址。
对于16位数据,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP; 对于8位数据,寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL实验二寻址方式练习及多字节运算程序一.实验目的1.学习并掌握数据传送指令和算术运算指令2.熟悉在PC机上编辑、汇编、连接、调试与运行汇编语言程序的过程。
微机循环程序设计实验报告微机循环程序设计实验报告引言在当今数字化时代,计算机技术的发展已经成为各个领域的核心。
作为计算机科学的基础,循环程序设计在软件开发中扮演着重要的角色。
本实验旨在通过微机循环程序设计,探索程序的优化和性能提升。
实验目的1. 了解循环程序设计的基本概念和原理。
2. 熟悉微机循环程序设计的编写方法和技巧。
3. 掌握循环程序的性能优化和调试方法。
4. 分析循环程序设计在实际应用中的价值和局限性。
实验过程1. 实验环境搭建在开始实验前,我们需要搭建一个合适的实验环境。
选择一款适合的集成开发环境(IDE),并安装相应的编译器。
在本实验中,我们选择了Visual Studio作为开发环境,C语言作为编程语言。
2. 编写简单的循环程序在掌握基本的编程语法后,我们开始编写简单的循环程序。
通过使用for循环,我们可以实现对某个任务的重复执行。
这样的程序通常用于处理大量数据或者进行复杂的计算。
通过编写简单的循环程序,我们可以更好地理解循环程序设计的基本原理。
3. 优化循环程序性能在编写循环程序的过程中,我们需要考虑程序的性能。
通过合理地选择循环结构和优化算法,我们可以提高程序的执行效率。
例如,我们可以使用并行化技术来加速程序的运行,或者使用循环展开来减少循环的次数。
通过不断地优化,我们可以使程序更加高效。
4. 调试循环程序循环程序设计中常常会出现一些错误,例如死循环、数组越界等。
为了找出并解决这些错误,我们需要使用调试工具。
通过逐步执行程序,并观察变量的值和程序的执行流程,我们可以找到错误的原因并进行修复。
实验结果与分析通过实验,我们成功编写了多个循环程序,并对其进行了性能优化和调试。
在程序执行过程中,我们发现了一些问题,例如循环次数过多导致程序执行时间过长,或者循环条件设置不当导致程序无法正常结束。
通过分析这些问题,我们可以得出以下结论:1. 循环程序设计是一种高效的编程方法,可以大大提高程序的执行效率。
一、实验目的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中;最后将排序后的结果在屏幕上显示出来。
(说明,以上习题任选一道题,附上流程图及源程序代码,然后把其他的两道题删掉)五、实验小结这次实验虽然难度不大,但在做的过程中也遇到了不少困难,有些错误不容易找出来,必须仔细的看和修改,所以要求我们养成良好的编码风格和习惯,尤其是源程序很长的时候,这就显得尤为重要。