《求最大值最小值》微机原理的实验报告 2
最大值最小值实验报告
最大值最小值实验报告一、实验目的1、掌握如何用分治法求最大值和最小值2、学会分析递归算法的时间复杂度3、学会用分治法解决实际问题二、实验内容随机产生一个整型的数组,然后用分治法分别求出数组的最大值和最小值,输出最大值和最小值。
三、实验环境程序设计语言:C++操作系统:Windows 7编程工具:Microsoft Visual Studio 2010专业版四、程序源代码#include <iostream>#include <ctime>#include <cstdlib>using namespace std;constint MAXN = 100;int Partition(int *a, int low, int high){int key = a[low];while(low < high){while(low < high && a[high] >= key)--high;if(low < high)a[low++] = a[high];while(low < high && a[low] <= key)++low;if(low < high)a[high--] = a[low];}a[low] = key;return low;}int Max(int *A, int left, int right){if(left == right)return A[left];else{intpivotloc = Partition(A, left, right);if(pivotloc == right)return A[pivotloc];return Max(A, pivotloc + 1, right); //最大值一定在pivotloc的右边}}int Min(int *A, int left, int right){if(left == right)return A[left];else{intpivotloc = Partition(A, left, right);if(pivotloc == left)return A[pivotloc];return Min(A, left, pivotloc - 1); //最大值一定在pivotloc的右边}}int main(){srand(time(NULL));int a[MAXN];int n = rand() % 100 + 1; //随机产生数组的长度n,1-100 cout<< "数列的个数:" << n <<endl;for(inti = 0; i< n; i++){ //随机产生数组的各个元素a[i] = rand() % 100 + 1;cout<< a[i] << ' ';}cout<<endl;cout<< "Max:" << Max(a, 0, n - 1) <<endl;cout<< "Min:" << Min(a, 0, n - 1) <<endl;}五、实验结果截图上图只不过是很多结果中的一个,通过对大量数据的测试,发现这个程序是正确的。
微机原理实验报告2g(参考答案)
实验步骤及结果记录: 实验步骤: (1) 打开 DVCC-598JH 实验箱电源。 (2) 启动计算机,运行 DVCC-598JH 实验系统。 (3) 新建文件、输入程序并保存文件。 (4) 按 F9 键调试程序。 (5) 按 Ctrl+F9 键编译链接并传送文件至 DVCC-598JH 实验箱。 (6) 打开内部数据区,将 20H 单元的值更改为 00H 运行,观察程序运行情况。 (7) 分别将 20H 单元的值更改为正数(01H~7FH) 、负数(80H~0FFH)运行, 观察程序运行情况。 结果记录: 将 20H 单元的值更改为 00H 运行,观察到 21H 单元的值为 00H; 将 20H 单元的值更改为 08H 运行,观察到 21H 单元的值为 01H; 将 20H 单元的值更改为 87H 运行,观察到 21H 单元的值为 0FFH;
实验步骤及结果记录: 实验步骤: (1) 新建文件、输入程序并保存文件。 (2) 按 F9 键调试程序。 (3) 按 Ctrl+F9 键编译链接并传送文件至 DVCC-598JH 实验箱。 (4) 打开内部数据区,更改从 20H 单元的 8 个数据,观察程序运行情况。 (5) 打开外部数据区,观察从 2000H 开始的 16 个单元数据,检查运行结果的正确性。 结果记录: 20H 给定值 观察值 观察值 87H 2000H 07H 2001H 08H 21H 54H 2002H 04H 2003H 05H 22H 36H 2004H 06H 2005H 03H 23H 23H 2006H 03H 2007H 02H 24H 19H 2008H 09H 2009H 01H 25H 43H 200AH 03H 200BH 04H 26H 77H 200CH 07H 200DH 07H 27H 69H 200EH 09H 200FH 06H
北京理工大学微机原理实验报告
微机原理与接口技术实验报告实验内容:汇编语言程序设计实验组别:12姓名:班级:学号:一、实验目的1、熟悉IDE86集成开发环境的使用。
2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。
3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。
4、掌握利用汇编实现求和与求最值的方法。
5、掌握利用汇编实现数制转换的方法。
6、巩固理论知识,锻炼动手编程,独立思考的能力。
二、实验内容(具体内容)1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。
并查看前5个,前8个数之和以及各寄存器和内存的状态。
2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及MIN。
3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态。
三、实验方法1、设计思路(1)实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。
(2)实验2的设计思路:先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。
将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态(3)实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。
先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX 依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。
(实验七)求最大值和最小值实验报告
实验七求最大值和最小值一、实验目的1、学习子程序的定义和调用方法。
2、掌握子程序设计、调试。
二、实验内容对内存中给定的几个无符号字节数,求其最大值和最小值并在数码管上显示。
三、实验程序框图四、实验步骤脱机模式:(1)在P.态下,按SCAL键,然后在内存4000H~4007H中写入任意八个字节的数,按下MON键,返回P状态。
(2)在P.态下,输入2E70,按EXEC键。
(3)数码管显示为:“XX——XX”,最左两位为最大值,最右两位为最小值。
(4)按“系统复位”键,退出运行状态,数码管返回“P。
”状态。
联机模式:(1)在内存4000H~4007H中写入任意八个字节的数,按下MON键,返回P状态。
(2)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S7.ASM 文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(3)数码管显示为:“XX——XX”,最左两位为最大值,最右两位为最小值。
(4)按“系统复位”键,退出运行状态,数码管返回“P。
”状态。
五、实验程序清单X:\DICE-8086K3微机原理与接口实验箱CDROM\CODE\86kasm\S7.ASMCODE SEGMENT ;S7.ASM,LOOK FOR MAX & MINASSUME CS:CODEORG 2E70H ;INPUT DATA 4000H--4007HSTART: JMP START0PA EQU 0FF21H ;字位口PB EQU 0FF22H ;字形口PC EQU 0FF23H ;键入口BUF DB ?,?,?,?,?,?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV SI,4000H ;数据首址MOV CX,0008H ;长度CALL MAXMIN ;调用比较大小子程序CALL BUF1 ;最大最小值送显示缓冲区CON1: CALL DISP ;循环调用显示子程序JMP CON1MAXMIN: JCXZ EXIT ;比较结束子程序返回PUSH SI ;压栈PUSH CXPUSH BXMOV BH,[SI] ;取第一个数MOV BL,BH ;保存数据到BLCON2: LODSB ; 取数CMP AL,BH ;比较两数JNA X1 ;小于等于转MOV BH,AL ;BH存大的数JMP X2 ;转X2X1: CMP AL,BL ;比较两数JNB X2 ;大于等于转MOV BL,AL ;BL存小的数X2: LOOP CON2 ;未完继续MOV AX,BX ;POP BX ;出栈POP CXPOP SIEXIT: RET ;返回DISP: MOV AL,0FFH ;显示子程序5msMOV DX,PAOUT DX,ALMOV CL,0DFH ;注释略,见实验六显示程序MOV BX,OFFSET BUFDIS1: MOV AL,[BX]MOV AH,00HPUSH BXMOV BX,OFFSET DATA1ADD BX,AXMOV AL,[BX]POP BXMOV DX,PBOUT DX,ALMOV AL,CLMOV DX,PAOUT DX,ALPUSH CXDIS2: MOV CX,00A0HLOOP $POP CXCMP CL,0FEH ;01HJZ LX1MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALINC BXROR CL,1 ;SHR CL,1JMP DIS1LX1: MOV AL,0FFHMOV DX,PBOUT DX,ALRETBUF1: MOV BH,AHCALL ZHMOV BUF+5,ALMOV BUF+4,AHMOV AL,BHCALL ZHMOV BUF,AHMOV BUF+1,ALMOV BUF+2,17HMOV BUF+3,17HRET;-------------------------------------------------------- ZH: MOV BL,AL ;数据拆送MOV CL,4ROL AL,CLAND AL,0FHMOV AH,ALMOV AL,BLAND AL,0FHRET;------------------------------------------------------- CODE ENDSEND START。
微机原理实验求最大值和最小值
实验五求最大值和最小值实验日期:2012.10.29 指导教师:刘波星期:一节次: 5.6 实验课时: 2 姓名:胡敏学号:10168150 专业、班级:通信2班得分:1、实验目的1、学习子程序的定义和调用方法。
2、掌握子程序设计、调试。
2、实验内容对内存中给定的几个无符号字节数,求其最大值和最小值。
3、实验步骤在数据段偏移地址为4000H起始地址的存放8个数字5、思考题解答1、程序运行后,最大数和最小数分别存放在何处?试解释X1和X2标号所在的程序段含义2、程序开始时,为什么把第一个数既放到BH中,又放到BL中?3、按如下要求编写程序:设4000H单元开始有10个数,编程计算这十个数的平均值(存放在DH中),并统计这十个数中,大于平均值的个数(存放在DL中)。
找出这十个数的最大值和最小值(存在在BH和BL 中)1、BH、BL、X1处比较AL,BL的值,BL不低于AL的值就跳到X2处,如果BL的值大于或者等于AL的值就将AL的值赋给BL;X2跳到CON2处继续循环2、第一个数既有肯能是最大数也有可能是最小数,所以开始把第一个数即当最大值也当最小值3、START0: MOV SI,4000HMOV CX,0008MOV DX,0MAXMIN: MOV BH,[SI]MOV BL,BHCON1: LODSBADD DL,ALADC DH,0CMP AL,BHJNA X1MOV BH,ALJMP X2X1: CMP AL,BLJNB X2MOV BL,ALX2: LOOP CON1MOV CX,8MOV AX,DXMOV DX,0DIV CXMOV DH,ALMOV SI,4000HMOV DL,0CON2: LODSBCMP AL,DHJNA X3ADD DL,1X3: LOOP CON2MOV AH,4CHINT 21H。
微机实验报告二
微机实验报告一、实验题目1、求1到100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态。
2、将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来。
56H、0ffH、78H、82H、12H、0、95H、58H、0bcH、34H二、实验目的1、会用汇编语言进行简单的程序编写,熟悉汇编语言的编程结构,熟悉汇编指令,会用指令实现数字的运算。
2、会将二进制形式存储的数字按照要求的进制显示输出。
三、实验内容1、求1到100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态。
○1求和○2转换成10进制○3转换成ASCII码显示2、将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来。
56H、0ffH、78H、82H、12H、0、95H、58H、0bcH、34H○1排序○2转成与16进制相对应的字符的ASCII码进行显示。
1、文字叙述设计思路程序一:首先我们设置一个在1到100的计数器,因为循环往往会采用CX,则由此我们采用loop指令,那么CX就是自动减一,所以我们用CX作为计数器,同时用AX作为累加器,AX=AX+CX循环100次即可求的累加和。
然后显示,汇编语言中存储器是按照二进制形式存储的,如果要显示,只能是显示字符,所以我们需要将计算出的结果每一位进行分离,并且表示成字符形式,然后输出相应的字符即可。
分离的方法:将AX/10进行字除法4次,则DX存储余数,AX存放商值,DL+30H即将数字转成字符的ASCII码。
最后将上面得到的字符显示出来。
程序二:第一先对10个数进行排序,排序的方法可以采用选择法,然后要实现十六进制输出,则必须先将数字转换成相应的字符形式,然后再显示出来,由于数字如果多了,分别将每一位转成十六进制字符太麻烦,所以我们采用了一个字符表,只需要将分离出来的数据当成位移量即可。
大学微机原理实验报告(3篇)
第1篇实验名称:微机原理实验实验日期:2023年10月25日实验地点:计算机实验室实验教师:[教师姓名]实验学生:[学生姓名]班级:[班级名称]一、实验目的1. 理解微机原理的基本概念和组成结构。
2. 掌握微机硬件的基本操作和调试方法。
3. 熟悉汇编语言编程和程序调试技巧。
4. 通过实验加深对微机原理课程的理解,提高动手能力。
二、实验内容本次实验主要分为以下几个部分:1. 微机硬件系统结构认识:了解微机硬件系统的组成,包括CPU、内存、I/O接口等,熟悉各部件的功能和相互关系。
2. 汇编语言编程:学习汇编语言的基本语法和指令系统,编写简单的汇编程序,实现特定功能。
3. 程序调试:使用调试工具(如DEBUG)对汇编程序进行调试,查找并修正错误。
4. 微机原理实验:完成以下实验任务:1. 编写程序实现两个多位十进制数的相加。
2. 编写程序实现字符串比较功能。
3. 编写程序实现乘除法运算。
三、实验步骤1. 微机硬件系统结构认识:- 观察实验室中的微机硬件系统,了解各部件的连接方式和功能。
- 使用示波器检测实验装置的信号是否正常。
2. 汇编语言编程:- 学习汇编语言的基本语法和指令系统。
- 编写程序实现两个多位十进制数的相加,程序如下:```;加数DATA1 DB 3,4,5,6,7;被加数DATA2 DB 2,3,4,5,6;结果SUM DB 5 DUP(0);程序开始MOV CX, 5 ;循环次数MOV AL, 0 ;结果初始化为0MOV SI, OFFSET DATA1 ;加数地址MOV DI, OFFSET DATA2 ;被加数地址ADD_LOOP:ADD AL, [SI] ;加数加到AL寄存器ADC AL, [DI] ;进位加到AL寄存器MOV [DI], AL ;结果存回DI寄存器ADD SI, 1 ;加数地址加1ADD DI, 1 ;被加数地址加1LOOP ADD_LOOP ;循环;程序结束```- 编写程序实现字符串比较功能,程序如下:```;字符串1STRING1 DB 'Hello';字符串2STRING2 DB 'World';比较结果RESULT DB 0;程序开始MOV SI, OFFSET STRING1 ;字符串1地址MOV DI, OFFSET STRING2 ;字符串2地址CMP_LOOP:MOV AL, [SI] ;读取字符串1的当前字符CMP AL, [DI] ;与字符串2的当前字符比较 JNE NOT_EQUAL ;不相等则跳转到NOT_EQUAL INC SI ;字符串1地址加1INC DI ;字符串2地址加1LOOP CMP_LOOP ;循环MOV RESULT, 1 ;相等则将结果设置为1JMP END ;跳转到ENDNOT_EQUAL:MOV RESULT, 0 ;不相等则将结果设置为0END:;程序结束```- 编写程序实现乘除法运算,程序如下:```;被乘数DATA1 DB 10;乘数DATA2 DB 5;结果PRODUCT DB 0;程序开始MOV AL, [DATA1] ;被乘数加载到AL寄存器MUL [DATA2] ;乘数乘到AL寄存器MOV [PRODUCT], AL ;结果存回PRODUCT;程序结束```3. 程序调试:- 使用DEBUG工具对汇编程序进行调试,查找并修正错误。
微机原理实验报告
微机原理实验报告一、实验目的本实验旨在通过实际操控和操作微型计算机,深入了解微机系统的组成和工作原理,加深对计算机硬件结构以及基本操作的理解,培养实际动手能力。
二、实验内容1.熟悉微机系统组成部分:主机、显示器、键盘等。
2.掌握微机系统的基本操作:开机、关机、复位、重启等。
3.了解微机系统的工作原理:运行机制、输入输出等。
4.实践运用微机系统进行一些简单的应用操作。
三、实验步骤1.开机操作:按下主机电源按钮,等待主机启动。
2.系统自检:主机启动后会进行自检操作,检查硬件是否正常。
如果发现问题,主机会发出蜂鸣声。
3.输入输出设备准备:连接好显示器和键盘,并检查是否正常连接。
4.系统登录:按照屏幕上的提示,输入用户名和密码进行系统登录。
5.系统操作:根据实验要求,进行相应的系统操作。
6.关机操作:在操作完成后,选择关机选项进行关机。
四、实验结果与分析通过本次实验,我掌握了微机系统的基本操作,并对其工作原理有了更深入的了解。
通过实际操作,我可以熟练地开机、关机、复位等操作,并可以进行一些简单的应用操作。
同时,我也了解到了微机系统由主机、显示器、键盘等多个组成部分组成,不同组成部分的协作工作实现了系统的正常运行。
五、实验心得通过本次实验,我对微机系统的组成和工作原理有了更深入的了解。
这对我后续学习计算机原理和操作系统提供了基础。
在实验过程中,我也发现了一些问题,比如操作系统选择界面的选择问题,我没有选择正确的操作系统,导致后续实验操作遇到一些困难。
这些问题提醒我在实际操作中需要格外注意,仔细阅读提示并选择正确的操作选项。
总结来说,本次实验对我深入理解微机系统的组成和工作原理提供了良好的机会。
通过实际操控和操作微型计算机,我对计算机硬件结构以及基本操作有了更直观的认识,掌握了一些基本操作技能。
在未来的学习和应用中,我将更加注重细节,提高自己的操作技能,并不断深入学习和了解更多关于微机系统的知识。
微机原理与接口技术实验
CALL ADDA DISX 3DH MOV SI,OFFSET DATA3 MOV BX,05 CALL DISPL DISX 0DH DISX 0AH MOV AH,4CH INT 21H
DISPL DS1:
DISPL
PROC NEAR DISX [SI+BX-1] DEC BX JNZ DS1 RET ENDP
5.在屏幕上显示结果可利用INT 21H的02号子功能,因该功能一次只 能显示一个字符,故对于显示数字串来说,要编写一段显示子程序,反 复使用02H号子功能。
6.加数与被加数为5位,而和可能为5位或6位,即考虑到带进位和不 带进位的情况。在显示和数时最好按DISUP1: MOV AL,BH MOV CL,04 SHR AL,CL CMP AL,09 JA DISUP4 ADD AL,30H
实验二 两个多位十进制数相加的程序
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA
MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV DX,OFFSET MESS MOV AH,09H INT 21H MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL DISX 2BH MOV SI,OFFSET DATA2 MOV BX,05 CALL DISPL MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2
实验一 求最大值程序
NEXT: MAX2:
LOOP MAX1 MOV BL,AL MOV CL,04 SHR AL,CL CMP AL,09 JA MAX4 ADD AL,30H DISX AL MOV AL,BL AND AL,0FH CMP AL,09 JA MAX5 ADD AL,30H
微机原理实验报告(排序,计算)
《微机原理与接口技术实验报告》汇编语言循环结构程序设计一、实验目的1. 理解各种指令的功能。
2. 进一步学习程序的调试。
二、实验内容:1.编制程序,对这组数进行排序,并输出原数据及排序后数据; 2.利用DEBUG 调试工具,用D0命令,查看排序前后,内存数据的变化; 3.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值; 4.用学过的压栈PUSH 和出栈POP 指令,将平均值按位逐个输出; 5.将平均值转化为二进制串,并将这组二进制串输出。
6. 所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。
三、程序流程图四、程序清单DATA SEGMENTSR DB 100,?,50 DUP (?)VAR DW 5 DUP (0)AVG DW ?TEN DW 10P DW3D DW 2X DW?Y DW?MESG1 DB 13,10,'PLEASE INPUT:$'XS1 DB 13,10,'ORIGIN:$'XS2 DB 13,10,'NOW:$'XS3 DB 13,10,'MAX:$'XS4 DB 13,10,'MIN:$'XS5 DB 13,10,'AVG:$'XS6 DB 13,10,'AVG2:$'DATA ENDSSTACK SEGMENTDW 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV ES,AXMOV DX,OFFSET MESG1MOV AH,09HINT 21HLEA DX,SRCLDMOV CX,5LEA SI,SRADD SI,2LEA DI,VARIN_LOOP:MOV x, 0MOV Y,0_INX:MOV AH, 01HINT 21H;-------------------------------- CMP AL, '0'JB OKKCMP AL, 3AHJB SUB_30H;-------------------------------- JMP OKK;-------------------------------- SUB_30H:SUB AL, '0'MOV AH, 0MOV Y, AXMOV AX, xMUL TENADD AX, YMOV x, AXJMP _INX;-------------------------------- OKK:MOV AX,xSTOSWINC SILOOP IN_LOOP;-------------------------ORIGIN--- MOV DX,OFFSET XS1MOV AH,09HINT 21HMOV CX,5LEA SI,VARLOOPXS1:CALL XSLOOP LOOPXS1;-------------------------------CLDMOV CX,4MOV DX,1LOOPPX: CALL PXINC DXLOOP LOOPPX;----------------------------NOW-- MOV DX,OFFSET XS2MOV AH,09HINT 21HMOV CX,5LEA SI,VARLOOPXS2:CALL XSLOOP LOOPXS2;----------------------------MAX--- MOV DX,OFFSET XS3MOV AH,09HINT 21HLEA SI,VARADD SI,8CALL XS;-----------------------------MIN--- MOV DX,OFFSET XS4MOV AH,09HINT 21HLEA SI,VARCALL XS;-----------------------AVG------ MOV DX,OFFSET XS5MOV AH,09HINT 21HMOV AX,[SI]MOV BX,[SI+2]ADD AX,BXMOV BX,[SI+4]ADD AX,BXCWDIDIV PLEA SI,AVGMOV [SI],AXCALL XS;----------------------AVG2---------- MOV DX,OFFSET XS6MOV AH,09HINT 21HMOV CX,16LEA SI,AVGMOV AX,[SI]LPAVG: CWDSHR AX,1 ;to CFJB ONEMOV DX,0JMP PPONE: MOV DX,1PP: PUSH DXLOOP LPAVGMOV CX,16AVG2XS:POP DXADD DL,30HMOV AH,02HINT 21HLOOP AVG2XSEXIT: MOV AH,4CHINT 21HXS PROCLODSWMOV BX,1ZL1: CWDIDIV TENPUSH DXCMP AX,0JZ ZL2INC BXJMP ZL1ZL2: POP DXADD DL,30HDEC BXMOV AH,2INT 21HJNZ ZL2MOV DL,20HMOV AH,02HINT 21HRETXS ENDPPX PROCPUSH CXMOV CX,5SUB CX,DXMOV SI,0RECMP: MOV AX,VAR[SI]CMP AX,VAR[SI+2]JLE NOCHXCHG AX,VAR[SI+2]XCHG AX,VAR[SI]NOCH: ADD SI,2LOOP RECMPPOP CXRETPX ENDPCODE ENDSEND START五、运行结果按照实验要求,我们输入了“300,250,280,240,260,”。
实验二_寻找最大数最小数实验报告
寻找最大数和最小数姓名:李尔楠学号:11281008班级:计科1101一、实验目的1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。
2、通过循环结构程序熟悉汇编语言程序设计的主要方法。
3、了解和掌握程序设计过程中算法的选择。
4、掌握汇编语言调试方法。
二、实验内容以buff开始的内存单元中有10个有符号数(字节型DB):-37、28、-115、-2、98、-100、93、120、56、-99请编写程序,找出最大的数并存入MAX单元中,同时也找出最小的数并存入MIN单元中,在Debug下运行程序,查看数据区MAX和MIN的内容检验运行结果。
三、代码段及分析data segmentzuida db 'Max = $';定义显示最大数的字符串zuixiao db 'Min = $';定义显示最小数的字符串buffer dw 5,1,2,3,4,5,6,7,8,9;定义要比较的数N equ $-buffer;定义计数变量max dw ?;存储最大数min dw ?;存储最小数data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov cx,Nshr cx,1lea bx,buffermov ax,[bx];先将第一个数置为maxmov dx,[bx];先将第一个数置为mindec cxagain:inc bxinc bxcmp ax,[bx];比较jge next1;两数比较前者大于等于后者则跳转到next1mov ax,[bx];没跳转则AH中数小,替换jmp next2;跳到next2next1:cmp dx,[bx]jl next2;前者小于后者则跳转next2mov dx,[bx];前者大于后者则将后者赋给前者next2:loop again;循环mov max,axmov min,dxmov dx,seg zuidamov ds,dxmov dx,offset zuidamov ah,09hint 21h ;显示Maxmov dl,byte ptr max;将数值转换add dl,30H;由于是一位数字则+30H即可将其转换成ASCII码mov ah,02hint 21h ;显示最大值mov dl,0ahint 21h ;换行mov dl,0dhint 21h ;回车mov dx,seg zuixiaomov ds,dxmov dx,offset zuixiaomov ah,09hint 21h ;显示Min ismov dl,byte ptr min ;显示最大值和最小值add dl,30hmov ah,02hint 21hmov ah,4ch ;返回DOSint 21hcode endsend start四、运行截图及分析1.反编译程序如图1-1,1-2,1-3,1-4所示图1-1图1-2图1-3图1-42.单步执行将AX值赋给DS将0014赋给CX将第一个设为最大值将第一个设为最小值比较即一共十个数进行比较,当比较交大的数是如果前者大于后者则跳转到next2循环,若前者小于后者则将后者赋给前者,比较较小的数则为如果前者小于后者则跳转到next2如果前者大于后者则将后者的值赋给前者。
西安邮电大学学算法设计数组最大最小值问题实验报告
《算法设计与分析》上机实验报告专业软件工程班级1101学号学生姓名完成日期2013-10-181.上机题目及实验环境1.1上机题目:用分治法查找数组元素的最大值和最小值1.2实验环境:CPU:2.40GHz内存:2.00GB(1.89GB可用)操作系统:Windows 7 旗舰版软件平台:Microsoft Visual C++2. 算法设计与分析分治方法(Divide and Conquer):(1)将数据集S 均分为S1 和S2;(2)求解S1 和S2 中的最大和最小值;(3)最终的最大和最小值可以计算得到:min( S1, S2 ), max( S1, S2 );(4)采用同样的处理方法递归处理S1 和S2。
3. 核心代码void Max_Min(int Num[],int first,int last){int middle;if ((first+1)==last) // 递归数组的元素个数等于2时{if(Num[first]<Num[last]){if(max<Num[last] )//找到最大值max=Num[last];if(min>Num[first])//找到最小值min=Num[first];}else{if(max<Num[first])//找到最大值max=Num[first];if(min>Num[last])//找到最小值min=Num[last];}}else//递归数组的元素个数大于2时{middle=(first+last)/2;Max_Min(Num,first,middle);//对左边的数组进行分治递归Max_Min(Num,middle+1,last);//对右边的数组进行分治递归}}4. 运行与调试图1:N=32图2:N=64图3:N=1285. 结果分析和小结(1)对结果的分析。
N值3264128最大值979899最小值 2 1 0(2)本次上机实验的收获、心得体会。
北京理工大学自动化专业微机原理软件实验报告
微型计算机原理与接口技术软件实验报告班级:姓名:学号:实验一一.实验题目1、学习并掌握IDE86集成开发环境的使用;2、参考书例4-8,以单步形式观察程序的执行过程;3、修改该程序,求出10个数中的最大值和最小值。
以单步形式观察如何求出最大值、最小值。
二.实验目的1、熟悉IDE86集成开发环境的使用。
2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。
3、锻炼动手编程,独立思考的能力。
三.实验内容1、题目1的设计思路及流程图a.设计思路为实现求和的功能,首先将十个数存入内存中,设定AX为计算结果存储单元,CX为计数器,随后建立循环,将每个数依次加到AX上,直至CX=0,最后将AX中存储的结果移动到SUM存储单元中,结束程序。
b.流程图2、题目3设计思路及流程图a.设计思路为实现求取最大值最小值的功能,首先将十个数存入内存中,设定CX为计数器,将第一个数分别存入到MAX与MIN储存单元中,随后建立循环,将每个数依次与MAX(MIN)相比较,如果有大于(小于)MAX(MIN)中的,移入相应存储单元,直至CX=0。
最后将MAX和MIN中存储的数据打印在屏幕上,返回DOSb.四.实验源程序a.题目2源程序DATA SEGMENT ;定义数据段TABLE DB 12H,23H,34h,45h,56h ;10个加数DB 67H,78H,89H,9AH,0FDHSUM DW ?DATA ENDSCODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AX ;初始化DSMOV ES,AX ;初始化ESLEA SI,TABLE ;SI指向TABLEMOV CX,10 ;循环计数器XOR AX,AX ;AX为中间结果NEXT: ADD AL,[SI] ;把一个数加到AL中ADC AH,0 ;若有进位,则加到AH中INC SI ;指向下一个数LOOP NEXT ;若未加完,继续循环MOV SUM,AX ;若结束,存结果于SUMHLT ;结束CODE ENDS ;代码段结束ENDSTART ;汇编结束b.题目3源程序DATA SEGMENT ;定义数据段TABLE DB 12H,23H,34h,45h,56h ;十个待比较数DB 67H,78H,89H,9AH,0FDHMAX DB ?MIN DB ?A DB 'Max:','$' ;屏幕提示字符串B DB 0DH,0AH,'Min:','$'DATA ENDSCODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AX ;初始化DSMOV ES,AX ;初始化ESLEA SI,TABLE ;SI指向TABLEMOV CX,10 ;循环计数器XOR AX,AX ;清空AXCLD ;清方向标志DFLODSB ;AL存入一个8位数MOV MAX,AL ;将该数送MAXMOV MIN,AL ;将该数送MINDEC CX ;计数器减一NEXT: LODSB ;取下一个数CMP AL,MAX ;与MAX比较JA LARGER ;若大于转LARGERCMP AL,MIN ;否则与MIN比较JB SMALLER ;若小于转SMALLERJMP GOON ;否则转GOONLARGER:MOV MAX,AL ;AL的值存入MAX JMP GOON ;转到GOONSMALLER:MOV MIN,AL ;AL的值存入MINGOON: LOOP NEXT ;CX-1,若CX≠0转NEXTLEA DX,A ;获取A的首地址MOV AH,09H ;调用字符串显示功能INT 21HMOV AL,MAX ;MAX值存入ALCALL DISPLAY ;调用显示子程序LEA DX,B ;获取B的首地址MOV AH,09H ;调用字符串显示功能INT 21HMOV AL,MIN ;MIN值存入ALCALL DISPLAY ;调用显示子程序MOV AH,4CH ;调用返回DOS功能INT 21HDISPLAY PROC ;十六进制显示子程序PUSH BX ;保持BX内容PUSH CX ;保持CX内容MOV BH,ALMOV CH,2 ;设置循环计数器ROT: MOV CL,4 ;移位次数ROL BX,CLMOV AL,BLAND AL,0FH ;清空AL高四位ADD AL,30H ;0-9转换ASCII码CMP AL,3AHJL PRITADD AL,7H ;A-F转换ASCII码PRIT:MOV DL,ALMOV AH,2 ;调用字符显示功能INT 21HDEC CH ;计数器-1JNZ ROT ;CH≠0,继续循环POP CX ;恢复CX内容POP BX ;恢复BX内容RET ;返回DISPLAY ENDPCODE ENDS ;代码段结束ENDSTART ;结束五.实验运行结果a.题目2运行结果前五个数运算结束后寄存器状态:图3 前五个数计算后寄存器状态其中ax值为图4 前五个数计算后AX的值故此时前五个数之和为0104H。
微机原理实验求最大值和最小值
微机原理实验求最大值和最小值
本实验旨在通过学习微机原理,掌握如何求解一组数据的最大值和最小值。
实验中,
我们将使用基于AT89C51单片机的开发板作为实验平台,结合C语言编程,实现最大值和
最小值的求解,提高学生实际操作的能力。
实验步骤:
1. 准备实验环境
首先,需要准备好基于AT89C51单片机的开发板,并将其连接到电脑上。
在开发板中,需要连接到单片机的引脚上,可以使用杜邦线进行连接。
将开发板上的电源接好,并打开
电源开关。
2. 编写程序
接下来,我们需要使用C语言编写程序,实现最大值和最小值的求解。
程序的具体实
现方法如下:
(1)定义一个数组,用于存储一组数据。
(2)定义两个变量,用于分别记录最大值和最小值。
(3)使用for循环遍历数组中的所有元素,依次比较,更新最大值和最小值。
(4)输出最大值和最小值。
3. 烧录程序
将编写好的程序烧录到AT89C51单片机中。
可以使用KEIL或proteus等软件进行烧录。
4. 测试程序
在烧录程序成功后,需要进行测试,以确保程序能够正确运行。
可以使用模拟器或者
连接GPIO口的LED等外部设备定位问题。
实验结果:
总结:
本实验在提高学生实际操作能力的同时,还能够帮助学生深入理解微机原理。
通过本
次实验,学生学会了如何利用单片机和C语言编程解决实际问题,为以后的学习和实践打
下了基础。
北理(bit)微机原理上机软件实验报告
微机原理软件编程实验报告班级:学号:姓名:一、实验题目1、IDE86集成开发环境的学习和运用2、编写程序求出10个数中的最大值和最小值,并以单步形式观察如何求出最大值、最小值。
3、求1到100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态。
4、将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来。
(56H、0ffH、78H、82H、12H、0、95H、58H、0bcH、34H)二、实验目的1、学习并掌握IDE86集成开发环境的使用包括编辑、编译、链接、调试与运行等步骤编辑:源程序的输入、修改。
编译:常见编译出现的语法错误的修改。
连接:形成可执行文件。
运行:运行、断点设置、单步运行、单步跟踪;观察寄存器、标志寄存器值;观察数据存储器中的数据。
2、完成所有题目,提高编程能力,加深对理论课的理解。
三、实验内容1、文字叙述设计思路1.1编写程序求出10个数中的最大值和最小值由于一共有十个数,所以求其最大数或者最小数需要比较9次。
从数据段的段首开取数,先取两个数进行比较,比较完后取其中的最大数或者最小数放入数据段的第二位中。
再取第三位数与第二位数比较,如此循环,比较9次后在数据段最末位的就是我们需要的数。
1.2求1到100 的累加和,并用十进制形式将结果显示在屏幕上求和部分:1~100一共有100个数,所以需要做100次加法。
做加法要有两个数,第一个数是第i位的数值,第二个数是i-1位以及之前所有数的和,所以这两个数必须分别存放在两个寄存器里,并且两个数相加之后的所得的值,必须放在存放“和”的寄存器中,另外一个寄存器每做完一次加法自加1。
显示部分:我们所求得的最终数值在内存中是以16进制数存放的,但是由于结果只是一个数,我们可以把它的每一位所对应的ASCII码按照一定的顺序存放到一个数据段中,再以字符串形式直接输出。
1.3将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来比较部分:题目一共给了我们10个数,如果要进行排序的话可以先把十个数中最大的数选出来,放到数据段的最后一个位置,接着再选出次大的数放到数据段的倒数第二位,如此循环到最后便可成功将所给的十个数排序好。
微机原理实验
实验一、DEBUG 调试软件的使用一、实验目的1.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
2.了解数据在存储器中的存取方法以及堆栈中数据的压入与弹出。
3.掌握各种寻址方式以及简单指令的执行过程。
4.掌握变量和标号的处理,数值的默认进位制。
二、实验内容1.设堆栈指针SP=2000H,AX=3000H,BX=5000H;利用堆栈实现将AX,BX的内容交换。
用DEBUG 进行汇编和调试。
1.1 DEBUG的主要命令DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一.进入DEBUG状态二.DEBUG的命令1.汇编命令A该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。
注意:汇编程序默认的数据是十进制,而DEBUG默认的数据是16进制,即DEBUG中没有二进制、八进制及十进制,只有16进制。
汇编命令格式为:-A? [段地址]:[偏移地址] 说明:[ ]表示可选项,若未指定地址,则默认地址为CS:0100H。
例:用汇编语言编写一个简单的加法程序。
输入的汇编指令有语法错误的,将提示“error”,再重新输入正确指令即可。
若程序输入完毕,发现某条指令输入错误,比如第三条语句输入有误,就从该指令的偏移地址开始汇编(即-A 106)。
如果新输入的指令所占用的内存空间跟旧指令一样,修改完回车退出汇编即可;如果新输入的指令所占用的内存空间比旧指令少,可在多余的内存空间输入“NOP(空操作,占一字节)”指令;如果新输入的指令所占用的内存空间比旧指令多,就必须将后面的所有指令重新输入。
思考:汇编程序时,偏移地址为何不是连续的,它是如何变化的?(参考第6小点)2.命名命令N读(L)/写(W)程序前,必须先命名,即该命令结合读(L)/写(W)命令使用。
(参阅4、5)例:-N EX1;给程序文件命名为EX1。
3.检查和修改寄存器命令R4.写盘命令WW命令没有任何参数时,与命令N配合使用进行写操作,使用W命令前在BX:CX中应写入文件的字节数。
《求最大值最小值》微机原理的实验报告
实验报告实验三、给出一组数据,求其中的最大值与最小值1、编写程序:D:\>EDIT 文件名.ASMDATA SEGMENTARRAY DB -1,0,-99,100,110,34,-4,-6,45,90MAX DB 0MIN DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA ;程序用DEBUG装入后用U命令查看此语句MOV DS,AX ;可知数据段段基地址,以便查看结果MOV SI,OFFSET ARRAYMOV CX,0AH ;比较10个数据MOV BH,[SI] ;(BH)存放最大值,(BL)存放最小值MOV BL,BHA1: LODSB ;从数组中取数放ALCMP AL,BH ;与BH中的数据比较JLE A2 ;(AL)<=(BH),跳转A2执行;无符号数用JBE A2指令 MOV BH,AL ;(AL)>(BH),(AL)->(BH)JMP A3A2: CMP AL,BL ;与BL中的数据比较JGE A3 ;(AL)>=(BL),跳转A2执行;无符号数用JAE A3指令 MOV BL,AL ;(AL)<(BL),(AL)->(BL)A3: LOOP A1 ;10个数据未比较完,转A1执行MOV MAX,BHMOV MIN,BLMOV AH,4CHINT 21HCODE ENDSEND START2、编译程序:D:\>TASM 文件名.ASM3、连接程序:D:\>TLINK 文件名.OBJ4、执行程序:D:\>DEBUG 文件名.EXE (注意:必须是EXE文件)-U ;反汇编,查得数据段段基地址(DATA)=XXXX以及MAX和MIN的偏移地址[????]-D XXXX:0 ;查看原始数据-G ;运行程序-D XXXX:????(MAX的偏移地址) ;查看结果-Q ;退出DEBUG实验三、求最大最小值——对给出的10个数按递增排序。
实验二求最大数最小数
实验二、寻找最大和最小数实验一、实验目的1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。
2、通过循环结构程序熟悉汇编语言程序设计的主要方法。
3、了解和掌握程序设计过程中算法的选择。
4、掌握汇编语言调试方法。
二、实验内容以buff开始的内存单元中有9个有符号数(字节型DB):手动输入9个数字请编写程序,找出最大的数并存入MAX单元中,同时也找出最小的数并存入MIN单元中,在Debug下运行程序,查看数据区MAX和MIN的内容检验运行结果。
三、编程过程1、在数据段设置buff 区(DB)存放10个被测试的数,再分别设置字节数据MAX、MIN。
BUF dbMAX dbMIN db2、通过一个循环程序完成比较,先用第一个数与第二个,把较小的数放在AL中,较大的数放在AH中。
3、以后每次都用AL与后面的数比较,把小的总放在AL中;然后再用AH与后面的数比较,把大的放在AH中;比较结束后AL和AH分别放最小和最大数。
四、实验步骤1、在EDIT或其它编辑方式下输入源程序,并以3.ASM名保存。
2、用MASM 文件汇编源程序,C>MASM 3;3、用LINK连接程序,C>LINK 3; 形成3.EXE文件。
4、在DEBUG调试环境下调试并运行3.EXE程序。
5、首先用R指令,然后使用U指令查看自己所编写的程序,确定断点后,使用G命令执行程序到断点,查看结果程序执行输入9个数字:123456789 输出:最大值9,最小值16、程序运行结束后,用 D DS:0 检查数据区MAX及MIN内容,检查结果是否正确。
五、思考1、查看DOS操作系统把可执行程序装载到的内存的首地址及结束地址。
首地址:1447:0000 ,结束地址:1447:00532、查看MAX和MIN的段地址及偏移地址。
MAX:1444:0024MIN:1444:00253、分别计算数据段和代码段占用的地址空间大小。
数据段:40字节代码段:54字节附:源程序清单:DATA SEGMENTSTR DB 0AH,0DH,"please input number: ",'$'BUF DB 10 ;BUF大小DB ?DB 10 DUP(?) ;字符个数;CNT EQU $-BUF-3 ;循环次数MAX DB ? ;存放最大数MIN DB ? ;存放最小数CRLF DB 0AH,0DH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA DX,STRMOV AH,09HINT 21HINPUT: LEA DX,BUFMOV AH,0AHINT 21HMOV CX,CNT-1MOV BX,OFFSET BUF+2 ;首地址MOV AH,[BX] ;假定第一个数为最大数 MOV AL,[BX] ;假定第一个数为最小数 LOOP1: INC BX ;指向下一个数CMP AH,[BX] ;比较JGE NEXT1 ;AH中数大MOV AH,[BX] ;AH中数小,替换JMP NEXT2NEXT1: CMP AL,[BX] ;比较JNGE NEXT2MOV AL,[BX] ;AL中数大,替换NEXT2: DEC CXJNZ LOOP1 ;循环MOV MAX,AH ;存储最大数MOV MIN,ALMOV DL,CRLFMOV AH,02INT 21HMOV DL,MAXMOV AH,02INT 21HMOV DL,MINMOV AH,02INT 21HMOV AH,4CHINT 21HCODE ENDSEND STAR实验三、统计学生成绩一、实验步骤1、在EDIT或其它编辑方式下输入源程序,并以t.ASM名保存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验三、给出一组数据,求其中的最大值与最小值
1、编写程序:D:\>EDIT 文件名.ASM
DATA SEGMENT
ARRAY DB -1,0,-99,100,110,34,-4,-6,45,90
MAX DB 0
MIN DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;程序用DEBUG装入后用U命令查看此语句
MOV DS,AX ;可知数据段段基地址,以便查看结果
MOV SI,OFFSET ARRAY
MOV CX,0AH ;比较10个数据
MOV BH,[SI] ;(BH)存放最大值,(BL)存放最小值
MOV BL,BH
A1: LODSB ;从数组中取数放AL
CMP AL,BH ;与BH中的数据比较
JLE A2 ;(AL)<=(BH),跳转A2执行;无符号数用JBE A2指令 MOV BH,AL ;(AL)>(BH),(AL)->(BH)
JMP A3
A2: CMP AL,BL ;与BL中的数据比较
JGE A3 ;(AL)>=(BL),跳转A2执行;无符号数用JAE A3指令 MOV BL,AL ;(AL)<(BL),(AL)->(BL)
A3: LOOP A1 ;10个数据未比较完,转A1执行
MOV MAX,BH
MOV MIN,BL
MOV AH,4CH
INT 21H
CODE ENDS
END START
2、编译程序:D:\>TASM 文件名.ASM
3、连接程序:D:\>TLINK 文件名.OBJ
4、执行程序:D:\>DEBUG 文件名.EXE (注意:必须是EXE文件)
-U ;反汇编,查得数据段段基地址(DATA)=XXXX
以及MAX和MIN的偏移地址[????]
-D XXXX:0 ;查看原始数据
-G ;运行程序
-D XXXX:????(MAX的偏移地址) ;查看结果
-Q ;退出DEBUG
实验三、求最大最小值——对给出的10个数按递增排序。
设计思想:
a.从最后一个数开始,依次把相邻的两个数进行比较,即第10个数和第9个数比较,第9个数和第8个数比较,等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到10个数的相邻两个数都比较完为止。
此时,10个数中的最小数将被排在10个数的最前列。
b.对剩下的9个数重复上步,找到9个数中的最小数。
c.重复第二步,直到10个数全部排序好为止。
参考程序:
DATA SEGMENT
ARRAY DB -1,0,-99,100,110,34,-4,-6,45,90
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARRAY+10
MOV CX,0AH
MOV BL,0FFH ;设置标志FF
A1: CMP BL,0FFH
JNZ A4 ;BL不为FF则转A4
MOV BL,0H ;
DEC CX ;外循环修正CX
JZ A4
PUSH SI
PUSH CX
A2: DEC SI
MOV AL,[SI]
DEC SI
CMP AL,[SI]
JG A3 ;无符号数用JA A3指令
XCHG AL,[SI]
MOV [SI+1],AL
MOV BL,0FFH
A3: INC SI
LOOP A2
POP CX
POP SI
JMP A1
A4: MOV AH,4CH
INT 21H
CODE ENDS
END START。