單片機及應用_第四章_80C51單片機匯編語言程序設計_第1頁
單片機及應用_第四章_80C51單片機匯編語言程序設計_第2頁
單片機及應用_第四章_80C51單片機匯編語言程序設計_第3頁
單片機及應用_第四章_80C51單片機匯編語言程序設計_第4頁
單片機及應用_第四章_80C51單片機匯編語言程序設計_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第4 4章章 80C51 80C51單片機匯編語言程序設計單片機匯編語言程序設計主要內(nèi)容:主要內(nèi)容:4.1 單片機程序設計語言概述單片機程序設計語言概述4.2 匯編語言程序的基本結(jié)構(gòu)形式匯編語言程序的基本結(jié)構(gòu)形式4.3 80C51 單片機匯編語言程序設計舉例單片機匯編語言程序設計舉例4.4 單片機匯編語言源程序的編輯和匯編單片機匯編語言源程序的編輯和匯編4.5 80C51 單片機匯編語言偽指令單片機匯編語言偽指令4.1 單片機程序設計語言概述單片機程序設計語言概述4.1.1 機器語言和匯編語言機器語言和匯編語言1 1、機器語言、機器語言:直接用二進制代碼指令表達的計算:直接用二進制代碼指令表

2、達的計算機語言。計算機可以直接識別,不需要進行任機語言。計算機可以直接識別,不需要進行任何翻譯。每臺機器的指令,其格式和代碼所代何翻譯。每臺機器的指令,其格式和代碼所代表的含義都是硬性規(guī)定的表的含義都是硬性規(guī)定的 。機器語言是其它各。機器語言是其它各種程序設計語言的基礎,但難記、難用、已出種程序設計語言的基礎,但難記、難用、已出錯。錯。4.1.1 機器語言和匯編語言機器語言和匯編語言2 2、匯編語言:用助記符和專門的語言規(guī)則表示指令的功、匯編語言:用助記符和專門的語言規(guī)則表示指令的功能和特征的面向機器的程序設計語言。能和特征的面向機器的程序設計語言。匯編語言是對匯編語言是對機器語言的改進,比機

3、器語言高級。匯編語言的最大機器語言的改進,比機器語言高級。匯編語言的最大優(yōu)點是助記符與機器指令一一對應。用匯編語言編寫優(yōu)點是助記符與機器指令一一對應。用匯編語言編寫的程序占用存儲空間小,運行速度快,程序效率高。的程序占用存儲空間小,運行速度快,程序效率高。此外,匯編語言能直接管理和控制硬件資源。此外,匯編語言能直接管理和控制硬件資源。n缺點:比高級語言難記憶和使用,程序設計的技巧缺點:比高級語言難記憶和使用,程序設計的技巧性較高,編程難度較大。要求使用者必須精通單片機性較高,編程難度較大。要求使用者必須精通單片機的硬件系統(tǒng)和指令系統(tǒng)。缺乏通用性,程序不易移植。的硬件系統(tǒng)和指令系統(tǒng)。缺乏通用性,

4、程序不易移植。4.1.2 單片機使用的高級語言單片機使用的高級語言n對于對于8051單片機,現(xiàn)有單片機,現(xiàn)有4種語言支持,即匯編、種語言支持,即匯編、PL/M、C和和BASIC。nC語言應用廣泛語言應用廣泛移植性好;移植性好;開發(fā)效率高。開發(fā)效率高。keil c51n高級語言的不足:高級語言的不足:生成的目標代碼較長生成的目標代碼較長;程序運行速度較慢。程序運行速度較慢。 4.1.3 80C51 單片機匯編語言的語句格式單片機匯編語言的語句格式80C5180C51匯編語言的語句格式如下:匯編語言的語句格式如下: : : ; ; 1. 標號標號是語句地址的標志符號,標號的幾點規(guī)定:是語句地址的標

5、志符號,標號的幾點規(guī)定:18個個ASCII字符組成,第一個字符必須是字母。字符組成,第一個字符必須是字母。不能使用本匯編語言已經(jīng)定義的符號作為標號。不能使用本匯編語言已經(jīng)定義的符號作為標號。標號后面必須跟以冒號標號后面必須跟以冒號“:”。同一標號在一個程序中只能定義一次。同一標號在一個程序中只能定義一次。標號可有可無。標號可有可無。4.1.3 80C51 單片機匯編語言的語句格式單片機匯編語言的語句格式2. 操作碼操作碼用于規(guī)定語句執(zhí)行的操作內(nèi)容,用指令助記符表用于規(guī)定語句執(zhí)行的操作內(nèi)容,用指令助記符表示。不能空缺。示。不能空缺。3. 操作數(shù)操作數(shù) 操作數(shù)用于為指令操作提供數(shù)據(jù)??赡苡胁僮鲾?shù)用

6、于為指令操作提供數(shù)據(jù)??赡苡?3個操個操作數(shù),各操作數(shù)之間以逗號分隔。作數(shù),各操作數(shù)之間以逗號分隔。4. 注釋注釋不屬于語句的功能部分,只是對語句的解釋不屬于語句的功能部分,只是對語句的解釋說明,以說明,以“;”開頭。開頭。4.1.3 80C51 單片機匯編語言的語句格式單片機匯編語言的語句格式5. 分界符(分隔符)分界符(分隔符)用于把語句中的各部分隔開,以便于區(qū)分。用于把語句中的各部分隔開,以便于區(qū)分。分界符包括空格、冒號、分號或逗號等符分界符包括空格、冒號、分號或逗號等符號。號。4.2 匯編語言程序的基本結(jié)構(gòu)形式匯編語言程序的基本結(jié)構(gòu)形式n四種基本結(jié)構(gòu)形式:順序程序結(jié)構(gòu)、分支程四種基本結(jié)

