




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章 匯編語言程序設(shè)計(jì),匯編語言是最早應(yīng)用于單片機(jī)的開發(fā)與應(yīng)用的程序語言。相比其他程序設(shè)計(jì)語言,匯編語言執(zhí)行速度快、代碼短小精悍,且指令的執(zhí)行周期確定。但是匯編語言也有不足之處,比如其指令復(fù)雜、缺乏通用性、不便于程序的移植。目前,隨著電子技術(shù)的發(fā)展,匯編語言的使用范圍越來越小,逐漸被C51語言所代替,但是學(xué)習(xí)匯編語言對(duì)理解8051的結(jié)構(gòu)及指令是很有幫助的。 本章主要介紹了匯編語言的概述、指令格式,以及匯編語言的程序結(jié)構(gòu)。本章內(nèi)容包括: 匯編語言程序概述 匯編語言指令及其格式 匯編語言程序設(shè)計(jì) Keil Vison3中運(yùn)行匯編語言實(shí)例,4.1 匯編語言程序概述,匯編語言程序是單片機(jī)匯編指令的集合。匯編語言程序設(shè)計(jì)與51系列單片機(jī)的匯編指令集和硬件結(jié)構(gòu)等有密切聯(lián)系,在單片機(jī)上可以用來實(shí)現(xiàn)特定的功能和任務(wù)。匯編語言以其簡(jiǎn)練的代碼、快速的操作硬件能力而獲得了廣泛使用,這里首先介紹匯編語言的基本情況。,4.1.1 匯編語言簡(jiǎn)介,匯編語言是采用助記符標(biāo)識(shí)的指令的程序設(shè)計(jì)語言。其中助記符標(biāo)識(shí)是二進(jìn)制指令的形象標(biāo)記。由于現(xiàn)在采用的計(jì)算機(jī)都是二進(jìn)制的,其所能執(zhí)行的每一條指令都對(duì)應(yīng)一組二進(jìn)制代碼。采用二進(jìn)制代碼來表示指令和數(shù)據(jù)的語言為機(jī)器語言,它是唯一能被計(jì)算機(jī)識(shí)別的語言。然而這種語言很難記憶和辨認(rèn),給程序設(shè)計(jì)工作帶來很大麻煩。為了容易理解和記憶這些計(jì)算機(jī)的指令,人們用一些英文單詞和字符等作為助記符來描述每一條二進(jìn)制指令的功能。用助記符標(biāo)識(shí)的指令就是計(jì)算機(jī)的匯編語言,匯編語言和機(jī)器語言是一一對(duì)應(yīng)的。 采用匯編語言編寫的程序,每條指令的含義一目了然,這給單片機(jī)程序的編寫、閱讀和修改帶來很大方便。而且用匯編語言編寫的程序代碼少,執(zhí)行速度快,每條指令的執(zhí)行時(shí)間完全確定。因此,在最初的單片機(jī)應(yīng)用系統(tǒng)中,主要是用匯編語言來編寫程序。,4.1.2 匯編語言程序設(shè)計(jì)步驟,使用匯編語言進(jìn)行計(jì)算機(jī)或者單片機(jī)程序設(shè)計(jì)的流程圖,如圖所示,一般可以分為以下幾個(gè)步驟:,4.1.3 匯編語言程序?qū)嵗?首先,為了讓大家認(rèn)識(shí)一下匯編語言的結(jié)構(gòu),這里舉一個(gè)匯編語言的例子。程序示例如下。 ORG 0200H ;匯編程序起始指令 MOV A, 32H ;將單字節(jié)數(shù)據(jù)存入累加器A中 MOV B, #100 ;分離出百位數(shù) DIV AB MOV R5, A ;百位數(shù)送入寄存器R5 XCH A, B ;余數(shù)存入累加器A中 MOV B, #10 ;分離出十位和個(gè)位 DIV AB SWAP A ;十位存入高字節(jié) ADD A, B ;低位存入低字節(jié)中 MOV R6, A END ;,4.2 偽指令,偽指令是為匯編程序提供某種信息的指令。偽指令不能命令CPU執(zhí)行某種操作,也沒有對(duì)應(yīng)的機(jī)器代碼,而51系列單片機(jī)的指令能使單片機(jī)的CPU執(zhí)行某種操作,能生成對(duì)應(yīng)的機(jī)器代碼。51系列單片機(jī)匯編程序常用的偽指令有如下幾類。,4.2.1 匯編程序起始偽指令ORG,匯編程序起始偽指令ORG主要用于規(guī)定匯編程序塊或數(shù)據(jù)塊存放的起始地址,它的使用格式如下: 標(biāo)號(hào): ORG 16位地址 示例如下: ORG 0200H START: MOV A, #45H ,4.2.2 匯編程序結(jié)束偽指令END,匯編程序結(jié)束偽指令END是匯編語言源程序的結(jié)束標(biāo)志。END偽指令的使用格式是: 標(biāo)號(hào): END 表達(dá)式 在程序中,END以后所寫的任何指令,匯編程序都不予以處理。一個(gè)源程序只能有一個(gè)END偽指令。對(duì)于同時(shí)包含有主程序和子程序的匯編源程序中,同樣也只能有一個(gè)END偽指令。,4.2.3 等值偽指令EQU(或=),等值偽指令EQU是將一個(gè)數(shù)或者特定的匯編符號(hào)賦予規(guī)定的字符名稱。它的使用格式如下: 字符名稱 EQU 數(shù)據(jù)或匯編符號(hào) 或者 字符名稱 = 數(shù)據(jù)或匯編符號(hào) 用EQU指令賦值以后的字符名稱可以用作數(shù)據(jù)地址、代碼地址、位地址或者當(dāng)作一個(gè)立即數(shù)來使用。因此,給字符名稱所賦的值可以是8位數(shù),也可以是16位數(shù)。需要注意的是,這里使用的“字符名稱”不是標(biāo)號(hào),不能用“:”來做分隔符。,4.2.4 數(shù)據(jù)地址賦值偽指令DATA,數(shù)據(jù)地址賦值偽指令DATA是將數(shù)據(jù)地址或代碼地址賦予規(guī)定的字符名稱。其使用格式如下: 字符名稱 DATA 表達(dá)式 DATA偽指令的功能與EQU有些相似,使用時(shí)要注意它們有以下區(qū)別: EQU偽指令必須先定義后使用,而DATA偽指令則無此限制; EQU偽指令可以把一個(gè)匯編符號(hào)賦給一個(gè)字符名稱,而DATA偽指令則不能; DATA偽指令可將一個(gè)表達(dá)式的值賦給一個(gè)字符變量,所定義的字符變量也可以出現(xiàn)在表達(dá)式中,而EQU定義的字符則不能這樣使用。DATA偽指令在程序中常用來定義數(shù)據(jù)地址。,4.2.5 定義字節(jié)偽指令DB,定義字節(jié)偽指令DB是從標(biāo)號(hào)指定的地址單元開始,將數(shù)據(jù)表中的字節(jié)數(shù)據(jù)按順序依次保存。其使用格式如下: 標(biāo)號(hào): DB 8位字節(jié)數(shù)據(jù)表 這里的數(shù)據(jù)表可以是一個(gè)或多個(gè)字節(jié)數(shù)據(jù)、字符串或表達(dá)式,各項(xiàng)數(shù)據(jù)用“,”分隔,一個(gè)數(shù)據(jù)項(xiàng)占一個(gè)存儲(chǔ)單元。定義字節(jié)偽指令DB的使用示例代碼如下: ORG 1000H DATA1: DB 11H,34H,60,90H DATA2: DB 111B,A,4.2.6 定義字偽指令DW,定義字偽指令DW是從標(biāo)號(hào)指定的地址單元開始,將數(shù)據(jù)表中的字?jǐn)?shù)據(jù)按從左到右的順序依次保存。其使用的格式為: 標(biāo)號(hào): DW 16位字?jǐn)?shù)據(jù)表 DW的功能和DB相類似,需要注意的是:16位數(shù)據(jù)要占用兩個(gè)單元的存儲(chǔ)器,其中,高8位數(shù)據(jù)存入低地址字節(jié),低8位數(shù)據(jù)存入高地址字節(jié)。定義字偽指令DW的使用示例代碼如下: ORG 1000H DATA1: DW 13ABH, 4CH,4.2.7 定義空間偽指令DS,定義空間偽指令DS是從標(biāo)號(hào)指定的地址單元開始,保留若干個(gè)存儲(chǔ)單元作為備用的空間。其中,保留的數(shù)量由表達(dá)式指定。其使用格式如下: 標(biāo)號(hào): DS 表達(dá)式 定義空間偽指令DS的使用示例代碼如下: ORG 1000H BUF: DS 07H 該段偽指令經(jīng)匯編以后,從地址1000H開始保留7個(gè)內(nèi)存單元,然后從1007H開始才可以進(jìn)行其他操作。,4.2.8 位地址符號(hào)偽指令BIT,位地址符號(hào)偽指令BIT,主要用于對(duì)位地址賦予所規(guī)定的字符名稱。其使用格式如下: 字符名稱 BIT 位地址 位地址符號(hào)偽指令BIT的使用示例代碼如下: P20 BIT P2.0 P21 BIT P2.1 該段偽指令經(jīng)匯編以后,將位地址P2.0和P2.1賦給P20和P21,此后可以使用P20和P21當(dāng)作位地址來代替P2.0和P2.1。,4.3 匯編語言程序的格式,匯編語言程序的每一句程序一般由四部分組成,即標(biāo)號(hào)、操作碼、操作數(shù)和注釋。每個(gè)部分之間要用分隔符隔開,分隔符可以采用空格、冒號(hào)“:”、分號(hào)“;”。其使用格式如下: 標(biāo)號(hào): 操作碼 操作數(shù) ;注釋 一般對(duì)于一行匯編程序來說,只有操作碼是必不可少的,其他視情況而定可有可無。 標(biāo)號(hào)由8個(gè)或8個(gè)以下的字符或數(shù)字構(gòu)成,但第一個(gè)必須是字母。除字母和數(shù)字外,在標(biāo)號(hào)中還可以使用下劃線符號(hào)“_”。各種特殊功能寄存器名、各個(gè)位地址記憶符、各種偽指令等都不能用作標(biāo)號(hào)。以下是一些合法的標(biāo)號(hào): P10、DELY、DATA0等。 以下的字符串不能用作標(biāo)號(hào): 7P、P+A、MOV等。,4.4 源程序的匯編,源程序的匯編是將匯編語言源程序轉(zhuǎn)換為用機(jī)器碼表示的目標(biāo)程序的過程。其中能完成該轉(zhuǎn)換功能的程序稱為匯編程序。 匯編常用的方法有兩種:一種是手工匯編,另一種是機(jī)器匯編。 手工匯編是把程序用助記符指令寫出后,然后人為查找指令代碼表,逐個(gè)把助記符指令翻譯成機(jī)器碼,然后把得到的機(jī)器碼程序(以十六進(jìn)制形式)輸入到單片機(jī)開發(fā)軟件中,并進(jìn)行調(diào)試。由于手工匯編是按絕對(duì)地址進(jìn)行定位的,所以,對(duì)于偏移量的計(jì)算和程序的修改有諸多不便。而且手工匯編十分復(fù)雜,很費(fèi)時(shí)間,也很容易出錯(cuò),因此,一般只有程序較小或工具所限時(shí)才使用。 機(jī)器匯編是在計(jì)算機(jī)上,使用匯編程序?qū)R編語言源程序轉(zhuǎn)換為計(jì)算機(jī)能識(shí)別的機(jī)器碼表示的目標(biāo)程序。匯編工作由計(jì)算機(jī)自動(dòng)完成,生成的目標(biāo)程序經(jīng)調(diào)試無誤后,再固化到單片機(jī)的程序存儲(chǔ)器中。,4.5 Keil Vison3中運(yùn)行匯編語言實(shí)例,這里首先通過一個(gè)簡(jiǎn)單的實(shí)例,來介紹如何使用Vison3進(jìn)行單片機(jī)匯編程序的開發(fā)。,4.5.1 創(chuàng)建項(xiàng)目,首先,雙擊啟動(dòng)Vison3集成開發(fā)環(huán)境,開始創(chuàng)建項(xiàng)目,操作步驟如下。,4.5.2 創(chuàng)建源文件,項(xiàng)目建立完畢后,現(xiàn)在開始進(jìn)行源文件的設(shè)計(jì),這里便涉及到項(xiàng)目的核心。具體的操作步驟如下所述。,4.5.3 編譯項(xiàng)目,項(xiàng)目及源文件建立完畢后便可以編譯項(xiàng)目了。選擇“Project”“Build target”命令,即可編譯,如果程序無誤,則在輸出窗口中顯示編譯結(jié)果,如圖所示。,4.5.4 仿真調(diào)試,項(xiàng)目建立并編譯通過后,在下載到單片機(jī)硬件中之前,一般需要進(jìn)行仿真調(diào)試,確保程序的執(zhí)行完全符合要求。Vison3的集成開發(fā)環(huán)境提供了完善的項(xiàng)目仿真和調(diào)試工具,下面就介紹如何使用Vison3來進(jìn)行項(xiàng)目的仿真調(diào)試。 項(xiàng)目仿真調(diào)試之前需要確保該項(xiàng)目完全通過編譯。仿真調(diào)試的步驟如下所述: (1)選擇“Debug”“Start/Stop Debug Session”命令,此時(shí),Vison3進(jìn)入仿真調(diào)試模式。界面的菜單欄和工具欄都相應(yīng)的進(jìn)行了變化。 (2)使用單步執(zhí)行的方式運(yùn)行程序。每按F11鍵一次,程序執(zhí)行一條指令。用戶可以看到程序執(zhí)行時(shí),單片機(jī)的各個(gè)資源和寄存器值是如何變化的。 (3)當(dāng)程序執(zhí)行完畢的時(shí)候,在寄存器顯示窗口中可以看到程序仿真的結(jié)果,如圖所示。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公務(wù)員崗位競(jìng)爭(zhēng)筆試試題及答案
- 2025年中國手工編織女式上衣數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 山東省青島市2023-2024學(xué)年高二下學(xué)期期中沖刺(三)歷史試題(解析版)
- 城市綠化帶道路施工進(jìn)度管理
- 教育培訓(xùn)供貨保證措施
- 小學(xué)語文五年級(jí)上冊(cè)學(xué)期教學(xué)計(jì)劃
- 小學(xué)四年級(jí)上冊(cè)體操教學(xué)計(jì)劃
- 2025至2030中國氫動(dòng)力汽車行業(yè)經(jīng)營(yíng)決策及應(yīng)用潛力研究報(bào)告
- 大學(xué)生心理健康自測(cè)報(bào)告范文
- 大型活動(dòng)現(xiàn)場(chǎng)的疫情防控措施
- 混凝土組織供應(yīng)運(yùn)輸售后服務(wù)方案
- 文學(xué)經(jīng)典與大眾文化的聯(lián)系與啟迪
- (完整版)混凝土樁鉆芯法檢測(cè)題庫
- 稅務(wù)行政執(zhí)法證據(jù)淺析
- 三軸攪拌樁安全操作規(guī)程
- 上海市中學(xué)藝術(shù)課程標(biāo)準(zhǔn)(征求意見稿)說明
- QCC改善案例(超經(jīng)典)
- LED制程與工藝介紹
- 復(fù)合銅箔項(xiàng)目可行性研究報(bào)告(范文模板)
- 高等學(xué)校體育工作基本標(biāo)準(zhǔn)
- 北京中考語文詞語表
評(píng)論
0/150
提交評(píng)論