第四章 匯編程序設(shè)計(jì)_第1頁
第四章 匯編程序設(shè)計(jì)_第2頁
第四章 匯編程序設(shè)計(jì)_第3頁
第四章 匯編程序設(shè)計(jì)_第4頁
第四章 匯編程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第四章第四章 MCS-51MCS-51匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)24 . 1 程序設(shè)計(jì)概述程序設(shè)計(jì)概述4. 1 . 1 計(jì)算機(jī)語言計(jì)算機(jī)語言機(jī)器語言:機(jī)器語言:在計(jì)算機(jī)中,所有的數(shù)符都是用二進(jìn)制代在計(jì)算機(jī)中,所有的數(shù)符都是用二進(jìn)制代碼來表示,指令也是用二進(jìn)制代碼來表示,這種用二進(jìn)制碼來表示,指令也是用二進(jìn)制代碼來表示,這種用二進(jìn)制代碼表示的指令系統(tǒng)稱為機(jī)器語言系統(tǒng)。計(jì)算機(jī)能識(shí)別機(jī)代碼表示的指令系統(tǒng)稱為機(jī)器語言系統(tǒng)。計(jì)算機(jī)能識(shí)別機(jī)器語言,但使用者不易看懂,不便記憶,容易出錯(cuò)。器語言,但使用者不易看懂,不便記憶,容易出錯(cuò)。匯編語言:匯編語言:用指令助記符表示指令系統(tǒng)的語言稱為匯用指令助記符

2、表示指令系統(tǒng)的語言稱為匯編語言。匯編語言要比機(jī)器語言前進(jìn)了一大步,它醒目、編語言。匯編語言要比機(jī)器語言前進(jìn)了一大步,它醒目、易懂、不易出錯(cuò),即使出錯(cuò),也容易發(fā)現(xiàn)和修改,因此,易懂、不易出錯(cuò),即使出錯(cuò),也容易發(fā)現(xiàn)和修改,因此,它是微型算計(jì)機(jī)所使用的主要語言之一。它是微型算計(jì)機(jī)所使用的主要語言之一。 3 將匯編語言將匯編語言源程序源程序轉(zhuǎn)換成機(jī)器語言計(jì)算機(jī)才能識(shí)別和轉(zhuǎn)換成機(jī)器語言計(jì)算機(jī)才能識(shí)別和執(zhí)行,這一轉(zhuǎn)換工作稱為執(zhí)行,這一轉(zhuǎn)換工作稱為“ 匯編匯編 ”。經(jīng)匯編后的機(jī)器語言。經(jīng)匯編后的機(jī)器語言稱稱為為目標(biāo)程序目標(biāo)程序。但是,匯編語言和機(jī)器語言一樣,都脫離不。但是,匯編語言和機(jī)器語言一樣,都脫離不開

3、具體的機(jī)器,因此這兩種語言均為開具體的機(jī)器,因此這兩種語言均為“面向機(jī)器面向機(jī)器”的語言。的語言。高級(jí)語言:高級(jí)語言:高級(jí)語言都是參照數(shù)學(xué)語言而設(shè)計(jì)的,近高級(jí)語言都是參照數(shù)學(xué)語言而設(shè)計(jì)的,近似于人們?nèi)粘S谜Z的語言,不僅直觀,易學(xué)、易懂,而且似于人們?nèi)粘S谜Z的語言,不僅直觀,易學(xué)、易懂,而且通用性強(qiáng),易于移植到不同類型的機(jī)器中去,是一種面向通用性強(qiáng),易于移植到不同類型的機(jī)器中去,是一種面向?qū)ο蠡蛘呙嫦蜻^程的語言。如對(duì)象或者面向過程的語言。如VB,VC,PASCAL等。等。44. 1. 2 匯編語言語句的種類和格式匯編語言語句的種類和格式1. 匯編語言語句的種類匯編語言語句的種類 匯編語言語句有三