7、構(gòu)形式:順序程序結(jié)構(gòu)、分支程序結(jié)構(gòu)、循環(huán)程序結(jié)構(gòu)、子程序。序結(jié)構(gòu)、循環(huán)程序結(jié)構(gòu)、子程序。4.2.1 順序程序結(jié)構(gòu)順序程序結(jié)構(gòu)順序結(jié)構(gòu)程序是最簡單的程序結(jié)構(gòu)。程序既順序結(jié)構(gòu)程序是最簡單的程序結(jié)構(gòu)。程序既無分支、循環(huán),也不調(diào)用子程序,程序執(zhí)行無分支、循環(huán),也不調(diào)用子程序,程序執(zhí)行時一條接一條地按順序執(zhí)行指令。時一條接一條地按順序執(zhí)行指令。例例1 3字節(jié)無符號數(shù)的加法運算。其中被加數(shù)在字節(jié)無符號數(shù)的加法運算。其中被加數(shù)在內(nèi)部內(nèi)部RAM的的50H、51H和和52H單元中;加數(shù)單元中;加數(shù)在內(nèi)部在內(nèi)部RAM的的53H、54H和和55H單元中;要單元中;要求把相加之和存放在求把相加之和存放在50H、51H

8、和和52H單元中,單元中,進位存放在位尋址區(qū)的進位存放在位尋址區(qū)的20H位中。位中。4.2.1 順序程序結(jié)構(gòu)順序程序結(jié)構(gòu)我們一起來編寫程序。我們一起來編寫程序。MOV R0, #52H ;被加數(shù)的低字節(jié)地址被加數(shù)的低字節(jié)地址MOV R1, #55H ;加數(shù)的低字節(jié)地址加數(shù)的低字節(jié)地址MOV A, R0ADD A, R1 ;低字節(jié)相加低字節(jié)相加MOV R0, A ;存低字節(jié)相加結(jié)果存低字節(jié)相加結(jié)果DEC R0DEC R1MOV A, R0ADDC A, R1 ;中間字節(jié)帶進位相加中間字節(jié)帶進位相加MOV R0, A ;存中間字節(jié)相加結(jié)果存中間字節(jié)相加結(jié)果DEC R0DEC R1MOV A, R0

9、ADDC A, R1 ;高字節(jié)帶進位相加高字節(jié)帶進位相加MOV R0, A ;存高字節(jié)相加結(jié)果存高字節(jié)相加結(jié)果MOV 20H, C;存放進位的單元地址存放進位的單元地址4.2.1 順序程序結(jié)構(gòu)順序程序結(jié)構(gòu)分支結(jié)構(gòu)也稱為選擇結(jié)構(gòu)。要分支,就要用條件或變址尋址轉(zhuǎn)分支結(jié)構(gòu)也稱為選擇結(jié)構(gòu)。要分支,就要用條件或變址尋址轉(zhuǎn)移指令,就要有地址標號。分支結(jié)構(gòu)又可分為單分支結(jié)構(gòu)和多分移指令,就要有地址標號。分支結(jié)構(gòu)又可分為單分支結(jié)構(gòu)和多分支結(jié)構(gòu)。支結(jié)構(gòu)。4.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu)1. 1. 單分支程序結(jié)構(gòu)單分支程序結(jié)構(gòu) 單分支程序結(jié)構(gòu)即二中選一,通過條件判斷實現(xiàn),條件成單分支程序結(jié)構(gòu)即二中選一,通過條

10、件判斷實現(xiàn),條件成立一支,條件不成立一支。立一支,條件不成立一支。 例例2 假定在外部假定在外部RAM中有中有ST1、ST2和和ST3三個連續(xù)單元,三個連續(xù)單元,其中其中ST1和和ST2單元中存放著兩個無符號二進制數(shù),試找出其中單元中存放著兩個無符號二進制數(shù),試找出其中的大數(shù)并存入的大數(shù)并存入ST3單元中。單元中。 1. 單分支程序結(jié)構(gòu)單分支程序結(jié)構(gòu)4.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu) MOV DPTR,#ST1;設置數(shù)據(jù)指針設置數(shù)據(jù)指針 MOVX A,DPTR;取第取第1個數(shù)個數(shù) MOV R2, A;第第1個數(shù)存于個數(shù)存于R2 INC DPTR;數(shù)據(jù)指針加數(shù)據(jù)指針加1 MOVX A, DPT

11、R;取第取第2個數(shù)個數(shù) CLR C;進位位清進位位清0 CJNE A, R2, NEXT;兩數(shù)比較兩數(shù)比較 JNC BIGER;若第若第2個數(shù)不小,則轉(zhuǎn)向個數(shù)不小,則轉(zhuǎn)向BIGER XCH A, R2;若第若第1個數(shù)大,則整字節(jié)交換個數(shù)大,則整字節(jié)交換BIGER: INC DPTR MOVX DPTR, A;存大數(shù)存大數(shù)1. 單分支程序結(jié)構(gòu)單分支程序結(jié)構(gòu) 例例3 假定采集的溫度值假定采集的溫度值Ta放在累加器放在累加器A中。此外,中。此外,在內(nèi)部在內(nèi)部RAM 54H單元存放溫度下限值單元存放溫度下限值T54,在,在55H單元存放溫度上限值單元存放溫度上限值T55。若。若TaT55,程序轉(zhuǎn)向程序

12、轉(zhuǎn)向JW(降溫處理程序降溫處理程序);若;若TaT54,則程序轉(zhuǎn)向,則程序轉(zhuǎn)向SW(升溫處理程序升溫處理程序);若;若T55TaT54,則程序轉(zhuǎn)向,則程序轉(zhuǎn)向FH(返回主程序返回主程序)。4.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu)1. 單分支程序結(jié)構(gòu)單分支程序結(jié)構(gòu)TC: CJNE A, 55H, LOOP1 ;若若TaT55,則轉(zhuǎn)向則轉(zhuǎn)向LOOP1 AJMP FH;若若TaT55,則返回則返回LOOP1: JNC JW ;若若(CY)0,表明表明TaT55,轉(zhuǎn)降溫處理程序轉(zhuǎn)降溫處理程序 CJNE A, 54H, LOOP2;若若TaT54,則轉(zhuǎn)向則轉(zhuǎn)向LOOP2 AJMP FH;若若TaT54,則返

