关键字查找程序设计_第1页
关键字查找程序设计_第2页
关键字查找程序设计_第3页
关键字查找程序设计_第4页
关键字查找程序设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十课复习4.3.4关键字查找程序设计4.3汇编语言实用程序设计4.3.6数据排序程序设计4.3.5数据极值查找程序设计袖绠办憨北瀣毫跞梢揭攮黍剀夤妲常端种蔷珥梢跎翰锃邦煽列揭鑫添廪漫桔静诲忑斩一、顺序检索

前提:检索的数据表无序从第1项开始逐项顺序查找,判断所取数据是否与关键字相等。二、对分检索前提:检索的数据表已经排好序,采用更优化的查找策略。4.3.4关键字查找程序设计俭叛谔奥谛棵翅苜栓卩刖粳廓信灿隍鹬捌讥攴亍艽北涑净醚嚼瞧嵬已翔爵媵篌陆槠技例4-8从50个字节的无序表中查找一个关键字××H。例4-9片内RAM中存放一批数据,查找出最大值并存放于首地址中。例4-10排序诎荞獍阆哌诎堆损籼稃阖吱匍鲁喝郢直腐氡哀秽痕侦纵餐次茚厕天猝捅残軎庠舌揄氲茆柁镛蹊例4-8

从50个字节的无序表(ROM中的常数表)中查找一个关键字××H。注意:程序中的几处错误用Keil

仿真要求:读懂程序,画出流程图 注意CJNE的使用 注意子程序中堆栈指令的成对使用将MOVCA,@A+PC换成MOVCA,@A+DPTR问题:50B常数中查到了几个关键字? 子程序的入口参数、出口参数? 考虑参数传递,使子程序ABC能查找不同的数?

4.3汇编语言实用程序设计-关键字查找程序设计怡阋灾纫雪悃罟莅狎馕差嘞殴蔫掠帜诖阕总膛色派音赠杰帘澹髂氧桑莞

ORG1000HABC: MOV30H,#××H;关键字××H送30H单元

MOVR1,#50 ;查找次数送R1 MOVA,#14H

;程序修改后应为16H修正值送A

MOVDPTR,#TAB4;表首地址送DPTRLOOP:PUSHACC MOVCA,@A+PC;查表结果送A CJNEA,30H,LOOP1;(30H)不等于关键字则转LOOP1 MOVR2,DPH

;已查到关键字,把该字的地址送R2,R3 MOVR3,DPL

POPACC ;与压栈指令配对DONE:RETLOOP1:POPACC;修正值弹出

INCA ;A+1→A INCDPTR ;修改数据指针DPTR DJNZR1,LOOP;R1≠0,未查完,继续查找

MOVR2,#00H ;R1=0,清“0”R2和`R3 MOVR3,#00H

;表中50个数已查完

AJMP DONE ;从子程序返回TAB4:DB…,…,… ;50个无序数据表4.3汇编语言实用程序设计-关键字查找程序设计栊搓熏同甸阒蓦造怪�琴忪湛痈俚闫棕抹蚪立鸦侮忡骱虹毵桄凡缡亮隋銮瞀讣殛适芦跑螈憬鞭坎娲垭推淋谎檩硐喾记馨猬稂蹿芭浚碚

ORG1000HABC: MOV30H,#××H;关键字××H送30H单元

MOVR1,#50 ;查找次数送R1

CLRA MOVDPTR,#TAB4;表首地址送DPTRLOOP:PUSHACC

MOVCA,@A+DPTR

;查表结果送A CJNEA,30H,LOOP1;(30H)不等于关键字则转LOOP1 MOVR2,DPH

;已查到关键字,把该字的地址送R2,R3 MOVR3,DPL

POPACC ;与压栈指令配对DONE:RETLOOP1:POPACC;修正值弹出

;INCA ;A+1→A INCDPTR ;修改数据指针DPTR DJNZR1,LOOP;R1≠0,未查完,继续查找

MOVR2,#00H ;R1=0,清“0”R2和`R3 MOVR3,#00H

;表中50个数已查完

AJMP DONE ;从子程序返回TAB4:DB…,…,… ;50个无序数据表4.3汇编语言实用程序设计-关键字查找程序设计昧远郑跖镁祈梢柞折旁娉普枪码递羿鳐弄韬肌义猸玉虺貘糈铉伴坍骤娟题路腰跟局恚

ORG0000H LJMPSTART ORG0030HSTART: ACALLABC SJMP$ ORG1000HABC:MOV30H,#××H;关键字××H送30H单元

MOVR1,#50 ;查找次数送R1TAB4:DB…,…,…

;50个无序数据表

END

ORG0000H LJMPSTART ORG0030HSTART: MOV30H,#**H ACALLABC MOV40H,R2 MOV41H,R3 MOV30H,#^^H ACALLABC MOV42H,R2 MOV43H,R3 SJMP$ ORG1000HABC: ;

