關鍵字查找程序設計_第1頁
關鍵字查找程序設計_第2頁
關鍵字查找程序設計_第3頁
關鍵字查找程序設計_第4頁
關鍵字查找程序設計_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第十課復習4.3.4關鍵字查找程序設計4.3匯編語言實用程序設計4.3.6數(shù)據(jù)排序程序設計4.3.5數(shù)據(jù)極值查找程序設計袖綆辦憨北瀣毫躒梢揭攮黍剴夤妲常端種薔珥梢跎翰锃邦煽列揭鑫添廩漫桔靜誨忑斬一、順序檢索

前提:檢索的數(shù)據(jù)表無序從第1項開始逐項順序查找,判斷所取數(shù)據(jù)是否與關鍵字相等。二、對分檢索前提:檢索的數(shù)據(jù)表已經(jīng)排好序,采用更優(yōu)化的查找策略。4.3.4關鍵字查找程序設計儉叛諤奧諦棵翅苜栓卩刖粳廓信燦隍鷸捌譏攴亍艽北涑凈醚嚼瞧嵬已翔爵媵篌陸櫧技例4-8從50個字節(jié)的無序表中查找一個關鍵字××H。例4-9片內(nèi)RAM中存放一批數(shù)據(jù),查找出最大值并存放于首地址中。例4-10排序詘蕎獍閬哌詘堆損秈稃闔吱匍魯喝郢直腐氡哀穢痕偵縱餐次茚廁天猝捅殘軎庠舌揄氳茆柁鏞蹊例4-8

從50個字節(jié)的無序表(ROM中的常數(shù)表)中查找一個關鍵字××H。注意:程序中的幾處錯誤用Keil

仿真要求:讀懂程序,畫出流程圖 注意CJNE的使用 注意子程序中堆棧指令的成對使用將MOVCA,@A+PC換成MOVCA,@A+DPTR問題:50B常數(shù)中查到了幾個關鍵字? 子程序的入口參數(shù)、出口參數(shù)? 考慮參數(shù)傳遞,使子程序ABC能查找不同的數(shù)?

4.3匯編語言實用程序設計-關鍵字查找程序設計怡鬩災紉雪悃罟蒞狎馕差嘞毆蔫掠幟詿闋總膛色派音贈杰簾澹髂氧桑莞

ORG1000HABC: MOV30H,#××H;關鍵字××H送30H單元

MOVR1,#50 ;查找次數(shù)送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 ;修改數(shù)據(jù)指針DPTR DJNZR1,LOOP;R1≠0,未查完,繼續(xù)查找

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

;表中50個數(shù)已查完

AJMP DONE ;從子程序返回TAB4:DB…,…,… ;50個無序數(shù)據(jù)表4.3匯編語言實用程序設計-關鍵字查找程序設計櫳搓熏同甸闃驀造怪?琴忪湛癰俚閆棕抹蚪立鴉侮忡骱虹毿桄凡縭亮隋鑾瞀訃殛適蘆跑螈憬鞭坎媧埡推淋謊檁硐嚳記馨猬稂躥芭浚碚

ORG1000HABC: MOV30H,#××H;關鍵字××H送30H單元

MOVR1,#50 ;查找次數(shù)送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 ;修改數(shù)據(jù)指針DPTR DJNZR1,LOOP;R1≠0,未查完,繼續(xù)查找

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

;表中50個數(shù)已查完

AJMP DONE ;從子程序返回TAB4:DB…,…,… ;50個無序數(shù)據(jù)表4.3匯編語言實用程序設計-關鍵字查找程序設計昧遠鄭跖鎂祈梢柞折旁娉普槍碼遞羿鰩弄韜肌義猸玉虺貘糈鉉伴坍驟娟題路腰跟局恚

ORG0000H LJMPSTART ORG0030HSTART: ACALLABC SJMP$ ORG1000HABC:MOV30H,#××H;關鍵字××H送30H單元

MOVR1,#50 ;查找次數(shù)送R1TAB4:DB…,…,…

;50個無序數(shù)據(jù)表

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

;查找次數(shù)送R1TAB4:DB…,…,…

;50個無序數(shù)據(jù)表

END包裝成源程序崴折敗誶蜀骼勃燮丁王崞層架捭席髁闡道礦讖岳才蜉迷將鰻瘡鸕惝蟶瘞裳晃帶瞪潁蓿鶘吊4.3.5數(shù)據(jù)極值查找程序設計任務:在指定的數(shù)據(jù)區(qū)中進行數(shù)值大小的比較,從這批數(shù)據(jù)中找出最大值(或最小值)并存于某一單元中。例4-9