4、種基本類型:匯編語言語句有三種基本類型:指令語句、偽指令語句指令語句、偽指令語句 和和宏指令語句宏指令語句。指令語句:指令語句:每一個(gè)指令語句都在匯編時(shí)產(chǎn)生一個(gè)目標(biāo)代碼,每一個(gè)指令語句都在匯編時(shí)產(chǎn)生一個(gè)目標(biāo)代碼,對(duì)應(yīng)著機(jī)器的一種操作。對(duì)應(yīng)著機(jī)器的一種操作。 例如:例如:MOV A,#0 偽指令語句:偽指令語句:主要是為匯編語言服務(wù)的,在匯編時(shí)沒有目標(biāo)主要是為匯編語言服務(wù)的,在匯編時(shí)沒有目標(biāo)代碼與之對(duì)應(yīng)。代碼與之對(duì)應(yīng)。 例如:例如:ONE EQU 1宏指令語句:宏指令語句:用以代替匯編語言源程序中重復(fù)使用的程序段用以代替匯編語言源程序中重復(fù)使用的程序段的一種語句由匯編程序在匯編時(shí)產(chǎn)生相應(yīng)的目標(biāo)代

5、碼。的一種語句由匯編程序在匯編時(shí)產(chǎn)生相應(yīng)的目標(biāo)代碼。52. 匯編語言語句的格式匯編語言語句的格式指令語句的格式為:指令語句的格式為: 標(biāo)號(hào)標(biāo)號(hào)(名字名字): 助記符助記符(操作碼操作碼) 操作數(shù)操作數(shù)(參數(shù)參數(shù)) ; 注釋注釋偽指令語句的格式:偽指令語句的格式: 名字名字 定義符定義符 參數(shù)參數(shù) ;注釋;注釋 兩種語句都由四個(gè)部分組成,其中每一部分稱為域也稱兩種語句都由四個(gè)部分組成,其中每一部分稱為域也稱為字段。偽指令語句與指令語句主要不同是在其名字后面為字段。偽指令語句與指令語句主要不同是在其名字后面沒沒有冒號(hào)有冒號(hào)。6 為了便于編程和對(duì)匯編語言程序進(jìn)行匯編,各種匯編程為了便于編程和對(duì)匯編語

6、言程序進(jìn)行匯編,各種匯編程序都提供一些特殊的指令,供人們編程使用。這些指令通常序都提供一些特殊的指令,供人們編程使用。這些指令通常稱為偽指令稱為偽指令 ?!皞蝹巍斌w現(xiàn)在匯編時(shí)不產(chǎn)生機(jī)器指令代碼,不體現(xiàn)在匯編時(shí)不產(chǎn)生機(jī)器指令代碼,不影影響程序的執(zhí)行,僅指明在匯編時(shí)響程序的執(zhí)行,僅指明在匯編時(shí) 執(zhí)行一些特殊的操作。執(zhí)行一些特殊的操作。 例如,為程序指定一個(gè)存儲(chǔ)區(qū),說明源程序結(jié)束等。不例如,為程序指定一個(gè)存儲(chǔ)區(qū),說明源程序結(jié)束等。不同的單片機(jī)開發(fā)裝置所定義的偽指令不全相同,下面簡單介同的單片機(jī)開發(fā)裝置所定義的偽指令不全相同,下面簡單介紹一下紹一下MASM51匯編程序中常用的幾類偽指令語句。匯編程序中

7、常用的幾類偽指令語句。4.1.3 4.1.3 偽指令語句偽指令語句7( 1 ) 標(biāo)號(hào)定義偽指令(標(biāo)號(hào)定義偽指令(2 條)條) 等值偽指令等值偽指令 (EQU) 指令格式為:指令格式為: EQU 其含義是標(biāo)號(hào)等值于表達(dá)式,這里的標(biāo)號(hào)和表達(dá)式是必其含義是標(biāo)號(hào)等值于表達(dá)式,這里的標(biāo)號(hào)和表達(dá)式是必不可少的。不可少的。例如:例如: START EQU 1080H ;表明標(biāo)號(hào)表明標(biāo)號(hào)START 的值為的值為1080H。LOOPl EQU START ; 如果如果START 已賦值為已賦值為1080H, 則相當(dāng)于則相當(dāng)于LOOPl START ,即,即LOOPl 也為也為1080H,在,在程序中程序中STA