13、回則返回LOOP2: JC SW ;若若(CY)1,表明表明TaT54,轉(zhuǎn)升溫處理程序轉(zhuǎn)升溫處理程序FH: RET;若若T55TaT54,則返回主程序則返回主程序4.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu)該例為多重該例為多重單分支結(jié)構(gòu)單分支結(jié)構(gòu),通過一系列條件判斷,進行逐級分支。,通過一系列條件判斷,進行逐級分支。多重單分支結(jié)構(gòu)多使用數(shù)值比較轉(zhuǎn)移指令多重單分支結(jié)構(gòu)多使用數(shù)值比較轉(zhuǎn)移指令CJNE實現(xiàn)。實現(xiàn)。2. 多分支程序結(jié)構(gòu)多分支程序結(jié)構(gòu) 4.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu)2. 多分支程序結(jié)構(gòu)多分支程序結(jié)構(gòu)與多重單分支結(jié)構(gòu)的不同:與多重單分支結(jié)構(gòu)的不同:n多重單分支結(jié)構(gòu)在不同的區(qū)域做不同的事情;多

14、重單分支結(jié)構(gòu)在不同的區(qū)域做不同的事情;多分支結(jié)構(gòu)在不同的點上做不同的事情。多分支結(jié)構(gòu)在不同的點上做不同的事情。n多分支結(jié)構(gòu)多用變址尋址轉(zhuǎn)移指令多分支結(jié)構(gòu)多用變址尋址轉(zhuǎn)移指令“JMP A+DPTR”實現(xiàn),且需要有數(shù)據(jù)表格配合;實現(xiàn),且需要有數(shù)據(jù)表格配合;多重單分支結(jié)構(gòu)多使用數(shù)據(jù)比較轉(zhuǎn)移指令多重單分支結(jié)構(gòu)多使用數(shù)據(jù)比較轉(zhuǎn)移指令CJNE實現(xiàn)。實現(xiàn)。 4.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu)(1)通過地址偏移表實現(xiàn)程序多分支)通過地址偏移表實現(xiàn)程序多分支設分支序號存放在片內(nèi)設分支序號存放在片內(nèi)RAM ADDRi單元中,示例程序如下:單元中,示例程序如下:MOV A, ADDRi;分支序號分支序號i送送AM

15、OV DPTR, #BRTAB;地址表首址送地址表首址送DPTRMOVC A, A+DPTR;取偏移量取偏移量JMP A+DPTR;轉(zhuǎn)相應分支轉(zhuǎn)相應分支BRTAB:DB BR0-BRTAB;地址偏移表地址偏移表DB BR1-BRTABDB BRn-BRTABBR0: ;分支程序;分支程序BR1: BRn: 4.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu) 2. 多分支程序結(jié)構(gòu)多分支程序結(jié)構(gòu)(2)通過轉(zhuǎn)移指令表實現(xiàn)程序多分支)通過轉(zhuǎn)移指令表實現(xiàn)程序多分支MOV A, ADDRiRL A;分支序號值乘以分支序號值乘以2MOV DPTR, #BRTAB ;轉(zhuǎn)移指令表首址轉(zhuǎn)移指令表首址JMP A+DPTRBRTA

16、B:AJMP BR0;轉(zhuǎn)分支程序轉(zhuǎn)分支程序0AJMP BR1;轉(zhuǎn)分支程序轉(zhuǎn)分支程序1 AJMP BR127;轉(zhuǎn)分支程序轉(zhuǎn)分支程序1274.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu) 2. 多分支程序結(jié)構(gòu)多分支程序結(jié)構(gòu)(3)其他實現(xiàn)程序多分支的方法)其他實現(xiàn)程序多分支的方法例例4用用RET指令實現(xiàn)多分支程序指令實現(xiàn)多分支程序MOV DPTR, #BRTAB;分支入口地址表首址分支入口地址表首址MOV A, ADDRiRL A;分支轉(zhuǎn)移值乘以分支轉(zhuǎn)移值乘以2MOV R1, A;暫存到暫存到R1INC AMOVC A, A+DPTR;取低位地址取低位地址PUSH ACC;低位地址入棧低位地址入棧MOV A,

17、R1;恢復恢復A值值MOVC A, A+DPTR;取高位地址取高位地址PUSH ACC;高位地址入棧高位地址入棧RET;分支入口地址裝入分支入口地址裝入PCBRTAB: DW BR0;分支程序入口地址表分支程序入口地址表DW BR1 DW BR1274.2.2 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu) 2. 多分支程序結(jié)構(gòu)多分支程序結(jié)構(gòu)4.2.3 循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)就是重復執(zhí)行某個程序段。匯編語言通常使用減循環(huán)就是重復執(zhí)行某個程序段。匯編語言通常使用減1條件條件轉(zhuǎn)移指令來實現(xiàn)和控制循環(huán)。轉(zhuǎn)移指令來實現(xiàn)和控制循環(huán)。4.2 匯編語言程序的基本結(jié)構(gòu)形式匯編語言程序的基本結(jié)構(gòu)形式前章例前章例18 將內(nèi)部將內(nèi)

18、部RAM從從DATA單元開始的單元開始的10個無符號數(shù)相個無符號數(shù)相加,相加結(jié)果送加,相加結(jié)果送SUM單元保存。單元保存。 MOV R0,#0AH ;設置循環(huán)次數(shù);設置循環(huán)次數(shù) MOV R1,#DATA ;R1作地址指針,指向數(shù)據(jù)塊首作地址指針,指向數(shù)據(jù)塊首地址地址 CLR A ;A清零清零LOOP: ADD A,R1 ;加一個數(shù);加一個數(shù) INC R1 ;修改指針,指向下一個數(shù);修改指針,指向下一個數(shù) DJNZ R0,LOOP ;R0減減1,不為,不為0循環(huán)循環(huán) MOV SUM,A ;存;存10個數(shù)相加的和個數(shù)相加的和4.2.3 循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)n循環(huán)程序由初始化和循環(huán)體兩部分組成。