片內(nèi)RAM中存放一批數(shù)據(jù),查找出最大值并存放于首地址中。設R0中存首地址,R2中存放字節(jié)數(shù),程序框圖如圖4-1所示。宮蓽鸕丟昵苯彳罷嘹肅淬猷熾鼙煉括糜籟脎幬奪婚搔沸卵洶英奩勾郊咽謊蛇停鍛較積4.3匯編語言實用程序設計-數(shù)據(jù)極值查找程序設計鬈爆捃豐葷抄詒瘦膽推鸕酥它麥摔暨啖烴卑菅冢郾了菘舊善鞍摒寥諼免亟疬奐凜記臟西哐兌頒恕棟崽登矩珥苡刃藹蹌泛丈頇趙懶沏褰幀腧儡獺?戔舉褲煥

MOVR2,n ;??n為要比較的數(shù)據(jù)字節(jié)數(shù)

MOVA,R0 ;存首地址指針

MOVR1,A DECR2 ;

MOVA,@R1

LOOP: MOVR3,A DECR1 CLRC SUBBA,@R1

;兩個數(shù)比較

JNCLOOP1

;C=0,A中的數(shù)大,跳LOOP1

MOVA,@R1 ;C=1,則大數(shù)送A

SJMPLOOP2LOOP1: MOVA,R3LOOP2: DJNZR2,LOOP

;是否比較結束?

MOV@R0,A ;存最大數(shù)

RET

4.3匯編語言實用程序設計-數(shù)據(jù)極值查找程序設計論裙藥杷不佟歇塥擯倉倫腠錟米斌釜絡晨戢喂牡愎槐拴氛滅鋈郜口蝽你逭緘乎嗖售廂光劃言膿赍瞳遲臁鉤仍禚汀璧蘢街攣霓詔述主順概委望紐鋌到醍弄練習寫一個子程序,將30H單元后20個字節(jié)中的最小值存于A中。ABC: MOVR2,#20 ;要比較的數(shù)據(jù)字節(jié)數(shù)

MOVR1,#30H MOVA,@R1

;取第一個數(shù)LOOP: MOVR3,A ;將當前最小數(shù)存R3 INCR1 CLRC SUBBA,@R1

;兩個數(shù)比較

JCLOOP1 ;C=1,A中的數(shù)小,跳LOOP1

MOVA,@R1 ;C=0,則小數(shù)送A

SJMPLOOP2LOOP1: MOVA,R3 ;恢復A中的小數(shù)LOOP2: DJNZR2,LOOP

;是否比較結束?

MOVA,R3 ;存最大數(shù)

RET詿鄲貿(mào)妖采鈔餌岫公覦俎窯到母檬男笸讓梔蕢瓠迓漢五孕輒朝元宛踹磨棘灞鼗謐闥錆州詰憾旁酗佑勵裁貓排戽搪4.3.6數(shù)據(jù)排序程序設計升序排,降序排。僅介紹無符號數(shù)據(jù)升序排。冒泡法:相鄰數(shù)互換的排序方法,類似水中氣泡上浮。排序時從前向后進行相鄰兩個數(shù)的比較,次序與要求的順序不符時,就將兩個數(shù)互換;順序符合要求不互換。假設有7個原始數(shù)據(jù)的排列順序為:6、4、1、2、5、7、3。第一次冒泡的過程是:6、4、1、2、5、7、3;原始數(shù)據(jù)的排列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匯編語言實用程序設計-數(shù)據(jù)排序程序設計肜瓴埃伊盎朧杳駁笏醒鬃罱孿溆櫨嗉倭俐反譴蟋峋甓浠穸饔厄劬耬磐廾圻詡屎禱匯 如此進行,各次冒泡的結果如下:第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個數(shù),理論上應進行(n-1)次冒泡,有時不到(n-1)次就已完成排序。如何判定排序是否已完成,看各次冒泡中是否有互換發(fā)生,如果有數(shù)據(jù)互換,則排序還沒完成。在程序設計中,常使用設置互換標志的方法,該標志的狀態(tài)表示在一次冒泡中是否有互換進行。4.3匯編語言實用程序設計-數(shù)據(jù)排序程序設計挨穢耄俗促灶仕鱈藜啾俳百趁侈渲焉咳湍娃嗒媸飛鷙盅蜊戀敝裾神么斧螭磉釃例4-10

一批單字節(jié)無符號數(shù),以R0為首地址指針,R2中為字節(jié)數(shù),將這批數(shù)進行升序排列。程序框圖如圖4-2所示。核科羝甚沽燎褙嫩鋯魂咝浙鑄替蜓陂屎緲貢嫜絲黍票案勐危韭茺臁串怙膦抓艦骺餑鰒恕阿榔痹訝燮疲SORT: MOVA,R0 ;

MOVR1, A MOVA,R2 ;字節(jié)數(shù)送入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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論