实验二布尔运算类指令练习和数据排序实验

更新时间:2023-10-06 12:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二 3.3 布尔运算类指令练习和数据排序实验

系别专业:电子系12级电信2班 学号:3121003210

姓名:李书杰 指导老师:刘志群老师

3.3.1 实验要求

1. 进一步熟悉 Keil C51软件的使用。

2. 复习布尔运算类指令及冒泡排序的思想方法。

3.3.2 实验设备

PC 机一台,TD-NMC+教学实验系统

3.3.3 实验目的

1. 了解布尔处理机在设计逻辑电路中的应用。 2. 学会数据冒泡排序的方法。

3. 体会 8051单片机布尔运算类指令的功能,进一步掌握汇编语言设计和调试方法。

3.3.4 实验内容

实验1程序: ORG 0000H SJMP START ORG 0030H X BIT 00H Y BIT 01H Z BIT 02H F BIT 03H START: MOV C,Z ANL C,/Y MOV F,C MOV C,Y ANL C,/Z ORL C,F MOV F,C MOV C,X ANL C,Y ORL C,/F MOV F,C SJMP $ END

(1)X、Y、Z和 F代表内部 RAM20H的 00H、01H、02H和 03H的位地址。按下表修改内RAM数据窗口的值,从 00H开始直到 07H(即取X、Y和 Z的每种组合),调试结果填于下表。

(2)分析上述程序,并把分析(理论)结果和实验结果进行比较,二者结果应该相同。

实验 1表 实验2

编写并调试一个排序程序,其功能为用冒泡法将内部 RAM的50H~56H中几个单元字节的无符号正整数,按从小到大的次序重新排列。其实验参考流程图如图 3.3.1所示。 ORG 0000H SJMP START ORG 0030H START:

;------------------------下面先准备6个数字 MOV 50H, #03H MOV 51H, #01H MOV 52H, #08H MOV 53H, #02H MOV 54H, #07H MOV 55H, #04H

CALL SORT6 ;调用排序子程序

SJMP $ ;停止,此时可以观察排序结果 ;-------------------------------------

SORT6: ;排序子程序

MOV R6, #5 ;6个数字,比较5次 S1:

MOV R0, #50H ;起始地址 MOV B, R6 MOV R7, B

CLR PSW.5 ;交换标志清零 S2:

MOV B, @R0 ;取出前一个数 INC R0

MOV A, @R0 ;取出后一个数 CJNE A, B, S3 ;后-前 S3:

JNC N_JH ;够减就不用交换 MOV @R0, B ;交换存放 DEC R0

MOV @R0, A INC R0

SETB PSW.5 ;设立交换标志位 N_JH:

DJNZ R7, S2

JNB PSW.5, S_END ;没有交换过,就结束

DJNZ R6, S1 S_END: RET

;------------------------------------- END

3.3.5 思考题

1. 分析实验程序1,写出 F的表达式,并画出其逻辑电路图。简单分析布尔处理器在单片机中的作用。

答:可用于位数据传送,位清零,位清1,位取反,为逻辑“与”指令,为逻辑“或”指令,判布尔累加器C转移,判位变量转移,判位变量并清0转移。 2. 简述冒泡排序的思想。

答:第一次: 从一个数组的最后一个元素到该数组的第一个元素进行扫描,比较后一个元素与前一个元素的大小,如果后一个小于前一个,交换顺序。通过这样的交换,那么我们就可以把该数组的最小元素换位到该数组的第一个位置。

第二次: 从该数组的最后一个元素到该数组的第二个元素进行扫描,比较后一个元素与前一个元素的大小,如果后一个小于前一个,交换顺序。通过这样的交换,那么我们就可以把该数组的最小元素换位到该数组的第二个位置。 依次这样的循环。。。。 如果是有n个元素的话,那么我们就要进行n-1次的冒泡,就可以把该数组从小到大排好序。(但是这样循环的次数太多了,程序的效率比较的低)

3. 在排序程序中添加排序标志位(即若发现在某轮排序中,相邻两数未进行任何交换,说明数据已经排序完毕,就无需再继续排序了,这样可以节省排序时间),程序该如何编写?

本文来源:https://www.bwwdw.com/article/kggd.html

Top