19、循環(huán)程序由初始化和循環(huán)體兩部分組成。初始化:指針、計數(shù)器和累加器等初始化:指針、計數(shù)器和累加器等循環(huán)體是循環(huán)程序的主體,是反復執(zhí)行的動作。循環(huán)體是循環(huán)程序的主體,是反復執(zhí)行的動作。例例5 通過查找結(jié)束標志(回車符)來統(tǒng)計字符串長度的循通過查找結(jié)束標志(回車符)來統(tǒng)計字符串長度的循環(huán)程序。環(huán)程序。分析:假定字符串存放在內(nèi)部分析:假定字符串存放在內(nèi)部RAM從從40H單元開始的連續(xù)單元開始的連續(xù)存儲單元中。為找到結(jié)束標志,應采用逐個字符依次與回車存儲單元中。為找到結(jié)束標志,應采用逐個字符依次與回車符(符(ASCII碼碼0DH)比較的方法。同時在程序中還應設置一個)比較的方法。同時在程序中還應設置一個

20、字符串指針以順序定位字符,設置一個字符長度計數(shù)器以累字符串指針以順序定位字符,設置一個字符長度計數(shù)器以累計字符個數(shù)。計字符個數(shù)。 MOV R2, #0FFH;設置長度計數(shù)器初值設置長度計數(shù)器初值 MOV R0, #3FH ;設置字符串指針初值設置字符串指針初值LOOP: INC R2 INC R0 CJNE R0, #0DH, LOOP4.2.3 循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)例例6 多字節(jié)無符號數(shù)相加。多字節(jié)無符號數(shù)相加。 4.2.3 循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)分析:設被加數(shù)與加數(shù)分分析:設被加數(shù)與加數(shù)分別在以別在以ADR1與與ADR2為初為初址的片內(nèi)數(shù)據(jù)存儲器區(qū)域址的片內(nèi)數(shù)據(jù)存儲器區(qū)域中中,自低字

21、節(jié)起自低字節(jié)起,由低到高依由低到高依次存放;它們的字節(jié)數(shù)為次存放;它們的字節(jié)數(shù)為L,要求加得的和放回被加數(shù)要求加得的和放回被加數(shù)的單元。流程框圖如右。的單元。流程框圖如右。 MOV R0,#ADR1 MOV R1,#ADR2 MOV R2,#L CLR CLOOP: MOV A,R0;通過;通過R0間址,取得被加數(shù)的一個字節(jié)間址,取得被加數(shù)的一個字節(jié) ADDC A,R1;通過;通過R1間址,取得加數(shù)的一個字間址,取得加數(shù)的一個字 ;節(jié),與被加數(shù)的相應字節(jié)相加;節(jié),與被加數(shù)的相應字節(jié)相加 MOV R0,A ;加得的和通過;加得的和通過R0間址放回原被加數(shù)單元間址放回原被加數(shù)單元INC R0 ;修

22、改指針,指向下一個相加的數(shù);修改指針,指向下一個相加的數(shù)INC R1DJNZ R2,LOOP;循環(huán)實現(xiàn)多字節(jié)數(shù)相加;循環(huán)實現(xiàn)多字節(jié)數(shù)相加4.2.3 循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)4.2.4 子程序結(jié)構(gòu)子程序結(jié)構(gòu)4.2 匯編語言程序的基本結(jié)構(gòu)形式匯編語言程序的基本結(jié)構(gòu)形式前章例前章例3“用查表法把累加器中的十六進指數(shù)用查表法把累加器中的十六進指數(shù)轉(zhuǎn)換為轉(zhuǎn)換為ASCII碼的程序碼的程序”也是按子程序設計的。也是按子程序設計的。HBA: INC AMOVC A, A+PCRET; 十六進制數(shù)十六進制數(shù)ASCII碼表碼表DB 30H, 31H, , 39H, 41H, 42H, , 46H4.2.4 子程序

23、結(jié)構(gòu)子程序結(jié)構(gòu)n子程序的組成:子程序的組成:n程序名:就是標號,位于第一條可執(zhí)行指令前。主程序名:就是標號,位于第一條可執(zhí)行指令前。主程序以該名調(diào)用它。程序以該名調(diào)用它。n程序體:規(guī)定要做的事情。程序體:規(guī)定要做的事情。n返回語句返回語句RET。1.參數(shù):在結(jié)構(gòu)上看不出來,也可以沒有。通過參數(shù)參數(shù):在結(jié)構(gòu)上看不出來,也可以沒有。通過參數(shù)傳送信息。參數(shù)可通過寄存器、存儲單元或堆棧傳傳送信息。參數(shù)可通過寄存器、存儲單元或堆棧傳送。送。4.3 80C51 單片機匯編語言程序設計舉單片機匯編語言程序設計舉例例4.3.1 算術(shù)運算程序算術(shù)運算程序1. 加減法運算加減法運算(1)多個不帶符號的單字節(jié)數(shù)相加

24、)多個不帶符號的單字節(jié)數(shù)相加例例 假設有多個單字節(jié)數(shù),依次存放在外部假設有多個單字節(jié)數(shù),依次存放在外部RAM 21H開始的連續(xù)單元中開始的連續(xù)單元中,要求把計算結(jié)果存放在要求把計算結(jié)果存放在R1和和R2中中(假定假定相加的和不超過相加的和不超過2字節(jié)數(shù))。其中字節(jié)數(shù))。其中R1為高位字節(jié)。為高位字節(jié)。MOV DPTR, #21H;設置數(shù)據(jù)指針設置數(shù)據(jù)指針MOV R3, #N;字節(jié)個數(shù)字節(jié)個數(shù)MOV R1, #00H;和的高位字節(jié)清和的高位字節(jié)清0MOV R2, #00H;和的低位字節(jié)清和的低位字節(jié)清0LOOP:MOVX A, DPTR;取一個加數(shù)取一個加數(shù)ADD A, R2;單字節(jié)數(shù)相加單字節(jié)

25、數(shù)相加MOV R2, A;和的低和的低8位送位送R2JNC LOOP1INC R1 ;有進位,則和的高有進位,則和的高8位加位加1LOOP1:INC R0 ;指向下一個單元指向下一個單元DJNZ R3, LOOP 4.3.1 算術(shù)運算程序算術(shù)運算程序 1. 加減法運算加減法運算(2)兩個不帶符號的多字節(jié)數(shù)相減)兩個不帶符號的多字節(jié)數(shù)相減例例 設有兩個設有兩個N字節(jié)數(shù)分別存放在內(nèi)部字節(jié)數(shù)分別存放在內(nèi)部RAM單單元中,低字節(jié)在前,高字節(jié)在后,分別由元中,低字節(jié)在前,高字節(jié)在后,分別由R0指定被指定被減數(shù)單元地址,由減數(shù)單元地址,由R1指定減數(shù)單元地址,其差存放指定減數(shù)單元地址,其差存放在原被減數(shù)單

