关键字查找程序设计

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

;关键字×× 送30H单元 关键字××H送 单元 ×× 查找次数送R1 ;查找次数送
TAB4: DB …,…,… : , , END
;50个无序数据表 个无序数据表
4.3.5 数据极值查找程序设计
任务: 在指定的数据区中进行数值大小的比较, 任务: 在指定的数据区中进行数值大小的比较,从这 批数据中找出最大值(或最小值)并存于某一单元中。 批数据中找出最大值(或最小值)并存于某一单元中。
对于n个数,理论上应进行( 对于 个数,理论上应进行(n-1)次冒泡,有时不到(n-1) 个数 )次冒泡,有时不到( ) 如何判定排序是否已完成, 次就已完成排序 。如何判定排序是否已完成,看各次冒泡 中是否有互换发生,如果有数据互换,则排序还没完成。 中是否有互换发生,如果有数据互换,则排序还没完成。 在程序设计中,常使用设置互换标志的方法, 设置互换标志的方法 在程序设计中,常使用设置互换标志的方法,该标志的状态 表示在一次冒泡中是否有互换进行。 表示在一次冒泡中是否有互换进行。
包装成源程序
ORG 0000H LJMP START ORG 0000H ORG 0030H LJMP START START: MOV 30H,#**H ORG 0030H ACALL ABC START: ACALL ABC MOV 40H, R2 SJMP $ MOV 41H, R3 ORG 1000H MOV 30H,#^^H ABC: ACALL ABC ,#×× MOV 30H, ×× ××H MOV R1, MOV 42H, ,#50 R2 TAB4: DB …,…,… : , , MOV 43H, R3 SJMP $ END ORG 1000H ABC: ; MOV 30H,#×× , ××H ×× MOV R1,#50 , ;关键字×× 送30H单元 关键字××H送 ×× 单元 查找次数送R1 ;查找次数送 ;50个无序数据表 个无序数据表
个字节的无序表( 中的常数表) 例4-8 从50个字节的无序表(ROM中的常数表)中查找 个字节的无序表 中的常数表 一个关键字×× ××H。 一个关键字×× 。 注意:程序中的几处错误 注意: 用Keil 仿真 要求:读懂程序, 要求:读懂程序,画出流程图 注意CJNE的使用 注意 的使用 注意子程序中堆栈指令的成对使用 换成MOVC A, @A+DPTR 将MOVC A, @A+PC换成 换成 问题: 常数中查到了几个关键字? 问题:50B常数中查到了几个关键字? 常数中查到了几个关键字 子程序的入口参数、出口参数? 子程序的入口参数、出口参数? 考虑参数传递,使子程序ABC能查找不同的数? 能查找不同的数? 考虑参数传递,使子程序 能查找不同的数
十结束
2010-04-15 作业
P99 7、8、10
LOOP:
LOOP1: LOOP2:
练习
ABC: MOV R2,#20 , ;要比较的数据字节数 MOV 写一个子程序,将, 单元后 个字节中的最小值 30H单元后 单元后20个字节中的最小值 写一个子程序,R1,#30H , ;取第一个数 存于A中。 存于 中 MOV A,@R1 LOOP: MOV R3, A 将当前最小数存R3 , ;将当前最小数存 INC R1 CLR C SUBB A,@R1 , ;两个数比较 JC LOOP1 ;C=1,A中的数小,跳LOOP1 , 中的数小, 中的数小 MOV A,@R1 , ;C=0,则小数送 ,则小数送A SJMP LOOP2 LOOP1: MOV A,R3 恢复A中的小数 , ;恢复 中的小数 LOOP2: DJNZ R2, LOOP ;是否比较结束? 是否比较结束? MOV A,R3 , ;存最大数 RET
A, A,R0 ; R1, R1, A A, 字节数送入R5 A,R2 ;字节数送入R5 R5, R5, A 互换标志位F0 F0清零 F0 ;互换标志位F0清零 R5 ; A, A,@R1 ; R3, R3, A ; R1 ; C ; A, A,@R1 ;比较大小 A, A,R3 ; LOOP1 ; 互换标志位F0 F0置 F0 ;互换标志位F0置1 A,R3; A,R3; ; A, A,@R1 ;两个数互换 R1 ; A, A,@R1 ; R1 A, A,@R1 R5, R5,LOOP F0, F0,SORT
例4-10 一批单字节无符号 数,以R0为首地址指针, 为首地址指针, 为首地址指针 R2中为字节数,将这批数 中为字节数, 中为字节数 进行升序排列。 进行升序排列。程序框图 如图4-2所示 所示。 如图 所示。
SORT: SORT: MOV MOV MOV MOV CLR DEC MOV LOOP: MOV INC CLR MOV SUBB JNC SETB MOV XCH DEC XCH INC LOOP1: LOOP1: MOV DJNZ JB RET
个字节的无序表中查找一个关键字×× 例4-8 从50个字节的无序表中查找一个关键字×× 。 个字节的无序表中查找一个关键字××H。 片内RAM中存放一批数据,查找出最大值并 中存放一批数据, 例4-9 片内 中存放一批数据 存放于首地址中。 存放于首地址中。
例4-10 排序
4.3
汇编语言实用程序设计汇编语言实用程序设计-关键字查找程序设计
4.3
汇编语言实用程序设计-数据极值查找程序设计 汇编语言实用程序设计MOV R2,n , ;??n为要比较的数据字节 为要比较的数据字节
数 MOV A,R0 , ;存首地址指针 MOV R1,A , DEC R2 ; MOV A,@R1 , MOV R3, A , DEC R1 CLR C SUBB A,@R1 , ;两个数比较 JNC LOOP1;C=0,A中的数大,跳LOOP1 中的数大, ; , 中的数大 MOV A,@R1 , ;C=1,则大数送 ,则大数送A SJMP LOOP2 MOV A,R3 , DJNZ R2, LOOP ;是否比较结束? 是否比较结束? MOV @R0, A , ;存最大数 RET
4.3
汇编语言实用程序设计-数据排序程序设计 汇编语言实用程序设计-数据排序程序设计
4.3.6 数据排序程序设计
升序排,降序排。仅介绍无符号数据升序排。 升序排,降序排。仅介绍无符号数据升序排。 冒泡法:相邻数互换的排序方法,类似水中气泡上浮 。排 冒泡法:相邻数互换的排序方法, 序时从前向后进行相邻两个数的比较, 序时从前向后进行相邻两个数的比较,次序与要求的顺序不 符时,就将两个数互换;顺序符合要求不互换。 符时,就将两个数互换;顺序符合要求不互换。 假设有7个原始数据的排列顺序为: 假设有7个原始数据的排列顺序为:6、4、1、2、5、7、3。 第一次冒泡的过程是: 第一次冒泡的过程是: 6、4、1、2、5、7、3 ;原始数据的排列 逆序, 4、6、1、2、5、7、3 ;逆序,互换 逆序, ;逆序,互换 4、1、6、2、5、7、3 逆序, 4、1、2、6、5、7、3 ;逆序,互换 逆序, 4、1、2、5、6、7、3 ;逆序,互换 4、1、2、5、6、7、3 ;正序,不互换 正序, 逆序,互换, 4、1、2、5、6、3、7 ;逆序,互换,第一次冒泡结束
4.3
汇编语言实用程序设计汇编语言实用程序设计-关键字查找程序设计
ORG 1000H ABC: MOV 30H,#×× ××H ;关键字×× 送30H单元 关键字×× ××H送 , ×× 单元 MOV R1,#50 查找次数送R1 , ;查找次数送 CLR A MOV DPTR,#TAB4 ;表首地址送 表首地址送DPTR , LOOP:PUSH ACC : MOVC A,@ A+DPTR ;查表结果送 查表结果送A , CJNE A,30H,LOOP1;(30H)不等于关键字则转 , , ; )不等于关键字则转LOOP1 MOV R2,DPH 已查到关键字,把该字的地址送R2, , ;已查到关键字,把该字的地址送 ,R3 MOV R3,DPL , POP ACC ;与压栈指令配对 DONE: RET : LOOP1:POP ACC : ;修正值弹出 ;INC A ;A+1→A INC DPTR 修改数据指针DPTR ;修改数据指针 DJNZ R1,LOOP ;R1≠0,未查完,继续查找 , ,未查完, MOV R2,#00H , ;R1=0,清“0” R2 和`R3 , MOV R3,#00H 表中50个数已查完 , ;表中 个数已查完 AJMP DONE ;从子程序返回 TAB4:DB …,…,… : , , ;50个无序数据表 个无序数据表
4.3
汇编语言实用程序设计-数据排序程序设计 汇编语言实用程序设计-数据排序程序设计
如此进行,各次冒泡的结果如下: 如此进行,各次冒泡的结果如下: 次冒泡结果: 第1次冒泡结果:4、1、2、5、6、3、7 次冒泡结果: 第2次冒泡结果:1、2、4、5、3、6、7 次冒泡结果: 第3次冒泡结果:1、2、4、3、5、6、7 次冒泡结果: 第4次冒泡结果:1、2、3、4、5、6、7 ;已完成排序 次冒泡结果: 第5次冒泡结果:1、2、3、4、5、6、7 次冒泡结果: 第6次冒泡结果:1、2、3、4、5、6、7
片内RAM中存放一批数据,查找出最大值并存放 中存放一批数据, 例4-9 片内 中存放一批数据 于首地址中。 中存首地址, 中存放字节数 中存放字节数, 于首地址中。设R0中存首地址,R2中存放字节数,程序 中存首地址 框图如图4-1所示。 框图如图 所示。 所示
4.3
汇编语言实用程序设计-数据极值查找程序设计 汇编语言实用程序设计-
第十课
复习 4.3 汇编语言实用程序设计
4.3.4 关键字查找程序设计 4.3.5 数据极值查找程序设计 4.3.6 数据排序程序设计
4.3.4 关键字查找程序设计
一、顺序检索 前提: 前提:检索的数据表无序 从第1项开始逐项顺序查找 项开始逐项顺序查找, 从第 项开始逐项顺序查找,判断所取数据是否与关键字相 等。 二、对分检索 前提:检索的数据表已经排好序,采用更优化的查找策略。 前提:检索的数据表已经排好序,采用更优化的查找策略。
4.3
汇编语言实用程序设计汇编语言实来自百度文库程序设计-关键字查找程序设计
ORG 1000H ABC: MOV 30H,#×× ××H ;关键字×× 送30H单元 关键字×× ××H送 , ×× 单元 MOV R1,#50 查找次数送R1 , ;查找次数送 MOV A,#14H 程序修改后应为16H修正值送 修正值送A , ;程序修改后应为 修正值送 MOV DPTR,#TAB4 ;表首地址送 表首地址送DPTR , LOOP:PUSH ACC : MOVC A,@ A+PC ;查表结果送 查表结果送A , CJNE A,30H,LOOP1;(30H)不等于关键字则转 , , ; )不等于关键字则转LOOP1 MOV R2,DPH 已查到关键字,把该字的地址送R2, , ;已查到关键字,把该字的地址送 ,R3 MOV R3,DPL , POP ACC ;与压栈指令配对 DONE: RET : LOOP1:POP ACC : ;修正值弹出 INC A ;A+1→A INC DPTR 修改数据指针DPTR ;修改数据指针 DJNZ R1,LOOP ;R1≠0,未查完,继续查找 , ,未查完, MOV R2,#00H , ;R1=0,清“0” R2 和`R3 , MOV R3,#00H 表中50个数已查完 , ;表中 个数已查完 AJMP DONE ;从子程序返回 TAB4:DB …,…,… : , , ;50个无序数据表 个无序数据表
相关文档
最新文档