8、RT 和和LOOPl 可以互換使用??梢曰Q使用。8 定義標(biāo)號(hào)值偽指令定義標(biāo)號(hào)值偽指令 (DL)指令格式為:指令格式為: DL 其含義也是說明標(biāo)號(hào)等值于表達(dá)式。同樣,標(biāo)號(hào)和表其含義也是說明標(biāo)號(hào)等值于表達(dá)式。同樣,標(biāo)號(hào)和表達(dá)式是必不可少。達(dá)式是必不可少。例如:例如: COUNT DL 2300H ;定義標(biāo)號(hào)定義標(biāo)號(hào)COUNT的值為的值為2300H COUNT DL COUNT+1 ;重新定義重新定義COUNT的值為的值為 2300H+1 DL和和EQU的功能都是將表達(dá)式值賦予標(biāo)號(hào),但兩者有的功能都是將表達(dá)式值賦予標(biāo)號(hào),但兩者有差別:可用差別:可用DL語句更改已定義的標(biāo)號(hào)值;而用語句更改已定義的標(biāo)

9、號(hào)值;而用EQU語句定語句定義的標(biāo)號(hào),在整個(gè)源程序中不能更改。若要更改,需用偽義的標(biāo)號(hào),在整個(gè)源程序中不能更改。若要更改,需用偽指令指令DL重新定義。重新定義。 9( 2 ) 數(shù)據(jù)說明偽指令數(shù)據(jù)說明偽指令 (5 條)條) 定義字節(jié)偽指令定義字節(jié)偽指令 指令格式為:指令格式為:() DB 其含義是將表達(dá)式或表達(dá)式表所表示的數(shù)據(jù)其含義是將表達(dá)式或表達(dá)式表所表示的數(shù)據(jù)或數(shù)據(jù)串存入從標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元中,標(biāo)或數(shù)據(jù)串存入從標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元中,標(biāo)號(hào)為可選項(xiàng),它表示數(shù)據(jù)存儲(chǔ)單元地址。表達(dá)式號(hào)為可選項(xiàng),它表示數(shù)據(jù)存儲(chǔ)單元地址。表達(dá)式或表達(dá)式表是指一個(gè)字節(jié)或用逗號(hào)分開的字節(jié)數(shù)或表達(dá)式表是指一個(gè)字節(jié)或用

10、逗號(hào)分開的字節(jié)數(shù)據(jù)據(jù).例如:例如: FIRST DB 73,04,53 SECON DB 02,36,48,75,48,90 表示字節(jié)串?dāng)?shù)據(jù)存人由表示字節(jié)串?dāng)?shù)據(jù)存人由FIRST和和SECON標(biāo)號(hào)標(biāo)號(hào)為起始地址的連續(xù)存儲(chǔ)器單元中。為起始地址的連續(xù)存儲(chǔ)器單元中。 485302360473FIRSTSECON數(shù)據(jù)說明偽指令的作用是把數(shù)據(jù)存人指定的存儲(chǔ)單元。數(shù)據(jù)說明偽指令的作用是把數(shù)據(jù)存人指定的存儲(chǔ)單元。10定義字偽指令定義字偽指令(DW) 指令格式為:指令格式為: DW 其含義是把字或字串值存入由標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單其含義是把字或字串值存入由標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元中,且把字的高字節(jié)數(shù)存入高地址單元,

11、低字節(jié)數(shù)存人元中,且把字的高字節(jié)數(shù)存入高地址單元,低字節(jié)數(shù)存人低地址單元。按順序連續(xù)存放。低地址單元。按順序連續(xù)存放。(3) 存儲(chǔ)區(qū)說明偽指令存儲(chǔ)區(qū)說明偽指令 存儲(chǔ)區(qū)說明偽指令的指令格式為:存儲(chǔ)區(qū)說明偽指令的指令格式為: DS 其含義是通知匯編程序,在目標(biāo)代碼中,以標(biāo)號(hào)為首其含義是通知匯編程序,在目標(biāo)代碼中,以標(biāo)號(hào)為首地址保留若干存儲(chǔ)單元,以備源程序使用。地址保留若干存儲(chǔ)單元,以備源程序使用。例如:例如: BASE DS 100H ;通知匯編程序,從標(biāo)號(hào)通知匯編程序,從標(biāo)號(hào)BASE開開 始,保留始,保留100H個(gè)存儲(chǔ)單元,以備個(gè)存儲(chǔ)單元,以備 源程序另用。源程序另用。11( 4 ) 程序段說明