26、元中。在原被減數(shù)單元中。 4.3.1 算術(shù)運算程序算術(shù)運算程序 1. 加減法運算加減法運算MSUB:CLR C;清進位位清進位位MOV R2, #N;設定字節(jié)數(shù)設定字節(jié)數(shù)LOOP:MOV A, R0 ;從低字節(jié)開始逐個取被減數(shù)字節(jié)從低字節(jié)開始逐個取被減數(shù)字節(jié)SUBB A, R1;兩數(shù)相減兩數(shù)相減MOV R0, A;存字節(jié)相減的差存字節(jié)相減的差I(lǐng)NC R0INC R1DJNZ R2, LOOP ;減法是否完成減法是否完成RET2. 乘法運算乘法運算 4.3.1 算術(shù)運算程序算術(shù)運算程序例例9 假定要進行兩個雙字節(jié)無符號數(shù)的乘法運算,被乘數(shù)假定要進行兩個雙字節(jié)無符號數(shù)的乘法運算,被乘數(shù)和乘數(shù)分別存

27、放于寄存器和乘數(shù)分別存放于寄存器R2、R3和和R6、R7中中(其中其中R2和和R6分別為高位字節(jié)分別為高位字節(jié)),相乘的結(jié)果,相乘的結(jié)果(積積)依次存放在依次存放在R4、R5、R6、R7單元中。試編寫程序?qū)崿F(xiàn)該乘法運算。單元中。試編寫程序?qū)崿F(xiàn)該乘法運算。分析:因為乘數(shù)和被乘數(shù)各為分析:因為乘數(shù)和被乘數(shù)各為2字節(jié),因此,必須進行字節(jié),因此,必須進行4次次乘法運算,得到乘法運算,得到4次部分乘積。部分積的高字節(jié)用次部分乘積。部分積的高字節(jié)用H標識,部分標識,部分積低字節(jié)用積低字節(jié)用L標識。此外,還要處理部分積相加產(chǎn)生的進位。標識。此外,還要處理部分積相加產(chǎn)生的進位。其豎式運算如下頁示意圖。其豎式運

28、算如下頁示意圖。兩個雙字節(jié)無符號數(shù)乘法示意圖兩個雙字節(jié)無符號數(shù)乘法示意圖DBMUL:MOV A, R3MOV B, R7MUL AB ;R3R7(得第得第1次部分積次部分積)XCH A, R7 ;原原R7內(nèi)容送內(nèi)容送A, R7R3R7LMOV R5, B ;R5R3R7HMOV B, R2MUL AB ;R2R7(得第得第2次部分積次部分積)ADD A, R5 ;R2R7L+R3R7HMOV R4, A ;R4和和CLR AADDC A, B ;R2R7H+(R2R7L+R5時產(chǎn)生的進位時產(chǎn)生的進位)MOV R5, A ;R5和和MOV A, R6MOV B, R3MUL AB ;R3R6(得

29、第得第3次部分積次部分積)ADD A, R4 ;R3R6L+R4XCH A, R6;AR6,R6R3R6L+R4(在在R6中得到乘積的中得到乘積的;第第3字節(jié)字節(jié))XCH A, B;AR3R6H,BR6ADDC A, R5 ;R3R6H+R5+(R3R6L+R4時產(chǎn)生的進位)時產(chǎn)生的進位)MOV R5, A;R5和和MOV F0, C;F0進位進位MOV A, R2MUL AB;R2R6(得第得第4次部分積次部分積)ADD A, R5;R2R6L+R5MOV R5, A;在在R5中得到乘積的第中得到乘積的第2字節(jié)字節(jié)CLR AMOV ACC.0, C;累加器最高位累加器最高位進位進位MOV C

30、, F0ADDC A, B;R2R6H+F0+ACC.0MOV R4, A;在在R4中得到乘積的第中得到乘積的第1字節(jié)字節(jié)RET4.3.1 算術(shù)運算程序算術(shù)運算程序例例10 試編寫程序?qū)崿F(xiàn)雙字節(jié)無符號的數(shù)除法運算。試編寫程序?qū)崿F(xiàn)雙字節(jié)無符號的數(shù)除法運算。3. 除法運算除法運算按主程序設計:按主程序設計:輸入?yún)?shù):輸入?yún)?shù):R7R6:被除數(shù),:被除數(shù),R5R4:除數(shù);:除數(shù);輸出參數(shù):輸出參數(shù):R7R6:商,:商,R5R4:余數(shù),:余數(shù), F0:溢出標志:溢出標志(1:溢出,溢出,0:未溢出未溢出)。4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算算法分析:算法分析: 能否象乘法那樣利

31、用單字節(jié)除法指令能否象乘法那樣利用單字節(jié)除法指令DIV AB來實現(xiàn)來實現(xiàn)2字節(jié)數(shù)的除字節(jié)數(shù)的除法呢?不能。只能用豎式計算,一位一位地計算,如下圖。法呢?不能。只能用豎式計算,一位一位地計算,如下圖。4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算算法分析:算法分析: 字節(jié)除法運算是按位進行的。個字節(jié),字節(jié)除法運算是按位進行的。個字節(jié),16個二進個二進制位,要試商制位,要試商16次,做次,做16次減法、次減法、16次移位。如果次移位。如果用循環(huán)程序?qū)崿F(xiàn),要循環(huán)用循環(huán)程序?qū)崿F(xiàn),要循環(huán)16次,每循環(huán)次,做次次,每循環(huán)次,做次試商、試商、1次減法、次減法、1次移位。我們把循環(huán)次數(shù)存放在次移位

