




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、4 匯編語言程序設計什么是程序設計?程序設計=結構+算法。程序設計就像蓋房子,數據結構就像磚、瓦,而算法就是設計圖紙。你若想蓋房子首先必須有原料(數據結構),但是這些原料不能自動地蓋起了你想要的房子;你必須按照設計圖紙(算法)上的說明一磚一瓦地去砌。這樣你才能擁有你想要的房子。程序設計也一樣,程序設計時你得按照程序規定的功能去編寫,而程序的功能是實現就是算法的具體體現。所以通俗地說:你必須按照特定的規則,把特定的功能語句和基本結構按照特定的順序排列起來,形成一個有特定功能的程序,這就是:程序設計=結構+算法。一般說來,計算機程序設計語言種類很多,不僅有機器語言和匯編語言,還有很多高級語言。對單
2、片機而言,通常使用匯編語言或C語言進行程序設計,程序較大時一般采用C語言編寫,但用匯編語言編寫的程序執行的效率較高。程序設計完成后,然后利用計算機或人工方法將匯編語言或C語言程序轉化為單片機可以執行的機器語言。轉換前的匯編語言或C語言程序被稱為源程序,轉換后的機器語言程序被稱為目標程序,轉換過程也叫匯編過程,通過計算機或人工轉換的方法又被稱為計算機匯編或手工匯編。計算機匯編要使用專門的軟件,叫匯編軟件。項目項目4 4 匯編語言程序設計匯編語言程序設計4.1 源程序的編制源程序的編制 4.1.1程序設計步驟程序設計步驟 在對單片機系統進行程序設計時,必須考慮硬件資源的配置,當硬件系統設計完成后,
3、可以按照以下步驟進行程序設計。 1.預完成任務的分析 2.進行算法的優化 3.繪制程序流程圖 4.分配資源 5.編寫源程序 6.程序優化 7.編譯,調試,修改和最后確定源程序項目項目4 4 匯編語言程序設計匯編語言程序設計用圖形符號將總體設計思路及程序流向繪制在平面圖上。從而使程序的結構關系直觀明了,便于檢查和修改,它直觀清晰的體現了程序的設計思路,是程序設計的依據。繪制流程圖時,首先畫出簡單的功能流程圖粗框圖,再對功能流程圖進行擴充和具體化,即對存儲器標志位等單元做具體的分配和說明,把功能圖上的每一個粗框圖轉化為具體的存儲器或地址單元,從而繪制出詳細的程序流程圖。流線程序執行順序流向線表示處
4、理功能端點符號程序的開始和結束符號表示判斷功能判斷符號處理符號連接符號用來實現流程圖之間的連接程序流程圖的繪制程序流程圖的繪制項目項目4 4 匯編語言程序設計匯編語言程序設計4.1.2 4.1.2 匯編語言源程序的格式匯編語言源程序的格式匯編語言源程序是由若干語句組成的,每一語句可由4個部分組成:標號、操作碼、操作數及注釋。每一部分間以不同的分隔符分隔,語句格式如下: 標號標號 : 操作碼操作碼 目的操作數目的操作數 源操作數源操作數 ; 注釋注釋 其中 項為可選項,視具體的指令選用.標號是表示該語句所在地址的標志符號,使用標號可方便程序中的其他語句訪問該語句。標號由字母打頭的1-8個字母數字
5、串組成,但指令保留符、寄存器名、位址記憶符、偽指令符等都不能作標號使用。 操作碼表示操作的性質,它是匯編指令中唯一不能缺省的部分。操作數表示操作的對象,在一條語句中,操作數可能是空白或以逗號分開的幾個。 注釋是對語句或程序段功能的解釋說明有助于的閱讀和維護。項目項目4 4 匯編語言程序設計匯編語言程序設計4.1.3 4.1.3 匯編語言源程序的匯編匯編語言源程序的匯編將匯編語言源程序“翻譯”成機器語言目標程序的過程稱為匯編,對單片機助記符的匯編有兩種方法:人工匯編和機器匯編。 人工匯編是用人工查表將源程序譯成機器碼。一般分為兩步進行。第一步將源程序中的指令逐條譯成目標碼,指令中的標號地址待求。
6、第二步由偽指令求出標號所代表的具體地址,進行有關程序存儲區的數據操作并進行偏移量的計算。機器匯編是將源程序輸入計算機后,由匯編程序實現翻譯工作,產生相應的機器碼。這是一種非常高效和方便的方法。項目項目4 4 匯編語言程序設計匯編語言程序設計4.1.44.1.4偽指令偽指令在機器匯編時,對匯編過程進行控制和指導的指令稱為偽指令。在匯編過程中,偽指令供匯編程序識別和執行但不產生可執行的目標代碼。如規定匯編生成的目標代碼在ROM中的存放區域,給源程序符號、標號賦值,指示匯編結束等。 每種匯編程序都有自己的偽指令,標準的MCS-51定義的偽指令常用的有以下7條。1.匯編其始地址偽指令ORG(Origi
7、n)格式: ORG 16位地址功能: 規定該指令后的下一段源程序經匯編后生成的代碼存放的起始地址。例如: ORG 0500HSTART:MOV A,R0 END ORG偽指令總是出現在每段源程序或數據塊的開始,匯編語言源程序中多處使用ORG指令,可使程序員把子程序、數據塊存放在ROM的任何位置。每當ORG出現時,下條指令的存放地址由此重新定位,所以ORG定義地址的順序應有小到大,且不能重疊。項目項目4 4 匯編語言程序設計匯編語言程序設計2.匯編結束偽指令END(End of Assembly) 指令格式:標號:END 功能: 結束匯編語言源程序的操作。 在源程序中只能有一條END,END后所
8、寫的指令,匯編程序不予處理。項目項目4 4 匯編語言程序設計匯編語言程序設計3.符號賦值偽指令EQU(EQUate) 指令格式:字符名稱 EQU 數或匯編符號 功能:將一個數或特定的匯編符號賦給指定的字符名稱。 字符名稱為一自定的符號,而不是標號,字符名稱后無“:”。字符名稱可用來作數據地址,立即數,位地址或者是一代碼地址,其值可以是一個8位數,也可以是16位數。例如:TEST EQU 20HMOV A,TEST這里字符名稱TEST就代表了內部RAM 20H地址單元。又例如:A1 EQU 10HMOV A,A1 這里A1代表片內RAM的直接地址單元10H。使用EQU偽指令可以把抽象的數字地址表
9、示成有一定意義的符號,增強程序的可讀性。項目項目4 4 匯編語言程序設計匯編語言程序設計4.4.定義數據字節偽指令定義數據字節偽指令DB(Define Byte)DB(Define Byte)格式:標號: DB 項或項表項或項表是指一個字節,逗號隔開的8位二進制的數或字符串,或撇號括起來的ASCII字符串。功能:從標號指定的地址單元開始,在程序存儲器中存入一組8位二進制數,或者將一個數據表格存入程序存儲器。這條偽指令匯編后影響程序存儲器的內容。例如: ORG 1100H TAB: DB 01H,04H,09H,10H DB 00001111B,1,A,BC項目項目4 4 匯編語言程序設計匯編語
10、言程序設計5.5.定義數據字命令定義數據字命令DW(Define Word)DW(Define Word)格式:標號: DW 項或項表功能:DW的功能和DB類似,DW是從標號指定的地址開始存放16位而非8位二進制數,存放時,數據字的高8位在前(低地址),低8位在后(高地址)。例如: ORG 5000H MOV A ,#30H ORG 5020HADDTAB:DW 1234H ,100H,10 ; END 一條DB和DW語句定義的數表其數的個數不得超過80個。當數據的數目較多時,可使用多個定義命令。在MCS51程序設計應用中,常以DW來定義地址。項目項目4 4 匯編語言程序設計匯編語言程序設計6
11、.6.預留存儲區偽指令預留存儲區偽指令DS(Define Storage)DS(Define Storage)格式:標號: DS 表達式功能:本命令用于從指定地址開始,保留DS之后表達式的值所需數目的字節單元作為存儲區以備后用。匯編時,對這些單元不賦值。例如: ORG 0100HMOV A ,#50HADDRTABL:DS 05HDB 20HEND從標號ADDRTABL代表的地址開始,保留5個連續的ROM地址單元,第6個單元存放20H。對對MCSMCS5151單片機來說,單片機來說,DBDB,DWDW,DSDS偽指令只能對程序存儲器使偽指令只能對程序存儲器使用,而不能對數據存儲器進行初始化。用
12、,而不能對數據存儲器進行初始化。項目項目4 4 匯編語言程序設計匯編語言程序設計7.位地址賦值偽指令BIT格式:字符名稱 BIT 位地址功能:本命令用于給字符名稱賦以位地址。其中位地址可以是絕對地址,也可以是符號地址(即位符號名稱)。例如: AQ BIT P1.0 A2 BIT 07H這兩條指令分別把P1.0的位地址賦給變量AQ,位地址07H賦給符號名A2,在其后的編程中AQ和A2就可以作為位地址使用。項目項目4 4 匯編語言程序設計匯編語言程序設計4.1.54.1.5程序設計技巧程序設計技巧1.模塊化程序設計方法單片機應用系統的程序一般由包含多個模塊的主程序和各種子程序組成。每一程序模塊都要
13、完成一個明確的任務,實現某個具體的功能,如發送、接收、延時、打印、顯示等。采用模塊化的程序設計方法,就是將這些不同的具體功能程序進行獨立的設計和分別調試,最后將這些模塊程序裝配成整體程序并進行聯調。項目項目4 4 匯編語言程序設計匯編語言程序設計把一個多功能的、復雜的程序劃分為若干個簡單的、功能單一的程序模塊的程序設計方法具有明顯的優點:1)單個模塊結構的程序功能單一,易于設計、編寫、調試及修改;2)有利于程序的優化和分工,從而可使多個程序員同時進行程序的編寫和調試,加快軟件研制進度;3)提高了程序的閱讀性和可靠性,使程序的結構層次一目了然,同時4)對程序的修改可局部進行,其他部分可以保持不變
14、,便于功能擴充和版本升級;5)對于使用頻繁的子程序可以建立子程序庫,便于多個模塊調用。項目項目4 4 匯編語言程序設計匯編語言程序設計模塊的劃分有很大的靈活性,但也不能隨意劃分。劃分時應遵循下述原則:1)每個模塊應具有獨立的功能,能產生一個明確的結果,這就是單模塊的功能高內聚性。2)模塊之間的控制耦合應盡量簡單,數據耦合應盡量少,這就是模塊間的低耦合性。控制耦合是指模塊進入和退出的條件及方式,數據耦合是指模塊間的信息交換(傳遞)方式、交換量的多少及交換的頻繁程度。3)模塊長度適中。模塊語句的長度通常在20條100條的范圍較合適。模塊太長時,分析和調試比較困難,失去了模塊化程序結構的優越性;過短
15、則模塊的連接太復雜,信息交換太頻繁,因而也不合適。項目項目4 4 匯編語言程序設計匯編語言程序設計2.程序設計技巧1)盡量采用循環結構和子程序。 2)盡量少用無條件轉移指令。 3)對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數的寄存器外,子程序中用到的其他寄存器的內容應壓入堆棧(返回前再彈出) 進行現場保護,并要特別注意堆棧操作的壓入和彈出的平衡。一般不必把標志寄存器壓入堆棧。4)對于中斷處理子程序除了要保護程序中用到的寄存器外,還應保護標志寄存器。 5)累加器是信息傳遞的樞紐。 項目項目4 4 匯編語言程序設計匯編語言程序設計4.2 程序結構程序結構4.2.1 4.2.1 順序
16、程序順序程序順序結構是按照邏輯操作順序,從某一條指令開始逐條順序執行,直至某一條指令為止,無分支,也無循環。順序結構是所有程序設計中最基本、最單純的程序結構形式,在程序設計中使用最多,因而是一種最簡單且應用最普遍的程序結構。一般實際應用程序遠比順序結構復雜得多,但它是組成復雜程序的基礎和主干。項目項目4 4 匯編語言程序設計匯編語言程序設計【例4.1】將兩個半字節數合并成一個一字節數。設內部RAM40H、41H單元中分別存放著8位二進制數。要求取出兩個單元的低半字節,合并成一個字節后,存入42H單元。開始(40H)內容送A,屏蔽高位A與R1或后送入(42H)交換高低位,送入R1(41H)內容送
17、A,屏蔽高位返回圖4-1 例1程序流程圖項目項目4 4 匯編語言程序設計匯編語言程序設計【例4.2】用順序結構程序編寫三字節無符號數的加法程序。設被加數存放在: 40H(高字節),41H(中字節),42H(低字節) 加數存放在: 43H(高字節),44H(中字節),45H(低字節) 運算結果仍存在被加數單元中。開始取低字節數據返回相加后送回被加數單元取中字節數據帶進位位相加后送回被加數單元取高字節數據帶進位位相加后送回被加數單元圖4-2 例2程序流程圖項目項目4 4 匯編語言程序設計匯編語言程序設計4.2.2 4.2.2 分支程序分支程序通常,單純的順序結構程序只能解決一些簡單的算術、邏輯運算
18、,或者簡單的查表、傳送操作等。實際問題一般都是比較復雜的,總是伴隨有邏輯判斷或條件選擇,要求計算機能根據給定的條件進行判斷,選擇不同的處理路徑,從而表現出某種智能。根據程序要求改變程序執行順序,即程序的流向有兩個或兩個以上的出口,根據指定的條件選擇程序流向的程序結構我們稱為分支程序結構。通常根據分支程序中出口的個數分為單分支結構程序(兩個出口)和多分支結構程序(三個或三個以上出口)。在MCS-51指令系統中,通過條件判斷實現單分支程序轉移的指令有JZ、JNZ、CJNE和DJNZ等。此外,還有以位狀態為條件,進行程序分支的指令JC、JNC、JB、JNB和JBC等。使用這些指令,可以完成或為0、1
19、,或為正、為負,以及相等、不相等各種條件判斷,以實現程序有條件地轉移。項目項目4 4 匯編語言程序設計匯編語言程序設計1.兩分支程序設計【例4.3】兩個無符號數比較(兩分支)。內部RAM的30H單元和31H單元各存放了一個8位無符號數,請比較這兩個數的大小,大數放在32H中。開始X-YCy=1?30H32H31H32HYN結束4-3 兩數比較流程圖項目項目4 4 匯編語言程序設計匯編語言程序設計2.三分支程序設計【例4.4】兩個無符號數比較(三分支程序)。內部RAM的20H單元和30H單元各存放了一個8位有符號數,根據下列條件編程點亮相應的發光二極管,電路如圖4-4所示,。若(20H)=(30
20、H),則P2.0管腳連接的黃色LED發光;若(20H)(30H),則P2.1管腳連接的綠色LED發光;若(20H)Y ?黃燈點亮YN結束NY紅燈點亮綠燈點亮項目項目4 4 匯編語言程序設計匯編語言程序設計3.散轉程序散轉程序是指經過某個條件判斷之后,程序有多個流向(三個以上)。MCS-51單片機指令系統中專門提供了散轉指令,使得散轉程序的編制更加簡潔。【例4.5】在例4.4的電路的基礎上加兩個開關組成簡單的信號燈電路,如圖4-6所示,試編程實現以下功能。K0 K10 0 都按下,紅黃綠燈全亮(狀態1)0 1 K0單獨按下,紅燈亮(狀態2)1 0 K1單獨按下,綠燈亮(狀態3)1 1 都未按下,
21、黃燈亮(狀態4)項目項目4 4 匯編語言程序設計匯編語言程序設計開始讀P1口引腳狀態A轉移指令表基地址DPTR屏蔽無關位散轉移狀態1狀態2狀態3狀態4返回返回返回返回項目項目4 4 匯編語言程序設計匯編語言程序設計4.2.34.2.3循環程序循環程序循環結構程序是把需要多次重復使用的程序段,利用轉移指令反復轉向該程序段,從而大大縮短程序代碼,減少占用程序空間,程序結構也大大優化。循環程序可以分為單重循環單重循環和多重循環多重循環,其通常有兩種編制方法:一種是先執行后判斷,另一種是先判斷后執行。如圖4-8所示。開始初始化循環處理循環控制循環完成?NY循環結束結束開始初始化循環控制循環完成?NY循
22、環結束結束循環處理項目項目4 4 匯編語言程序設計匯編語言程序設計1.單重循環程序設計【例4.6】 數據極值查找程序。設內部RAM 從30H單元開始存放有8個數,找出其中最大的數,放到60H單元。解:極值查找操作的主要內容是進行數值大小比較。假定在比較過程中,以A存放大數,與之逐個比較的另一個數放在50H單元。采用先執行后判斷的結構,首先設定比較次數,在比較結束后,把查找到的最大數送到60H單元。程序流程圖如圖4-9所示。開始數據區首地址R0讀下一個數50H(50H)A(A)(50H)?NYA(60H) 結束數據個數R7讀第一個數AR7-1R7R7-1=0?NY項目項目4 4 匯編語言程序設計
23、匯編語言程序設計【例4.7】 將內部RAM中30H單元開始的數據傳送到外部RAM1200H開始的存儲空間內,直到發現數據100停止傳送。開始A=100?取內部RAM數據AYN結束傳送數據到外部RAM圖4-10 例4.7流程圖 解:由于循環次數事先不知道,但是循環條件可以測試到,可以采用先判斷后執行的程序結構。流程圖如圖4-10所示。開始A=100?取內部RAM數據AYN結束傳送數據到外部RAM圖4-10 例4.7流程圖項目項目4 4 匯編語言程序設計匯編語言程序設計2.多重循環程序設計定時程序在循環內套循環的程序結構稱多重循環,或稱循環嵌套。若把每重循環的內部看作一個整體,則多重循環的結構與單
24、重循環的結構是一樣的,也由四部分組成。多重循環的執行過程是從內向外逐層展開的。內層執行完全部循環后,外層則完成一次循環,逐次類推。因此,每執行一次外層循環,內層必須重新設置初值,故每層均包含完整的循環程序結構。層次必須分明,層次之間不能有交叉;否則,將產生錯誤。定時程序是一種很典型的多重循環程序,其在單片機匯編語言程序設計中使用非常廣泛,例如定時檢測、定時掃描、定時中斷等。所謂定時就是讓CPU做一些與主程序功能無關的操作(例如將一個數字逐次減1直到為0)來空耗掉CPU的時間來達到延時的目的。由于我們知道CPU執行每條指令的準確時間,因此執行整個延時程序的時間也可以精確計算出來。也就是說,我們可
25、以寫出延時長度任意而且精度相當高的延時程序。項目項目4 4 匯編語言程序設計匯編語言程序設計【例4.8】設計一個延時50ms的程序,設單片機時鐘晶振頻率為fosc=12MHz。解:延時程序一般采用循環程序結構編程,通過確定循環程序中的循環次數和循環程序段兩個因素來確定延時時間。題目給定fosc=12MHz,那么機器周期的計算方法:T機器=12T時鐘=12(1/12M) =1s。下面就是一個最簡單的單循環定時程序: MOV R7,#TIMELOOP: NOP NOPDJNZ R7,LOOPNOP指令的機器周期為1,用來提高定時精度,DJNZ指令的機器周期為2,故一次循環共4個機器周期。一個機器周
26、期是1S,則一次循環的延遲時間為4S。上面程序總的延遲時間為4time(S)。本程序的實際延遲時間取決于裝入寄存器R7的定時時間常數time。R7是8位寄存器,故這個程序的最長定時時間為25641020(S),即定時范圍是41024S。可見單循環定時程序的時間延遲較小。項目項目4 4 匯編語言程序設計匯編語言程序設計為了加長定時時間,通常采用多重循環方法。流程圖如圖4-11所示。開始外循環次數TIME1R7內循環次數TIME2R6空操作R6-1=0?NYR7-1=0?NY返回圖4-11多重循環流程圖程序如下: MOV R7,TIME1LOOP2:MOV R6,TIME2LOOP1:NOP DJ
27、NZ R6,LOOP1DJNZ R7,LOOP2 RET 最大定時時間計算公式為:(256222)2561132097(S)若定時50ms,采取合適的TIME1和TIME2即可,如TIME1=200和TIME2=123。項目項目4 4 匯編語言程序設計匯編語言程序設計循環控制:在重復執行循環體的過程中,不斷修改和判別循環變量,直到符合循環結束條件。一般情況下,循環控制有以下幾種方式:(1)計數循環如果循環次數已知,用計數器計數來控制循環次數,這種控制方式用得比較多。循環次數要在初始化部分予置,在控制部分修改,每循環一次計數器內容減1。(2)條件控制循環在循環次數未知的情況下,一般通過設立結束條
28、件來控制循環的結束。(3)循環結束處理:這部分程序用于存放執行循環程序所得結果以及恢復各工作單元的初值等。項目項目4 4 匯編語言程序設計匯編語言程序設計4.2.4 4.2.4 查表程序查表程序在微型機控制系統中,有些參數的計算是非常復雜的,用計算法計算不僅程序長,難于計算,而且需要耗費大量時間。還有一些非線性參數,它們不是用一般算術運算就可以計算出來,而是要涉及到指數,對數,三角函數,以及積分,微分等運算。所有這些運算用匯編語言編程計算都比較復雜,有些甚至無法建立相應的數學模型。為了解決這些問題,可以采用查表法。所謂查表法,就是把事先計算或測得的數據按一定順序編制成表格,查表程序的任務就是根據被測參數的值或者中間結果,查出最終所需要的結果。它具有程序簡單,執行速度快等優點。查表程序在微型機控制系統中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模具行業法律法規與標準考核試卷
- 玻璃涂層技術考核試卷
- 電氣安裝工程的監理與驗收程序規范標準考核試卷
- 相機購買指南與消費建議考核試卷
- 玻璃太陽能集熱器考核試卷
- 景區旅游市場秩序維護考核試卷
- 玩具設計中的故事性與品牌塑造考核試卷
- 成人高等教育計算機圖形學與虛擬現實考核試卷
- 糧油企業綠色采購與供應鏈管理考核試卷
- 寧夏財經職業技術學院《地質資源與地質工程進展與創新》2023-2024學年第二學期期末試卷
- 店鋪裝修施工方案
- 2025火災報警產品強制性產品認證實施細則
- 中考數學《數與式》專題訓練(含答案)
- 新生兒呼吸窘迫綜合征的護理查房
- 體外診斷試劑培訓課件
- 《ICC概述》課件:揭秘國際刑事法院的職能與運作
- 《建筑裝飾工程施工圖設計》學習領域課程標準
- DB33T 1214-2020 建筑裝飾裝修工程施工質量驗收檢查用表標準
- 消化內科診療指南及操作規范
- 液體配制安全
- 《電動航空器電推進系統技術規范》
評論
0/150
提交評論