12、偽指令程序段說明偽指令 程序段說明偽指令的指令格式為:程序段說明偽指令的指令格式為: ORG 其含義是向匯編程序說明,下述程序段的起始地址由其含義是向匯編程序說明,下述程序段的起始地址由表達(dá)式指明。表達(dá)式通常為表達(dá)式指明。表達(dá)式通常為16進(jìn)制地址碼。例如:進(jìn)制地址碼。例如: ORG 1000H START: MOV A,#12H ORG偽指令通知匯編程序,從偽指令通知匯編程序,從START開始的程序開始的程序段,其起始地址段,其起始地址1000H開始。開始。12 匯編結(jié)束偽指令一般有以下兩種格式:匯編結(jié)束偽指令一般有以下兩種格式: 主程序模塊:主程序模塊: END 子程序模塊:子程序模塊: E

13、ND 其含義是用以通知匯編程序,該程序段匯編至此結(jié)束。其含義是用以通知匯編程序,該程序段匯編至此結(jié)束。因此,在設(shè)計(jì)的每一個(gè)程序中必須要有因此,在設(shè)計(jì)的每一個(gè)程序中必須要有END語句,且語句,且END語句應(yīng)設(shè)置在整個(gè)程序語句應(yīng)設(shè)置在整個(gè)程序(包括偽指令在內(nèi)包括偽指令在內(nèi))的后面。的后面。 當(dāng)源程序?yàn)橹鞒绦驎r(shí),當(dāng)源程序?yàn)橹鞒绦驎r(shí),END偽指令中可有標(biāo)號(hào),這個(gè)偽指令中可有標(biāo)號(hào),這個(gè)標(biāo)號(hào)應(yīng)是主程序第一條指令的符號(hào)地址。若源程序?yàn)樽映虡?biāo)號(hào)應(yīng)是主程序第一條指令的符號(hào)地址。若源程序?yàn)樽映绦?,則在序,則在END偽指令中不需要使用標(biāo)號(hào)。偽指令中不需要使用標(biāo)號(hào)。( 5 ) 匯編結(jié)束偽指令匯編結(jié)束偽指令134.1.

14、4 4.1.4 匯編語言程序設(shè)計(jì)步驟匯編語言程序設(shè)計(jì)步驟1.1.分析問題,確定算法分析問題,確定算法2.2.根據(jù)算法,畫出程序框圖根據(jù)算法,畫出程序框圖3.3.分配內(nèi)存工作區(qū)及有關(guān)端口地分配內(nèi)存工作區(qū)及有關(guān)端口地址址4.4.編寫程序編寫程序5.5.上機(jī)調(diào)試上機(jī)調(diào)試144.2 4.2 匯編語言程序的匯編匯編語言程序的匯編 將匯編語言源程序翻譯成機(jī)器代碼的過程稱為將匯編語言源程序翻譯成機(jī)器代碼的過程稱為“匯編匯編”。手工匯編手工匯編機(jī)器匯編機(jī)器匯編應(yīng)用程序完成步驟:應(yīng)用程序完成步驟:1.編輯源程序;編輯源程序;2.通過執(zhí)行匯編程序?qū)υ闯绦蜻M(jìn)行匯編;通過執(zhí)行匯編程序?qū)υ闯绦蜻M(jìn)行匯編;3.通過串行口或

15、并行口把機(jī)器代碼傳到用戶樣機(jī)通過串行口或并行口把機(jī)器代碼傳到用戶樣機(jī)進(jìn)行調(diào)試和運(yùn)行。進(jìn)行調(diào)試和運(yùn)行。154.3 4.3 匯編語言實(shí)用程序設(shè)計(jì)匯編語言實(shí)用程序設(shè)計(jì)順序結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)子子 程程 序序中斷服務(wù)程序中斷服務(wù)程序4.3.1 4.3.1 匯編語言程序的基本結(jié)構(gòu)形式匯編語言程序的基本結(jié)構(gòu)形式16將一個(gè)字節(jié)內(nèi)的兩個(gè)將一個(gè)字節(jié)內(nèi)的兩個(gè)BCD碼拆開并變成碼拆開并變成ASCII碼,碼, 存入兩個(gè)存入兩個(gè)RAM單元。單元。BCD碼放在內(nèi)碼放在內(nèi)RAM的的20H, 轉(zhuǎn)換后高半字節(jié)放到轉(zhuǎn)換后高半字節(jié)放到21H,低字節(jié)放,低字節(jié)放22H。 BCDH BCDLBCDH BCDLR