32、。我們把循環(huán)次數(shù)存放在R1中。中。4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算算法分析:算法分析: 豎式運算,減數(shù)右移位。計算機中,減數(shù)不動,豎式運算,減數(shù)右移位。計算機中,減數(shù)不動,余數(shù)左移位余數(shù)左移位(為什么?)(為什么?)。我們把余數(shù)存放在。我們把余數(shù)存放在R3R2中中(為什么不能直接存放在(為什么不能直接存放在R5R4中?)中?) 。4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算 首次試商在最高位,前面需補首次試商在最高位,前面需補15個。如果把余數(shù)個。如果把余數(shù)R3R2初始化為,初始化為,把余數(shù)和被除數(shù)把余數(shù)和被除數(shù)R3R2R7R6一起左移一位,再進行試商,

33、做減法,正好可一起左移一位,再進行試商,做減法,正好可以通過以通過R3R2R5R4實現(xiàn)。夠減,商;不夠減,商。商,余數(shù)實現(xiàn)。夠減,商;不夠減,商。商,余數(shù)R3R2不變;商,余數(shù)不變;商,余數(shù)R3R2為相減之差。商放在哪里呢?移位后,被除為相減之差。商放在哪里呢?移位后,被除數(shù)數(shù)R7R6的最低位不再有意義,商可以放在這位。的最低位不再有意義,商可以放在這位。 這樣,移位、余數(shù)減除數(shù)、修改余數(shù)、存放商,循環(huán)這樣,移位、余數(shù)減除數(shù)、修改余數(shù)、存放商,循環(huán)16次,除法完成,次,除法完成,被除數(shù)已全部移到余數(shù)被除數(shù)已全部移到余數(shù)R3R2中,并逐次被減得到最終余數(shù),被除數(shù)中,并逐次被減得到最終余數(shù),被除數(shù)

34、R7R6已被已被16位商所代替。位商所代替。算法分析:算法分析:4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算算法分析:算法分析:除法運算需要對被除數(shù)和除數(shù)進行判定:若除數(shù)為除法運算需要對被除數(shù)和除數(shù)進行判定:若除數(shù)為0,則除法無法進行,置標志位則除法無法進行,置標志位F0為。為。 若被除數(shù)為若被除數(shù)為0,除數(shù)不為除數(shù)不為0,則商為,則商為0,立即結(jié)束。,立即結(jié)束。下頁給出字節(jié)數(shù)除法運算的流程圖。下頁給出字節(jié)數(shù)除法運算的流程圖。 4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算TB_DIV: CLR F0;清溢出標志單元清溢出標志單元MOV A, R5JNZ ZERO ;

35、若除數(shù)不為若除數(shù)不為0,則跳轉(zhuǎn),則跳轉(zhuǎn)MOV A, R4JNZ ZERO ;若除數(shù)不為若除數(shù)不為0,則跳轉(zhuǎn),則跳轉(zhuǎn)SETB F0 ;除數(shù)為除數(shù)為0,設置溢出標志,設置溢出標志RETZERO: MOV A, R7JNZ START;若被除數(shù)高字節(jié)不為若被除數(shù)高字節(jié)不為0,則開始除法運算,則開始除法運算MOV A, R6JNZ START;若被除數(shù)低字節(jié)不為若被除數(shù)低字節(jié)不為0,則開始除法運算,則開始除法運算MOV R4, #0 ;若被除數(shù)為若被除數(shù)為0,余數(shù)清,余數(shù)清0 MOV R5, #0RET; 結(jié)束,返回結(jié)束,返回START:CLR A;開始除法運算開始除法運算MOV R2, A;余數(shù)單元

36、清余數(shù)單元清0MOV R3, AMOV R1, #10HLOOP:CLR C;進行一位除法運算進行一位除法運算MOV A, R6RLC A;被除數(shù)左移一位被除數(shù)左移一位MOV R6, AMOV A, R7RLC AMOV R7, AMOV A, R2;移出的被除數(shù)高位送余數(shù)單元移出的被除數(shù)高位送余數(shù)單元RLC AMOV R2, AMOV A, R3RLC AMOV R3, AMOV A, R2 ;余數(shù)減除數(shù)余數(shù)減除數(shù),低位先減低位先減SUBB A, R4MOV R0, A ;保存低位相減結(jié)果保存低位相減結(jié)果MOV A, R3 ;再減高位再減高位SUBB A, R5JC NEXT ;若不夠減,則

37、轉(zhuǎn)移若不夠減,則轉(zhuǎn)移INC R6 ;若夠減,則商為若夠減,則商為1MOV R3, A ;相減結(jié)果送回余數(shù)單元相減結(jié)果送回余數(shù)單元MOV A, R0MOV R2, ANEXT:DJNZ R1, LOOP;不夠不夠16次,繼續(xù)次,繼續(xù)MOV A, R3; 余數(shù)送輸出寄存器余數(shù)送輸出寄存器R5R4MOV R5, AMOV A, R2MOV R4, ARET4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算 匯編應用除法運算比較復雜,程序比較長。我們匯編應用除法運算比較復雜,程序比較長。我們可以把其中的移位和試商(即余數(shù)減除數(shù)、修改余數(shù)、可以把其中的移位和試商(即余數(shù)減除數(shù)、修改余數(shù)、存放商)

38、分別編寫成子程序,而在除法程序中進行調(diào)存放商)分別編寫成子程序,而在除法程序中進行調(diào)用。用。4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算n移位子程序移位子程序SHIFTL:輸入?yún)?shù):輸入?yún)?shù):R3R2R7R6:4字節(jié)無符號數(shù);字節(jié)無符號數(shù);輸出參數(shù):輸出參數(shù):R3R2R7R6:4字節(jié)無符號數(shù)。字節(jié)無符號數(shù)。SHIFTL: CLR CMOV A, R6RLC AMOV R6, AMOV A, R7RLC AMOV R7, AMOV A, R2RLC AMOV R2, AMOV A, R3RLC AMOV R3, ARET4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算n試

39、商子程序試商子程序RES1BIT:輸入?yún)?shù):輸入?yún)?shù):R5R4:除數(shù),:除數(shù), R3R2:余數(shù),:余數(shù), CY, R60:0 ;輸出參數(shù):輸出參數(shù):R3R2:余數(shù),:余數(shù), R60:一位商。:一位商。4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算RES1BIT:MOV A, R2 ;余數(shù)減除數(shù)余數(shù)減除數(shù),低位先減低位先減SUBB A, R4MOV R0, A ;保存低位相減結(jié)果保存低位相減結(jié)果MOV A, R3 ;再減高位再減高位SUBB A, R5JC SHANG0 ;若不夠減,商若不夠減,商0,返回,返回INC R6 ;若夠減,則商為若夠減,則商為1MOV R3, A ;相減結(jié)