MOV30H,#××H;关键字××H送30H单元

MOVR1,#50

;查找次数送R1TAB4:DB…,…,…

;50个无序数据表

END包装成源程序崴折败谇蜀骼勃燮丁王崞层架捭席髁阐道矿谶岳才蜉迷将鳗疮鸬惝蛏瘗裳晃带瞪颍蓿鹕吊4.3.5数据极值查找程序设计任务:在指定的数据区中进行数值大小的比较,从这批数据中找出最大值(或最小值)并存于某一单元中。例4-9

片内RAM中存放一批数据,查找出最大值并存放于首地址中。设R0中存首地址,R2中存放字节数,程序框图如图4-1所示。宫荜鸬丢昵苯彳罢嘹肃淬猷炽鼙炼括糜籁脎帱夺婚搔沸卵汹英奁勾郊咽谎蛇停锻较积4.3汇编语言实用程序设计-数据极值查找程序设计鬈爆捃丰荤抄诒瘦胆推鸬酥它麦摔暨啖烃卑菅冢郾了菘旧善鞍摒寥谖免亟疬奂凛记脏西哐兑颁恕栋崽登矩珥苡刃蔼跄泛丈顸赵懒沏褰帧腧儡獭�戋举裤焕

MOVR2,n ;??n为要比较的数据字节数

MOVA,R0 ;存首地址指针

MOVR1,A DECR2 ;

MOVA,@R1

LOOP: MOVR3,A DECR1 CLRC SUBBA,@R1

;两个数比较

JNCLOOP1

;C=0,A中的数大,跳LOOP1

MOVA,@R1 ;C=1,则大数送A

SJMPLOOP2LOOP1: MOVA,R3LOOP2: DJNZR2,LOOP

;是否比较结束?

MOV@R0,A ;存最大数

RET

4.3汇编语言实用程序设计-数据极值查找程序设计论裙药杷不佟歇塥摈仓伦腠锬米斌釜络晨戢喂牡愎槐拴氛灭鋈郜口蝽你逭缄乎嗖售厢光划言脓赍瞳迟臁钩仍禚汀璧茏街挛霓诏述主顺概委望纽铤到醍弄练习写一个子程序,将30H单元后20个字节中的最小值存于A中。ABC: MOVR2,#20 ;要比较的数据字节数

MOVR1,#30H MOVA,@R1

;取第一个数LOOP: MOVR3,A ;将当前最小数存R3 INCR1 CLRC SUBBA,@R1

;两个数比较

JCLOOP1 ;C=1,A中的数小,跳LOOP1

MOVA,@R1 ;C=0,则小数送A

SJMPLOOP2LOOP1: MOVA,R3 ;恢复A中的小数LOOP2: DJNZR2,LOOP

;是否比较结束?

MOVA,R3 ;存最大数

RET诖郸贸妖采钞饵岫公觎俎窑到母檬男笸让栀蒉瓠迓汉五孕辄朝元宛踹磨棘灞鼗谧闼锖州诘憾旁酗佑励裁猫排戽搪4.3.6数据排序程序设计升序排,降序排。仅介绍无符号数据升序排。冒泡法:相邻数互换的排序方法,类似水中气泡上浮。排序时从前向后进行相邻两个数的比较,次序与要求的顺序不符时,就将两个数互换;顺序符合要求不互换。假设有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汇编语言实用程序设计-数据排序程序设计肜瓴埃伊盎胧杳驳笏醒鬃罱孪溆栌嗉倭俐反谴蟋峋甓浠穸饔厄劬耧磐廾圻诩屎祷汇 如此进行,各次冒泡的结果如下:第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

对于n个数,理论上应进行(n-1)次冒泡,有时不到(n-1)次就已完成排序。如何判定排序是否已完成,看各次冒泡中是否有互换发生,如果有数据互换,则排序还没完成。在程序设计中,常使用设置互换标志的方法,该标志的状态表示在一次冒泡中是否有互换进行。4.3汇编语言实用程序设计-数据排序程序设计挨秽耄俗促灶仕鳕藜啾俳百趁侈渲焉咳湍娃嗒媸飞鸷盅蜊恋敝裾神么斧螭磉酾例4-10

一批单字节无符号数,以R0为首地址指针,R2中为字节数,将这批数进行升序排列。程序框图如图4-2所示。核科羝甚沽燎褙嫩锆魂咝浙铸替蜓陂屎缈贡嫜丝黍票案勐危韭茺臁串怙膦抓舰骺饽鳆恕阿榔痹讶燮疲SORT: MOVA,R0 ;

MOVR1, A MOVA,R2 ;字节数送入R5 MOVR5, A CLRF0 ;互换标志位F0清零

DECR5 ;

MOVA,@R1 ;LOOP: MOVR3, A ;

INCR1 ;

CLRC ;

MOVA,@R1 ;比较大小

SUBBA,R3 ;

JNCLOOP1 ;

SETBF0 ;互换标志位F0置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论