16、AMRAM21H21H22H22H20H20HBCD碼碼09對(duì)應(yīng)的對(duì)應(yīng)的ASCII碼為碼為30H39H轉(zhuǎn)換時(shí),將轉(zhuǎn)換時(shí),將20H中的中的BCD碼拆開,碼拆開,高四位置為高四位置為“0011”即可。即可。BCDHBCDHASCII碼碼BCDLBCDL001100110011001117MOV R0, #22H MOV R0,#0 MOV A, 20H XCHD A, R0 ORL 22H, #30H SWAP A ORG 1000H ORL A, #30H MOV 21H, A SJMP $ END;R0 22H; 22H 0;兩個(gè)兩個(gè)BCD數(shù)送數(shù)送A;BCDL數(shù)送數(shù)送22H;完成轉(zhuǎn)換完成轉(zhuǎn)換;

17、BCDH數(shù)送數(shù)送A的低的低4位位;完成轉(zhuǎn)換完成轉(zhuǎn)換;存數(shù)存數(shù)18 MOV R0, #22H MOV R0,#0 MOV A, 20H XCHD A, R0 ORL 22H, #30H SWAP A ORG 1000H ORL A, #30H MOV 21H, A SJMP $ END;R0 22H; 22H 0;兩個(gè)兩個(gè)BCD數(shù)送數(shù)送A;BCDL數(shù)送數(shù)送22H;完成轉(zhuǎn)換完成轉(zhuǎn)換;BCDH數(shù)送數(shù)送A的低的低4位位;完成轉(zhuǎn)換完成轉(zhuǎn)換;存數(shù)存數(shù)190000 BCDL0000 BCDL0001 00000001 0000 以上程序用了以上程序用了8條指令,條指令,15個(gè)內(nèi)存字節(jié),執(zhí)行時(shí)間為個(gè)內(nèi)存字節(jié),

18、執(zhí)行時(shí)間為9個(gè)個(gè)機(jī)器周期。機(jī)器周期。采用除采用除10H取余法將兩個(gè)取余法將兩個(gè)BCD數(shù)拆開數(shù)拆開BCDH BCDLBCDH BCDLA0000 BCDH0000 BCDHBABDIV ABORL , #30H AB20 MOV A, 20H MOV B,#10H DIV AB ORL B, #30H MOV 22H, B ORL A, #30H ORG 1000H MOV 21H, A SJMP $ END;取取BCD碼至碼至A; 完成轉(zhuǎn)換完成轉(zhuǎn)換;存存ASCII碼碼;完成轉(zhuǎn)換完成轉(zhuǎn)換;存存ASCII碼碼;除除10H取余,使取余,使BCDH A 、BCDL B214.3.2 子程序子程序例例4

19、-3. 單字節(jié)有符號(hào)數(shù)的加減法子程序單字節(jié)有符號(hào)數(shù)的加減法子程序 該程序?qū)崿F(xiàn)(該程序?qū)崿F(xiàn)(R2R3)R7,R2和和R3中為有符號(hào)中為有符號(hào)原碼,原碼,R7中存放計(jì)算結(jié)果的原碼。中存放計(jì)算結(jié)果的原碼。MAIN: LCALL SUB1;調(diào)減法子程序調(diào)減法子程序SUB1LCALL ADD1;調(diào)加法子程序調(diào)加法子程序ADD1SUB1:MOV A,R3CPLACC.7MOVR3,AADD1:MOV A,R322 ACALL CMPT;調(diào)單字節(jié)求補(bǔ)子程序調(diào)單字節(jié)求補(bǔ)子程序CMPT, MOVR3,A 加數(shù)或減數(shù)求補(bǔ)碼加數(shù)或減數(shù)求補(bǔ)碼MOV A,R2ACALL CMPTADD A,R3JBOV,OVERACALL CMPT ;調(diào)單字節(jié)求補(bǔ)子程序調(diào)單字節(jié)求補(bǔ)子程序 MOV R7,A CMPT,將結(jié)果轉(zhuǎn)換成原碼將結(jié)果轉(zhuǎn)換成原碼OV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論