第四章 匯編語言程序設計xin_第1頁
第四章 匯編語言程序設計xin_第2頁
第四章 匯編語言程序設計xin_第3頁
第四章 匯編語言程序設計xin_第4頁
第四章 匯編語言程序設計xin_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章匯編語言程序設計4.1匯編語言●

機器語言●匯編語言●

高級語言4.1.1

計算機的程序設計語言種類一、機器語言

是一種能被計算機直接識別和執(zhí)行的機器級語言。有兩種二進制和十六進制兩種表示形式。

不易被人們識別和讀寫,不方便進行程序設計。二、匯編語言

是一種代替機器語言進行程序設計的語言,由助記符、保留字和偽指令等組成,易被人們識別和讀寫。采用匯編語言編寫的程序叫做匯編語言程序,不能直接被計算機執(zhí)行,必須通過編譯軟件翻譯成機器語言程序(即目標代碼)才能被計算機執(zhí)行。采用匯編語言,用戶可直接操作到單片機內(nèi)部的存儲單元,適用于編寫實時控制程序。地址機器語言匯編語言二進制形式十六進制2000H0111010000000101B7405HMOVA,#05H2002H0010010000001010B240AHADDA,#0AH2004H1111010100100000BF520HMOV20H,A2006H1000000011111110B80FEHSJMP$機器語言與匯編語言的形式三、高級語言相對于匯編語言,高級語言接近自然語言和數(shù)學公式的編程,與計算機的硬件結構及指令系統(tǒng)無關,能更好的描述各種算法,方便學習和編程。高級語言編譯生成的程序代碼一般比用匯編程序語言設計的程序代碼要長,執(zhí)行的速度也慢。所以匯編語言適合編寫一些對速度和代碼長度要求高的程序和直接控制硬件的程序。4.1.2

匯編語言格式標號:

操作碼

操作數(shù)

;注釋

標號:語句地址的標志符號,有如下規(guī)定長度為1~8個ASCII字符;第1個字符必須是字母,其余為字母、數(shù)字或其他特定字符;不能使用系統(tǒng)關鍵字,如指令符、寄存器名等;后邊必須跟冒號2.操作碼●

表示指令的操作功能●為便于記憶,通常用與操作相應的英文縮寫表示,如加法用ADD,減法用SUBB,傳送用MOV等,編譯時還原成一定的二進制代碼。3.操作數(shù)●

指參加操作的數(shù)據(jù)或數(shù)據(jù)的地址●

操作數(shù)的個數(shù)無操作數(shù)——操作數(shù)隱含在操作助記符中單操作數(shù)兩操作數(shù)三操作數(shù)●

在兩操作數(shù)的指令中,通常目的操作數(shù)寫在左邊,源操作數(shù)寫在右邊。

操作數(shù)之間用逗號隔開?!?/p>

操作數(shù)的二進制、十進制和十六進制形式MOVA,#00110101B;A←53ADDA,#20 ;A←53+20MOVR0,#20H ;R0←20HMOVR1,#0BFH ;R1←BFH4.注釋●

用于注解指令或程序,便于編寫和閱讀程序;●任選項;●以分號開頭,一行不夠?qū)懚枇砥鹨恍袝r也必須以分號開頭。4.1.3

匯編語言的指令構成指令性語句第三章所講的111條指令的助記符語句,通過編譯軟件匯編成目標代碼(機器碼)。指示性語句又稱為偽指令,在匯編時不產(chǎn)生機器碼,主要用來完成一些特殊操作。1、ORG起始匯編常用偽指令定位程序的起始地址。用于指明程序段或數(shù)據(jù)段從ROM的什么位置開始存放。格式為:ORG地址值(十六進制表示)如ORG0000H在一個程序中,可以多次使用ORG規(guī)定不同程序段或數(shù)據(jù)段存放的起始地址,但要求地址值由小到大依序排列,不允許空間重疊。2、END結束匯編表示匯編語言源程序結束。

注意:一個源程序只能有一個END語句,必須放在整個程序的末尾。3、EQU賦值偽指令調(diào)用格式為

字符名稱EQU數(shù)值或匯編符號把EQU右邊的“數(shù)據(jù)或匯編符號”賦給左邊的“字符名稱”?!白址Q”必須先賦值后使用,故該語句通常放在源程序的開頭。 ORG0000HAAEQUR1A10EQU10H MOVA,AA;AA當做R1使用MOVR0,A10;A10為8位直接地址...END4、DB字節(jié)定義偽指令從指定單元開始定義(存儲)若干個字節(jié)的數(shù)據(jù)或ASCII碼字符,常用于定義數(shù)據(jù)常數(shù)表。例: ORG 3000HTAB1:DB12H,0DEH DB‘5’,‘A’,‘a(chǎn)’12HDEH35H41H61H3000H3001H3002H3003H3004H5、DW字定義偽指令與DB相似,但用于定義字數(shù)據(jù)。一個字在存儲器中占兩個字節(jié)。主要用來定義16位地址,高8位在前,低8位在后。例ORG3000HTAB2:DW1234H,5678H12H34H56H78H3000H3001H3002H3003H6、DS定義存儲空間偽指令格式為:DS表達式

用在存儲器中預留一定數(shù)量的字節(jié)單元,為以后存放數(shù)據(jù)。預留的單元數(shù)目由表達式的值決定。例ORG3000H TAB1:DB12H,34H

