匯編語言程序設計知識_第1頁
匯編語言程序設計知識_第2頁
匯編語言程序設計知識_第3頁
匯編語言程序設計知識_第4頁
匯編語言程序設計知識_第5頁
已閱讀5頁,還剩39頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

第4章匯編語言程序設計及知識§4.1編程的步驟、方法和技巧§4.2匯編語言源程序的編輯和匯編4/15/2025§4.1編程的步驟、方法和技巧§4.1.1編程的步驟§4.1.2編程的方法和技巧§4.1.3匯編語言程序的基本結構4/15/2025§4.1.1編程的步驟一、分析問題二、確定算法三、畫程序流程圖四、編寫程序4/15/2025一、分析問題對需要解決的問題進行分析,以求對問題由正確的理解。解決問題的任務是什么?工作過程?現有的條件,已知數據,對運算的精度和速度方面的要求?設計的硬件結構是否方便編程?4/15/2025二、確定算法算法是如何將實際問題轉化成程序模塊來處理。在編程以前,先要對幾種不同的算法進行分析、比較,找出最適宜的算法4/15/2025三、畫程序流程圖程序流程圖是使用各種圖形、符號、有向線段等來說明程序設計過程的一種直觀的表示。流程圖步驟分得越細致,編寫程序是也越方便。畫流程圖是程序結構設計是采用的一種重要手段。一個系統軟件有總的流程圖(主程序框圖)和局部的流程圖。流程圖常采用的圖形和符號。4/15/2025橢圓框或桶形框:表示程序的開始或結束。矩形框:表示要進行的工作。菱形框:表示要判斷的事情,菱形框內的表達式表示要判斷的內容。圓圈:表示連接點指向線:表示程序的流向4/15/2025四、編寫程序用89C51匯編語言編寫的源程序行(一條語句)包括四個部分,也叫四個字段:〔標號:〕〔操作碼〕〔操作數〕;〔注釋〕

