版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第四章第四章 匯編語言程序設計匯編語言程序設計 4-1 匯編語言程序設計基礎匯編語言程序設計基礎 4-2 偽指令偽指令 4-3 典型應用程序設計舉例典型應用程序設計舉例 4-1 匯編語言程序設計基礎匯編語言程序設計基礎 返回返回一、匯編語言程序設計步驟 用匯編語言編程時,編程者可以直接操作到機器內部的寄存器及存儲單元,能把處理過程刻畫得非常具體。因而通過優(yōu)化能編制出高效率的程序,既可節(jié)省存儲空間又可提高程序執(zhí)行的速度。因此,在實時控制的場合下通常采用匯編語言進行程序設計。微型機的監(jiān)控程序多采用匯編語言編寫。對于單片機應用系統(tǒng),通常都用匯編語言編寫程序。用匯編語言編制程序的過程,稱為匯編語言程
2、序設計。 通常,匯編語言程序設計的步驟如下:1、 建立數(shù)學模型建立數(shù)學模型就是根據(jù)設計任務或將控制對象的物理過程歸納、抽象為數(shù)學表達式。2、 選擇適當?shù)乃惴?一個數(shù)學表達式,往往可用不同的算法實現(xiàn),此時應結合所用的機器的指令系統(tǒng),對不同的算法進行分析比較,選擇一種最佳算法(即實現(xiàn)此算法的程序所占內存少且執(zhí)行速度快,但是兩者往往是相互矛盾的,應根據(jù)具體情況進行選擇)。3、 程序結構的設計程序結構設計是把所采用的算法轉化為匯編語言程序的準備階段。如果課題較小且算法簡單,這一步驟可以省掉,直接編寫程序,如果是大型課題,由于情況復雜,所以需要進行程序結構設計。它可以分模塊化程序設計、結構程序設計及自頂
3、向下設計等。4、 編制匯編語言程序的調試根據(jù)確定的算法及所選用的程序結構就可以繪制流程圖(如算法簡單,這一步驟可省略),根據(jù)流程圖并結合所選用的指令系統(tǒng)就可寫出相應的匯編語言源程序。5、 匯編語言程序的調試 當一個匯編語言程序編好后必須進行調試,因為所編制的程序難免有錯誤并且程序需要優(yōu)化。 整個匯編程序設計的流程見圖4-1:圖4-1 匯編語言程序設計流程圖 二、編制程序流程圖1、程序流程圖的作用 由于流程圖采用圖解表示法,因此它能直觀形象地表示各部分的邏輯關系及程序結構,利用流程圖能方便地發(fā)現(xiàn)和分析程序算法存在的錯誤。另外,它便于掌握和進行交流。所以,它是程序設計的重要工具。2、程序流程圖的組
4、成程序流程圖是用幾何圖形(方框和圓框),流線及文字說明來描述計算過程的框圖。它不但能形象地描述程序執(zhí)行的過程而且清楚地表達程序結構的內在聯(lián)系。流程中所采用的各種常用符號如下:1)端點框如圖4-2(1)所示,表示程序的開始或結束。2)流程線 如圖4-2(2)所示,表示程序執(zhí)行的流向。3)處理框如圖4-2(3)所示,表示一種處理功能或過程。4)判斷框如圖4-2(4)所示,用于批示一個判定點,從這點開如產生分支。5)連接框如圖4-2(5)所示,表示流程中止而并非流程結束。通常用于連接同一而的流程。以避免流程線的交叉;也可用于連接不同頁上的流程,注意連接處的連接框的標識符要相同。6)子程序框如圖4-2
5、(6)所示,表示調用子程序。在該框內填入相應的子程序名稱或入口地址。 4-2 4-2 偽指令及匯編偽指令及匯編 返回返回一、偽指令 “偽指令”是用于告訴匯編程序(匯編程序是一種翻譯程序,將用匯編語言寫的程序翻譯成機器程序語言程序)如何進行匯編的指令,它既不控制機器的操作也不能被匯編成機器代碼(匯編語言的指令和機器語言的指令有一一對應的關系),只能被匯編程序所識別并指導如何進行,故稱為“偽指令”。mcs-51系列單片機的常用偽指令如下:1、起始地址偽指令org(origin) 格式: 標號: org 16位地址 功能:用于規(guī)定目標程序段或數(shù)據(jù)塊的起始地址。2 2、匯編結束偽指令end 格式:標號
6、: end 功能:end是匯編語言源程序的匯編結束標志,在它后面所寫的指令均不處理。在一個程序中只能出見一條end語句,而且必須安排在源程序的末尾。 3 3、賦值偽指令equ 格式:字符名稱 equ 數(shù)或匯編符號 功能:將一個數(shù)或特定的匯編符號賦予規(guī)定的字符名稱。先定義后使用。 4、定義字節(jié)偽指令db 格式:標號: db 8位(二進制)數(shù)據(jù)表 功能:定義程序存儲器從標號開始的連續(xù)單元,用來存放常數(shù)、字符和表格。 5 5、定義字偽指令dw 格式:標號: dw 16位(二進制)數(shù)據(jù)表 功能:同db,不同的是為16位數(shù)據(jù)。 由于一個字長為16位,故要占據(jù)兩個存儲單。在mcs-51單片機系統(tǒng)中,16位
7、數(shù)據(jù)的高8位存入低地址單元,低8位存入高地址單元。 6、數(shù)據(jù)地址賦值偽指令data 格式:字符名稱 data 表達式 功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的字符名稱 data偽指令的功能和equ偽指令,但data偽指令所定義的符號可先使用后定義,在程序它常用來定義數(shù)據(jù)地址。該語句一般放在程序的開頭或末尾。7、定義空間偽指令ds 格式:ds 表達式 功能:從指定的地址單元開始,保留由表達式指定的若干字節(jié)空間作為備用空間。 注意:對于mcs-51系列單片機,db、dw、ds偽指令只能用于程序存儲器而不能用于數(shù)據(jù)存儲器。8、位地址賦值偽指令bit 格式:字符名稱 bit 位地址 功能:把位地址賦予規(guī)定
8、的字符名稱,常用于位處理的程序中。 二、匯編程序的匯編過程 用匯編語言編寫的源程序必須通過匯編程序的匯編才能將源程序轉換成相應的目標程序。 大多數(shù)微型機的匯編程序是兩次掃描匯編程序。在匯編程序中要借助于一些表格才能實現(xiàn)匯編。這些表格是設置在匯編程序中。在匯編時對它們進行檢索和查詢。第一次掃描是檢查語法錯誤并確定符號名字,在掃描過程中建立該源程序使用的全部符號名字。在符號表中,每一個符號名字后面跟著一個對應的值(或為存儲單元地址或為數(shù))。第二次掃描是在第一次掃描所得到符號名字表的基礎上將符號地址轉換在真地址(稱為代真);種用操作碼表將助記符轉換成相應的目標操作碼。 簡單的計算機系統(tǒng)中,常常不配備
9、匯編程序,為了運行匯編語言程序可進行人工匯編。由程序員根據(jù)指令表一條一條地將匯編語言程序的語句翻譯成機器代碼指令,最后得到可運行的目標程序。在人工匯編時同樣采用兩次匯編方法:第一次匯編確定各條指令(第一字節(jié))的地址并翻譯出各條指令的機器碼,對于程序中出現(xiàn)的各種標號暫不處理,仍用原來的符號,而對其中有明確定義者,則用其定義值來代替;第二次匯編進行標號的“代真”,即求出標號所代表的具體地址或者地址偏移量,經(jīng)過兩次匯編可將源程序轉換成相應的目標程序。 4-3 4-3 典型應用程序的設計典型應用程序的設計 返回返回 匯編語言是面向機器的語言,匯編語言程序設計與所用的機器、機器所采用的微處理器的內部結構
10、都有密切的關系,單片機的匯編語言程序設計也是如此,必須充分了解所使用機器的“硬件環(huán)境”,才能著手進行匯編語言程序設計。特別是編制i/0接口程序時還需了解接口電路、機器及外設的外特性例如:輸入、輸出信號、負載能力等。另外,對于同一個問題往往編制出不同的程序,那么如何判斷一程序的優(yōu)劣呢?通常從三個方面來衡量: 其一、該程序所占用的存儲空間,以少為好; 其二、程序運行的時間,以短為好; 其三、程序的編制、調試及排錯所需時間,以短為好。 除此以外,還要求程序清晰易讀以及易于移植等。 為了設計一個高質量的程序,必須掌握程序設計的一般方法。在匯編語言程序設計中,普通采用結構化程序設計方法。這種設計方法只有
11、一個入口和出口(見圖4-3),整個程序也只有一個入口和出口。結構程序設計的特點是程序的結構清晰,易于讀寫,易于驗證,可靠性高,一面主要介紹結構化程序設計中的三種基本的程序設計方法。一、簡單程序的設計 例例4-14-1 已知兩個壓縮bcd碼分別放在內部ram的31h30h和33h 32h等4個單元中,試編程求和,結果存入r4r3r2中。 分析:流程如右圖所示:程序如下:org 0000hljmp mainorg 0040h main:mova,30hadda,32hdaamovr2,amova,31haddca,33hda a movr3,aclramovacc.0,cmovr4,a here:
12、sjmphereend例例4-24-2 利用查表指令將內部ram中20h單元的壓縮bcd碼拆開,轉換成相應的ascii碼,存入21h、22h中,高位存在22h。分析:控制流程圖(略),程序如下:start:mov dptr,#tablemova,20hanla,#0fhmovca,a+dptrmov21h,amova,20hanla,#0f0hswapamovca,a+dptrmov22h,asjmp table:db 30h,31h,32h,33h,34h db 35h,36h,37h,38h,39h 二 、分支程序設計分支程序設計1、單分支程序單分支結構程序使用轉移指令實現(xiàn),即根據(jù)條件對程
13、序的執(zhí)行進行判斷,滿足條件是轉移執(zhí)行,否則按順序執(zhí)行。 在mcs-51指令系統(tǒng)中條件轉移指令有:(1)判a轉移指令jz、jnz;(2)判位轉移指令jb、jnb、jbc、jc、jnc;(3)比較轉移指令cjne;(4)減1不為0轉移指令djnz;例例4-34-3 假定在外部ram中有st1、st2和st3共3個連續(xù)單元,其中st1、st2單元中分別存放著兩個8位無符號數(shù),要求找出其中的大數(shù)并存入st3單元。 分析:兩個無符號數(shù)的大小比較可利用兩數(shù)相減是否有借位來判斷,流程圖和程序如下所示: start:clrclmov dptr,#st1lmovx a,dptrlmov r7,alinc dpt
14、rlmovx a,dptrlsubba,r7ljc big1lmovx a,dptrlsjmpbig2l big1: xch a,r7l big2: inc dptrlmovx dptr,alsjmp ll2、多分支程序(1)嵌套分支結構例4-4 設變量x存放于30h單元,函數(shù)值y存放31h單元。試按照式: 1 x0y= 0 x=0 的要求給y賦值-1x0分析:x是有符號數(shù),判斷符號位是0還是1可利用jb或jnb指令。判斷x是否等于0則直接可以使用累加器a的判0指令。流程、程序如下頁: start:mov a,30hjzoverjnbacc.7,lab1mova,#0ffhsjmp overl
15、ab1: mova,#1over: mov31h,a sjmp (2)多重分支結構 利用mcs-51單片機的散轉指令jmp a+dptr,可方便地實現(xiàn)多重分支控制,因此,又稱為散轉程序。假定多路分支的最大序號為n,則分支的結構如圖所示。 例例4-54-5 根據(jù)條件0、1、2 、n,分別轉向處理程序prg0、 prg1、prgn,條件k設在r2中。start:mov dprt,#table mov a,r2add a,r2 jnc next inc dphnext: jmpa+dptrtable:ajmp prg0 ajmp prgn prg0: prgn: 三、循環(huán)程序設計 1、循環(huán)程序的結構
16、 循環(huán)程序包括以下四個部分: 置循環(huán)初值 循環(huán)體 循環(huán)控制變量修改 循環(huán)終止控制 常用于循環(huán)控制的指令有: djnz、cjne、jc、jnc 等控制類指令。 2、單循環(huán) 終止循環(huán)控制采用計數(shù)的方法,即用一個寄存器作為循環(huán)次數(shù)計數(shù)器,每次循環(huán)后計數(shù)加1或減1,達到終止值后退出循環(huán)。 例例4-64-6 計算50個8位二進制數(shù)(單字節(jié))之和。 要求:50個數(shù)存放在30h開頭的內部ram中,和放在r6r7中。 分析:采用djnz循環(huán)體的流程框圖如下頁所示,在參考程序中,r0為數(shù)據(jù)地址指針,r2為減法循環(huán)計數(shù)器。 在使用djnz控制時,循環(huán)計數(shù)器初值不能為0,當為0時,第一次進入循環(huán)執(zhí)行到djnz時,減
17、1使r2變?yōu)閒fh,循環(huán)次數(shù)成了256,顯然不合題意。start: mov r6, #0 mov r7, #0 mov r2, #50 mov r0, #30h loop:mov a, r7add a, r0mov r7, a clr a addc a,r6 mov r6, a inc r0 djnz r2, loop sjmp $其流程圖如右圖所示。3、多重循環(huán) 如果在一個循環(huán)程序中嵌套了其他的循環(huán)程序,稱為多重循環(huán)程序。在用軟件實現(xiàn)延時時顯得特別有用。例例4-74-7 設計1秒延時子程序,假設fosc=12mhz。 分析:軟件延時與指令的執(zhí)行時間關系密切,在使用12mhz晶振時,一個機器周
18、期的時間為1us,執(zhí)行一條djnz指令的時間為2us,我們可以采用三重循環(huán)的方法寫出延時1秒的子程序流程、程序如下所示: delay:movr7,#10;dl3:mov r6,#200;dl2:movr5,#250;dl1:djnzr5,dl1; djnzr6,dl2;djnzr7,dl3;ret 其程序流程圖如圖所示:4、按條件轉移控制的循環(huán)例例4-84-8 把內部ram中從st1地址開始存放的數(shù)據(jù)傳送到以st2開始的存儲區(qū)中,數(shù)據(jù)塊長度未知,但已知數(shù)據(jù)塊的最后一個字節(jié)內容為00h,而其它字節(jié)均不為0。并設源地址與目的地址空間不重復。 分析:顯然,我們可以利用判斷每次傳送的內容是否為 0 這
19、一條件來控制循環(huán)。也可用cjne來比較與0是否相等設計。利用判a轉移控制的循環(huán)流程圖如下圖所示其程序為:start:movr0,#st1 mov r1,#st2loop: mov a,r0 jz ent mov r1,a inc r0 inc r1 sjmp loopent: ret 四、查表程序設計用于查表的指令有兩條:movc a,apc;movc a,adptr;當使用dptr作為基址寄存器時查表比較簡單,查表的步驟分三步 1)基址(表格首地址)送dptr數(shù)據(jù)指針; 2)變址值(在表中的位置是第幾項)送累加器a; 3)執(zhí)行查表指令movc a,adptr,進行讀數(shù),查表結果送回累加器a。
20、 當使用pc作為基址寄存器時,由于pc本身是一個程序計數(shù)器,與指令的存放地址有關,查表時其操作有所不同。查表的步驟也分三步: 1)變址值(在表中的位置是第幾項)送累加器a; 2)偏移量(查表指令的下一條指令的首地址到表 格首地址之間的字節(jié)數(shù))+ a a;(修正) 3)執(zhí)行查表指令movc a,apc。 例例4-94-9 二位十六進制數(shù)與ascii碼的轉換程序。設數(shù)值在r2中,結果低位存在r2中,高位存在r3中。 分析:對于2位16進制數(shù)必須進行2次查表,因此,取數(shù)后通過屏蔽的方法來實現(xiàn)高低位分開。1、利用dptr作基址的參考程序如下 hexasc: mov dptr,#table mov a,
21、r2 anl a,#0fh movc a,a+dptr;查表 xch r2, a anl a, #0f0h swap a movc a,a+dptr;查表 mov r3,a ret table: db 30h,31h,32h,33h,34h;ascii表 db 35h,36h,37h,38h,39h db 41h,42h,43h,44h,45h,46h2、利用pc作基址的參考程序如下:hexasc: mov a,r2 anl a,#0fh adda,#9 movc a,a+pc ;查表 xch r2, a anl a, #0f0h swap a adda,#2 movc a,a+pc ;查表 mov r3,a ret table: db “0”,“1”,“f” ;ascii表例4-10 利用查表指令,根據(jù)r2的分支序號找到對應的轉向入口地址送dptr,清acc后,執(zhí)行散轉指令jmp a+dptr,轉向對應的分支處理,假定分支處理程序在rom 64kb的范圍內分布。 程序如下:org 1000h start:mov dptr, #tab mova,r2adda,r2 jncst1incdphst1:movr3,a movc a,a+dptr;查表xcha,r3inca movc a,a+dptr movdpl,amovdp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《常見病食療》課件
- 七年級道德與法治上冊第四單元生命的思考第九課珍視生命第2課時增強生命的韌性教案新人教版
- 初中音樂教學課件走進京劇
- 三年級數(shù)學下冊專項復習統(tǒng)計與可能性第一組統(tǒng)計新人教版
- 三年級科學上冊第三單元生命之源-水2觀察水教案蘇教版
- 小學生贊美別人課件
- 2021一建考試《建設工程項目管理》題庫試卷考前押題考點題庫合集及答案解析五
- 三月份安全教育課件
- 暑假小學生視頻課件下載
- 開學安全第一課課件
- 閘閥的操作力矩參考表
- 浙江省市政工程安全臺賬完整
- 環(huán)氧樹脂參考配方大全
- 花木綠化養(yǎng)護考核評分表
- #2鍋爐爐膛內腳手架搭設及拆除施工方案
- 110KV變電站工程創(chuàng)優(yōu)監(jiān)理實施細則
- 個人信用報告異議申請表
- 檢驗批劃分大全16頁
- 教材中醫(yī)方劑學
- 2022年2022年電子信息系統(tǒng)機房設計規(guī)范
- 下鼻甲生理、解剖、血供
評論
0/150
提交評論