40、果送回余數(shù)單元相減結(jié)果送回余數(shù)單元MOV A, R0MOV R2, ASHANG0:RET4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算n原除法程序改寫為原除法程序改寫為TB_DIV: CLR F0;清溢出標志單元清溢出標志單元MOV A, R5JNZ ZERO ;若除數(shù)不為若除數(shù)不為0,則跳轉(zhuǎn),則跳轉(zhuǎn)MOV A, R4JNZ ZERO ;若除數(shù)不為若除數(shù)不為0,則跳轉(zhuǎn),則跳轉(zhuǎn)SETB F0 ;除數(shù)為除數(shù)為0,設置溢出標志,設置溢出標志RETZERO: MOV A, R7JNZ START;若被除數(shù)高字節(jié)不為若被除數(shù)高字節(jié)不為0,則開始除法運算,則開始除法運算MOV A, R6JN

41、Z START;若被除數(shù)低字節(jié)不為若被除數(shù)低字節(jié)不為0,則開始除法運算,則開始除法運算MOV R4, #0 ;若被除數(shù)為若被除數(shù)為0,余數(shù)清,余數(shù)清0 MOV R5, #0RET; 結(jié)束,返回結(jié)束,返回4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算START: CLR A;開始除法運算開始除法運算MOV R2, A;余數(shù)單元清余數(shù)單元清0MOV R3, AMOV R1, #10HLOOP: ACALL SHIFTL ACALL RES1BITNEXT:DJNZ R1, LOOP;不夠不夠16次,繼續(xù)次,繼續(xù)MOV A, R3; 余數(shù)送輸出寄存器余數(shù)送輸出寄存器R5R4MOV R5,

42、 AMOV A, R2MOV R4, ARET4.3.1 算術(shù)運算程序算術(shù)運算程序3. 除法運算除法運算n任務:試編寫一個任務:試編寫一個4字節(jié)無符號數(shù)的字節(jié)無符號數(shù)的除法程序。除法程序。4.3.2 定時程序定時程序在單片機的控制應用中經(jīng)常有定時的需要,例如在單片機的控制應用中經(jīng)常有定時的需要,例如定時檢測和定時掃描等。定時功能除可使用定時器定時檢測和定時掃描等。定時功能除可使用定時器/計數(shù)器外,還可以使用程序?qū)崿F(xiàn)。計數(shù)器外,還可以使用程序?qū)崿F(xiàn)。4.3 80C51 單片機匯編語言程序設計舉例單片機匯編語言程序設計舉例 單循環(huán)定時程序單循環(huán)定時程序MOV R5, #TIMELOOP: NOP N

43、OP DJNZ R5, LOOP4.3.2 定時程序定時程序 單循環(huán)定時程序單循環(huán)定時程序n NOP指令的機器周期為指令的機器周期為1,DJNZ指令的機器周期為指令的機器周期為2,則,則一次循環(huán)共一次循環(huán)共4個機器周期。若單片機的晶振頻率為個機器周期。若單片機的晶振頻率為6 MHz,則一個機器周期是則一個機器周期是2 s,因此,一次循環(huán)的延遲時間為,因此,一次循環(huán)的延遲時間為8 s。定時程序的總延遲時間是循環(huán)程序段延時時間的整。定時程序的總延遲時間是循環(huán)程序段延時時間的整數(shù)倍,故該程序的延遲時間為數(shù)倍,故該程序的延遲時間為8TIME(s)。)。TIME是是裝入寄存器裝入寄存器R5的時間常數(shù),的