每個字段之間要用分隔符分隔,而每個字段內部不能使用分隔符??梢杂米鞣指舴姆枺嚎崭瘛啊薄⒚疤枴埃骸薄ⅰ⒍禾枴?,”、分號“;”等。例:LOOP:MOVA,#00H;立即數00H→A4/15/2025標號標號是用戶定義的符號地址。一條指令的標號是該條指令的符號名字,標號的值是匯編這條指令時指令的地址。標號由以英文字母開始的1~8個字母或數字組成,以冒號“:”結尾。標號可以由賦值偽指令賦值,如果沒有賦值,匯編程序把存放該指令目標碼第一字節的存儲單元的地址賦給該標號,所以,標號又叫指令標號。4/15/2025操作碼操作碼是必不可少的。它用一組字母符號表示指令的操作碼。在89C51中,由89C51的指令助記符組成。4/15/2025操作數匯編語言指令可能要求或不要求操作數,所以這一字段可能有也可能沒有。若有兩個操作數,操作數之間用逗號“,”分開。操作數包括的內容有:(1)工作寄存器:由PSW.3和PSW.4規定的當前工作寄存器區中的R0~R7。(2)特殊功能寄存器:21個SFR的名字。(3)標號名:賦值標號—由匯編指令EQU等賦值的標號;指令標號—指令標號指示的指令的第一字節地址是該標號的值。(4)常數:可用二進制(B)、十進制、十六進制(H),若常數以字符開頭,前面加0。(5)$:用來表示程序計數器的當前值。(6)表達式:匯編時,計算出表達式的值填入目標碼。4/15/2025注釋注釋部分不是匯編語言的功能部分,只是用語增加程序的可讀性。良好的注釋是匯編語言程序編寫中的重要組成部分。4/15/2025§4.1.2編程的方法和技巧一、模塊化的程序設計方法二、編程技巧4/15/2025一、模塊化的程序設計方法1、程序功能模塊化的優點2、劃分模塊的原則4/15/20251、程序功能模塊化的優點單個模塊結構的程序功能單一,易于編寫、調試和修改。便于分工,從而可使多個程序員同時進行程序的編寫和調試工作,加快軟件研制進度。程序可讀性好,便于功能擴充和版本升級。對程序的修改可局部進行,其它部分可以保持不變。對于使用頻繁的子程序可以建立子程序庫,便于多個模塊調用。4/15/20252、劃分模塊的原則每個模塊應具有獨立的功能,能產生一個明確的結果,即單模塊的功能高內聚性。模塊之間的控制耦合應盡量簡單,數據耦合應盡量少,即模塊間的低耦合性。控制耦合是指模塊進入和退出的條件及方式,數據耦合是指模塊間的信息交換方式、交換量的多少及交換頻繁程度。模塊長度適中。20條~100條的范圍較合適。4/15/2025二、編程技巧1、盡量采用循環結構和子程序。2、盡量少用無條件轉移指令。3、對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數的寄存器外,子程序中用到的其他寄存器的內容應壓入堆棧(返回前再彈出),即保護現場。4、在中斷處理程序中,除了要保護處理程序中用到的寄存器外,還要保護標志寄存器。5、用累加器傳遞入口參數或返回參數比較方便,在子程序中,一般不必把累加器內容壓入堆棧。4/15/2025§4.1.3匯編語言程序的基本結構一、順序程序二、分支程序三、循環程序4/15/2025一、順序程序順序程序是最簡單的程序結構,即順序結構。程序按順序一條一條地執行指令。4/15/2025二、分支程序程序分支是通過條件轉移指令實現的,即根據條件對程序的執行進行判斷、滿足條件則進行程序轉移,不滿足條件就順序執行程序。分支程序又分為單分支和多分支結構。多分支程序是首先把分支程序按序號排列,然后按序號值進行轉移。在89C51指令系統中,通過條件判斷實現單分支程序轉移的指令有:JZ、JNZ、CJNE、DJNZ等。此外還有以位狀態作為條件進行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用這些指令可以完成0、1、正、負,以及相等、不相等作為各種條件判斷依據的程序轉移。結構如圖4-1所示。例子如例4-1所示。4/15/2025圖4-1分支程序結構散轉指令轉向0分支轉向1分支轉向n-1分支轉向n分支K=0K=1K=n-1K=n┅┅┅4/15/2025例4-1:128種分支轉移程序。功能:根據入口條件轉移到128個目的地址。入口:(R3)=轉移目的地址的序號00H~7FH。出口:轉移到相應子程序入口。128個子程序首址JMP_128:MOVA,R3RLAMOVDPTR,#JMPTABJMP@A+DPTRJMPTAB:AJMPROUT00AJMPROUT01┇┇AJMPROUT7F說明:此程序要求128個轉移目的地址(ROUT00~ROUT7FH)必須駐留在與絕對轉移指令AJMP相同的一個2KB存儲區內。RL指令對變址部分乘以2,因為每條AJMP指令占兩個字節。4/15/2025三、循環程序在程序運行時,有時需要連續重復執行某段程序,可以使用循環程序。其結構包括四部分:

1、置循環初值

2、循環體(循環工作部分)

3、修改控制變量

4、循環控制部分其組織方式如圖4-2所示。4/15/20251、置循環初值對于循環程序中所使用的工作單元,在循環開始時應置初值。例如,工作寄存器設置計數初值,累加器A清0,以及設置地址指針、長度等。4/15/20252、循環體(循環工作部分)重復執行的程序段部分,分為循環工作部分和循環控制部分。循環控制部分每循環一次,檢查結束條件,當滿足條件時,就停止循環,往下繼續執行其他程序4/15/20253、修改控制變量在循環程序中,不許給出循環結束條件。常見的是計數循環,當循環了一定的次數后,就停止循環。在單片機中,一般用一個工作寄存器Rn作為計數器,對該計數器賦初值作為循環次數。每循環一次,計數器的值減1,即修改循環控制變量,當計數器的置件為0時,就停止循環。4/15/20254、循環控制部分根據循環結束條件,判斷是否結束循環。89C51可采用DJNZ指令來自動修改控制變量并能結束循環。4/15/2025置初值循環體循環修改循環控制退出循環未完完(a)置初值循環體循環修改循環控制退出循環未完完(b)圖4-2循環組織方式流程圖4/15/2025§4.2匯編語言源程序的編輯和匯編§4.2.1源程序編輯§4.2.2源程序的匯編§4.2.3偽指令4/15/2025§4.2.1源程序編輯在微型計算機上,借助編輯軟件,編寫或修改匯編語言源程序。如行編輯或屏幕編輯軟件。4/15/2025§4.2.2源程序的匯編匯編:將匯編語言源程序轉換為機器碼表示的目標程序的過程。對單片機有:

一、手工匯編

二、機器匯編

三、反匯編4/15/2025一、手工匯編通過手工方式查指令編碼表,逐個把助記符指令“翻譯”成機器碼,然后把得到的機器碼程序鍵入單片機,進行調試和運行。手工匯編的缺點:1、偏移量的計算容易出錯2、程序的修改會引起后面指令地址的變化,轉移指令的偏移量也要重新計算。4/15/2025二、機器匯編機器匯編是在計算機上使用交叉匯編程序進行源程序的匯編。匯編工作由機器自動完成,最后得到以機器碼表示的目標程序。4/15/2025三、反匯編將二進制機器語言程序翻譯成匯編語言程序的過程稱反匯編。匯編和反匯編的過程如圖4-3所示。源程序(匯編語言)目標碼(機器語言)匯編(匯編程序)反匯編(匯編程序)圖4-3匯編和反匯編過程4/15/2025§4.2.3偽指令偽指令不是真正的指令,無對應的機器碼,在匯編時不產生目標程序,只是用來對匯編過程進行某種控制。89C51有8個偽指令:ORGENDEQUDATADBDWDSBIT4/15/2025ORG匯編起始命令格式:ORG16位地址功能:規定該偽指令后面程序的匯編地址,即匯編后生成目標程序存放的起始地址。例如:ORG2000HSTART:MOVA,#64H┇規定了START的地址是2000H,又規定了匯編后的第一條指令碼從2000H開始存放。4/15/2025END匯編結束指令格式:END功能:通知匯編程序結束匯編。在END之后所有的匯編指令均不予以處理。4/15/2025EQU

賦值命令格式:字符名稱EQU項(數或匯編符號)功能:把“項”賦給“字符名稱”。注意:字符名稱不等于標號(其后沒有冒號);其中的項,可以是數,也可以是匯編符號。EQU賦值過的符號名可以用作數據、代碼地址、位地址或一個立即數。可以是8位的,也可以是16位的。例1:AAEQUR1MOVA,AA;AA代表工作寄存器R1例2:A10EQU10DELYEQU07EBHMOVA,A10;A10作為片內的一個直接地址LCALLDELY;DELY作為一個16位子程序的入口地址4/15/2025DATA數據地址賦值命令格式:字符名稱DATA表達式功能:與EQU類似,但有以下差別:1、EQU定義的字符名必須先定義后使用,而DATA定義的字符名可以后定義先使用。2、用EQU偽指令可以把一個匯編符號賦給一個名字,而DATA只能把數據賦給字符名。3、DATA語句可以把一個表達式的值賦給字符名稱,其中的表達式應是可求值的。DATA偽指令在程序中用來定義數據地址4/15/2025DB定義字節命令格式:DB(項或項表)功能:通知匯編程序從當前ROM地址開始,保留一個字或字節串的存儲單元,并存入DB后的數據。注意:項或項表可以是一個字節,用逗號隔開的字節串或括在單引號中的ASCII字符串。例如:ORG2000H DB0A3HLIST:DB26H,03HSTR:DB‘ABC’┇經匯編后(2000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,(41H,42H,43H分別為A,B,C的ASCII碼)4/15/2025DW定義字命令格式:DW16位數據項或項表功能:把DW后的16位數據項或項表從當前地址連續存放。每項數值為16位二進制數,高8位先放,低8位后存放

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論