DS4H DB'5'12H34H--------35H3000H3001H3002H3003H3004H3005H3006H7、BIT位地址賦值偽指令格式為:字符名稱BIT位地址用于給位地址賦予符號,經(jīng)賦值后可用該符號代替BIT后面的位地址。例: ABC BIT P1.1 QQ BIT P3.24.1.4

匯編語言程序中的文件源程序文件

匯編語言源程序是由匯編指令和偽指令組成的文件,其擴展名為.ASM

源程序編輯完后只有轉換為機器碼表示的目標程序單片機才能執(zhí)行,這個轉換的過程稱為匯編。目標程序文件

擴展名為.HEX

4.2程序設計方法及技巧4.2.1編程步驟1.任務分析(硬件、軟件系統(tǒng)分析)2.確定算法和工作步驟3.程序總體設計和流程圖繪制4.分配內(nèi)存,確定程序與數(shù)據(jù)區(qū)存放地址5.編寫源程序6.調(diào)試、修改,最終確定程序。流程圖是編程的基礎和條件,繪制一個好的流程圖,是程序設計的一項重要內(nèi)容。對于簡單的應用程序,可以不畫流程圖。但是當程序較為復雜時,繪制流程圖是一個良好的編程習慣。開始處理框判斷結束程序流向流程圖符號4.3基本的程序結構順序程序分支程序循環(huán)程序查表程序子程序4.3.1順序程序順序程序執(zhí)行流程是按指令在存儲器中的存放順序進行的。例2:將片內(nèi)RAM104、105單元中的內(nèi)容分別傳送到片外RAM104H、105H單元中。一、數(shù)據(jù)傳送例1:內(nèi)部RAM的2AH~2EH單元中存儲的數(shù)據(jù)如圖所示。試編寫程序?qū)崿F(xiàn)圖示的數(shù)據(jù)傳送結果。MOVA,2EHMOV2EH,2DHMOV2DH,2CHMOV2CH,2BHMOV2BH,#00HORG0000HMOVR0,#68HMOVA,@R0 ;片內(nèi)RAM104單元內(nèi)容送累加器MOVDPTR,#0104HMOVX@DPTR,A ;完成片內(nèi)RAM104單元內(nèi)容送片 ;外104H單元中INCR0MOVA,@R0 ;片內(nèi)RAM105單元內(nèi)容送累加器INCDPTRMOVX@DPTR,A ;完成片內(nèi)RAM105單元內(nèi)容送片 ;外105H單元中SJMP$ ;等待END ;結束二、簡單運算由于51指令系統(tǒng)中只有單字節(jié)加法指令,因此對于多字節(jié)的相加運算必須從低位字節(jié)開始分字節(jié)進行。除最低字節(jié)可以使用ADD指令外,其他字節(jié)相加時要把低字節(jié)的進位考慮進去,這時就應該使用ADDC指令。例3:雙字節(jié)無符號數(shù)加法。設被加數(shù)存放在內(nèi)部RAM的51H、50H單元,加數(shù)存放在內(nèi)部RAM的61H、60H單元,相加的結果存放在內(nèi)部RAM的51H、50H單元,進位存放在位尋址區(qū)的00H位中。

ROG0000HMOVR0,#50H ;被加數(shù)的低字節(jié)地址 MOVR1,#60H ;加數(shù)的低字節(jié)地址 MOVA,@R0 ;取被加數(shù)低字節(jié)ADDA,@R1 ;加上加數(shù)低字節(jié)MOV@R0,A ;保存低字節(jié)相加結果INCR0 ;指向被加數(shù)高字節(jié)INCR1 ;指向加數(shù)高字節(jié)MOVA,@R0 ;取被加數(shù)高字節(jié)ADDCA,@R1 ;加上加數(shù)高字節(jié)(帶進位加)MOV@R0,A ;存高字節(jié)相加結果MOV00H,C ;保存進位。

SJMP$ ;等待END4.3.2分支程序一.簡單分支程序NY跳轉至目標程序條件滿足?順序執(zhí)行例4:已知片內(nèi)RAM40H開始的兩個單元中各存放有一個8位無符號二進制數(shù),要求找出其中的大數(shù)并存入片內(nèi)RAM50H單元中。分析:將兩數(shù)相減,用進位標志C做為分支轉移的條件就很容易地找出其中的大數(shù)。 ORG0000H CLRC MOVR0,#40H ;第一個數(shù)地址送R0中 MOVA,@R0 ;取第一個數(shù) INCR0 ;R0指向第二個數(shù)地址 SUBBA,@R0;兩數(shù)比較 JCBIG;第二個數(shù)大(C=1)轉BIG DECR0;R0指向第一個數(shù)地址BIG: MOV50H,@R0;存大數(shù) SJMP$;等待 END;結束例5:設變量x以補碼的形式存放在片內(nèi)RAM的30H單元,變量y與x的關系是:當x大于0時,y=x;當x=0時,y=20H;當x小于0時,y=x+5。編制程序,根據(jù)x的大小求y并送回原單元。START:MOVA,30HJZNEXTANLA,#80H;判斷符號位 JZLPMOVA,#05HADDA,30HMOV30H,ASJMPLPNEXT:MOV30H,#20HLP:SJMP$

二.多分支程序(又稱為散轉程序)通常采用查散轉表法,按分支號進行轉移。使用的指令是JMP@A+DPTR

并配合AJMP或LJMP查散轉表法的多分支程序結構:…… MOVDPTR,#TABLE;散轉表首地址(基址)

RLA

溫馨提示

  • 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

提交評論