44、時間常數(shù),R5是是8位寄存器,因此,這位寄存器,因此,這個程序的最長定時時間(不計個程序的最長定時時間(不計“MOV R5, #TIME”指令)指令)為:為:2568 s2 048 s。4.3 80C51 單片機匯編語言程序設計舉例單片機匯編語言程序設計舉例2. 較長時間的定時程序較長時間的定時程序n單循環(huán)定時程序的時間延遲比較小。要加長定時時單循環(huán)定時程序的時間延遲比較小。要加長定時時間,可以采用多重循環(huán)程序。間,可以采用多重循環(huán)程序。4.3.2 定時程序定時程序 MOV R5, #TIME1LOOP2: MOV R4, #TIME2LOOP1: NOP NOP DJNZ R4, LOOP1

45、 DJNZ R5, LOOP2 RET本程序的最大定時時間及計算公式為:本程序的最大定時時間及計算公式為:(2564 s2 s+1 s)256 s525 828 s3. 定時程序的時間調(diào)整定時程序的時間調(diào)整n 在定時程序中可通過增減在定時程序中可通過增減指令的方法對定時時間進指令的方法對定時時間進行微調(diào)。譬如右邊的程序,行微調(diào)。譬如右邊的程序,在在6 MHz晶振頻率下的定晶振頻率下的定時時間為時時間為10TIME(s)。如果要求定時時間為如果要求定時時間為24 s,無論,無論TIME取何值均取何值均得不到要求的定時時間。得不到要求的定時時間。MOV R0, #TIMELOOP: NOPNOPN

46、OPDJNZ R0, LOOP4.3.2 定時程序定時程序3. 定時程序的時間調(diào)整定時程序的時間調(diào)整n 對此可通過在循環(huán)體內(nèi)對此可通過在循環(huán)體內(nèi)增加一條增加一條NOP指令(見指令(見右邊調(diào)整后的程序)的右邊調(diào)整后的程序)的方法,把循環(huán)程序段的方法,把循環(huán)程序段的機器周期數(shù)增加到機器周期數(shù)增加到6。這時只要這時只要TIME取值為取值為2,就可以得到精確的就可以得到精確的24 s定時了。定時了。調(diào)整后的程序:調(diào)整后的程序:MOV R0, #TIMELOOP: NOPNOPNOPNOPDJNZ R0, LOOP4.3.2 定時程序定時程序4. 通過一個基本延時程序產(chǎn)生不同的定時通過一個基本延時程序產(chǎn)

47、生不同的定時例如,要求的定時時間分別為例如,要求的定時時間分別為5 s、10 s和和20 s,已有一,已有一個個1 s的基本延時程序的基本延時程序DELAY,則不同定時的調(diào)用情況如下。,則不同定時的調(diào)用情況如下。4.3.2 定時程序定時程序MOV R0, #05H;5 s延時延時LOOP1:LCALL DELAYDJNZ R0, LOOP1MOV R0, #0AH;10 s延時延時LOOP2:LCALL DELAYDJNZ R0, LOOP2MOV R0, #14H;20 s延時延時LOOP3:LCALL DELAYDJNZ R0, LOOP34.3.3 查表程序查表程序1. 查表指令查表指令

48、按順序讀出存儲器中的數(shù)據(jù)稱為查表。按順序讀出存儲器中的數(shù)據(jù)稱為查表。80C51指令系統(tǒng)中有兩條專用的查表指令:指令系統(tǒng)中有兩條專用的查表指令:MOVC A, A+DPTRMOVC A, A+PC這兩條這兩條MOVC指令在指令系統(tǒng)中稱為指令在指令系統(tǒng)中稱為“程序存儲器讀指令程序存儲器讀指令”。它們的功能完全相同,使用時先確定好它們的功能完全相同,使用時先確定好PC或或DPTR的內(nèi)容,然后只的內(nèi)容,然后只需有規(guī)律地改變需有規(guī)律地改變A的內(nèi)容,就可以從程序存儲器中讀出表格數(shù)據(jù)。的內(nèi)容,就可以從程序存儲器中讀出表格數(shù)據(jù)。4.3 80C51 單片機匯編語言程序設計舉例單片機匯編語言程序設計舉例2. 查表

49、程序舉例查表程序舉例n假定有假定有44鍵盤,鍵掃描后把被按鍵的鍵碼放在累加器鍵盤,鍵掃描后把被按鍵的鍵碼放在累加器A中,中,鍵碼值與鍵處理子程序入口地址的對應關(guān)系為:鍵碼值與鍵處理子程序入口地址的對應關(guān)系為:鍵碼值鍵碼值入口地址入口地址 0 RK0 1 RK1 2 RK2 n假定鍵處理子程序在假定鍵處理子程序在ROM 64 KB的范圍內(nèi)分布。要求以查表方的范圍內(nèi)分布。要求以查表方法,按鍵碼值轉(zhuǎn)向?qū)逆I處理子程序。法,按鍵碼值轉(zhuǎn)向?qū)逆I處理子程序。4.3.3 查表程序查表程序我們用轉(zhuǎn)移指令表來實現(xiàn)鍵處理子程序。我們用轉(zhuǎn)移指令表來實現(xiàn)鍵處理子程序。4.3.3 查表程序查表程序KEYPROC:M

50、OV DPTR, #BS;轉(zhuǎn)移指令表首址送轉(zhuǎn)移指令表首址送DPTRMOV R2, A; A*3RL AADD A, R2JMP A+DPTRBS:LJMP RK0LJMP RK1LJMP RK2編輯:編寫和修改程序的過程。編輯:編寫和修改程序的過程。匯編語言源程序:用匯編語言編寫的程序稱為匯編語匯編語言源程序:用匯編語言編寫的程序稱為匯編語言源程序。言源程序。匯編:匯編語言源程序不能在單片機中直接執(zhí)行,必匯編:匯編語言源程序不能在單片機中直接執(zhí)行,必須將其須將其“翻譯翻譯”為用二進制代碼為用二進制代碼(機器語言機器語言)表示的目標程表示的目標程序才能執(zhí)行。這個序才能執(zhí)行。這個“翻譯翻譯”過程稱

51、為匯編。過程稱為匯編。 4.4 單片機匯編語言源程序的編輯和匯編單片機匯編語言源程序的編輯和匯編4.4.1 手工編程與匯編手工編程與匯編手工編程:用筆和紙手工編寫和修改程序的手工編程:用筆和紙手工編寫和修改程序的過程。過程。手工匯編:把匯編語言源程序用手工方法逐手工匯編:把匯編語言源程序用手工方法逐條條 “翻譯翻譯”成機器代碼的過程。手工匯編通常成機器代碼的過程。手工匯編通常通過查表的方法進行通過查表的方法進行“翻譯翻譯”。4.4 單片機匯編語言源程序的編輯和匯編單片機匯編語言源程序的編輯和匯編4.4.2 機器編輯與交叉匯編機器編輯與交叉匯編機器編輯:是指借助于微型機或開發(fā)系統(tǒng)進行單片機器編輯

52、:是指借助于微型機或開發(fā)系統(tǒng)進行單片機的程序設計,通常都是使用編輯軟件進行源程序的編機的程序設計,通常都是使用編輯軟件進行源程序的編輯。編輯完成后,生成一個由匯編指令和偽指令構(gòu)成的輯。編輯完成后,生成一個由匯編指令和偽指令構(gòu)成的擴展名為擴展名為“.ASM”的的ASCII碼文件。碼文件。匯編器:也叫匯編程序,是把匯編語言源程序翻譯匯編器:也叫匯編程序,是把匯編語言源程序翻譯成機器語言目標代碼程序的軟件。成機器語言目標代碼程序的軟件。交叉匯編:是指使用一種計算機的匯編程序為另一交叉匯編:是指使用一種計算機的匯編程序為另一種計算機的源程序進行匯編,即運行匯編程序進行匯編種計算機的源程序進行匯編,即運行匯編程序進行匯編的是一種計算機,而匯編得到的目標程序是另一種計算的是一種計算機,而匯編得到的目標程序是另一種計算機的。機的。4.4 單片機匯編語言源程序的編輯和匯編單片機匯編語言源程序的編輯和匯編4.4.2 機器編輯與交叉匯編機器編輯與交叉匯編一般來說,我們在微型機或開發(fā)系統(tǒng)上采用交叉匯編一般來說,我們在微型機或開發(fā)系統(tǒng)上采用交叉匯編方法對源程序進行匯編。之后,通過串口和串行通信,方法對源程序進行匯編。之后,通過串口和串行通信

溫馨提示

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

評論

0/150

提交評論