版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2021-11-211第4章 匯編語言程序設(shè)計2021-11-212 4-1 匯編程序約定匯編語言程序:匯編語言程序: 用匯編語言編寫的、完成特定功能的指令序列。用匯編語言編寫的、完成特定功能的指令序列。匯編程序:匯編程序: 能將匯編語言能將匯編語言源程序源程序轉(zhuǎn)換成機器語言轉(zhuǎn)換成機器語言目標(biāo)目標(biāo)程序程序的系統(tǒng)軟件。的系統(tǒng)軟件。 匯編語言程序到機器語言程序的轉(zhuǎn)換過程稱為匯編。匯編語言程序到機器語言程序的轉(zhuǎn)換過程稱為匯編。1 1、手工匯編:、手工匯編:人工查指令表匯編。用于設(shè)計短小程序或調(diào)試人工查指令表匯編。用于設(shè)計短小程序或調(diào)試 程序的場合。程序的場合。2 2、機器匯編:、機器匯編:用匯編程序
2、進(jìn)行匯編。用匯編程序進(jìn)行匯編。2021-11-213源程序使用機器匯編要考慮匯編程序的約定:1 1)按指令格式和語法規(guī)則編寫程序。按指令格式和語法規(guī)則編寫程序。 常數(shù)的表示:常數(shù)的表示:十進(jìn)制數(shù):十進(jìn)制數(shù):2020十六進(jìn)制數(shù):十六進(jìn)制數(shù):8787H H,0F0H0F0H二進(jìn)制數(shù):二進(jìn)制數(shù):0101100101011001B B字符:字符:HH字符串:字符串:“Hello”Hello”。 2 2)使用偽指令提供匯編信息。使用偽指令提供匯編信息。2021-11-214匯編的主要任務(wù):1 1)確定程序中每條匯編語言指令的指令機器碼。)確定程序中每條匯編語言指令的指令機器碼。2 2)確定每條指令在存儲
3、器中的存放地址。)確定每條指令在存儲器中的存放地址。3 3)提供錯誤信息。)提供錯誤信息。4 4)提供目標(biāo)執(zhí)行文件()提供目標(biāo)執(zhí)行文件(* *. .OBJOBJ/ /* *. .HEX)HEX)和和 列表文件(列表文件(* *. .LSTLST)。)。匯編語言的語句格式匯編語言的語句格式 語句行由四個字段組成語句行由四個字段組成 : 標(biāo)號:標(biāo)號: 操作碼操作碼 操作數(shù)操作數(shù) ;注釋;注釋 括號內(nèi)的部分可以根據(jù)實際情況取舍。每個字段之間要用分括號內(nèi)的部分可以根據(jù)實際情況取舍。每個字段之間要用分隔符分隔,可以用作分隔符的符號有空格、冒號、逗號、分號隔符分隔,可以用作分隔符的符號有空格、冒號、逗號、
4、分號等。等。如:如:LOOPLOOP:MOV AMOV A,# 7FH # 7FH ;A7FHA7FH2021-11-215一、標(biāo)號一、標(biāo)號 標(biāo)號是語句地址的標(biāo)志符號,用于引導(dǎo)對該語句標(biāo)號是語句地址的標(biāo)志符號,用于引導(dǎo)對該語句的非順序訪問。的非順序訪問。有關(guān)標(biāo)號的規(guī)定有關(guān)標(biāo)號的規(guī)定為:為: 標(biāo)號由標(biāo)號由1 18 8個個ASCIIASCII字符組成。第一個字符必須是字字符組成。第一個字符必須是字 母,其余字符可以是字母、數(shù)字或其他特定字符;母,其余字符可以是字母、數(shù)字或其他特定字符; 不能使用該匯編語言已經(jīng)定義了的符號作為標(biāo)號。不能使用該匯編語言已經(jīng)定義了的符號作為標(biāo)號。如指令助記符、寄存器符號
5、名稱等;如指令助記符、寄存器符號名稱等; 標(biāo)號后邊必須跟冒號。標(biāo)號后邊必須跟冒號。二、操作碼二、操作碼 操作碼用于規(guī)定語句執(zhí)行的操作。它是匯編語句操作碼用于規(guī)定語句執(zhí)行的操作。它是匯編語句中唯一不能空缺的部分。它由指令助記符表示。中唯一不能空缺的部分。它由指令助記符表示。 2021-11-216三、操作數(shù)三、操作數(shù) 操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在一條匯編語句中操作數(shù)可能是空缺的,也可能包括一一條匯編語句中操作數(shù)可能是空缺的,也可能包括一項,還可能包括兩項或三項。各操作數(shù)間以逗號分隔。項,還可能包括兩項或三項。各操作數(shù)間以逗號分隔。操作數(shù)字段的內(nèi)
6、容可能包括以下幾種情況:操作數(shù)字段的內(nèi)容可能包括以下幾種情況:(1 1)工作寄存器名;)工作寄存器名;(2 2)特殊功能寄存器名;)特殊功能寄存器名;(3 3)標(biāo)號名;)標(biāo)號名;(4 4)常數(shù);)常數(shù);(5 5)符號)符號“$”$”,表示程序計數(shù)器,表示程序計數(shù)器PCPC的當(dāng)前值;的當(dāng)前值;(6 6)表達(dá)式。)表達(dá)式。2021-11-217四、注釋四、注釋 注釋不屬于匯編語句的功能部分,它只是對語句的說明。注釋不屬于匯編語句的功能部分,它只是對語句的說明。注釋字段可以增加程序的可讀性,有助于編程人員的閱讀和維注釋字段可以增加程序的可讀性,有助于編程人員的閱讀和維護。注釋字段必須以分號護。注釋字
7、段必須以分號“;”開頭,長度不限,當(dāng)一行書寫開頭,長度不限,當(dāng)一行書寫不下時,可以換行接著書寫,但換行時應(yīng)注意在開頭使用分號不下時,可以換行接著書寫,但換行時應(yīng)注意在開頭使用分號“;”。匯編語言指令類型:匯編語言指令類型: 1. 1. 機器指令:機器指令: 指令系統(tǒng)中的全部指令,每條指令有對應(yīng)的機器代碼。指令系統(tǒng)中的全部指令,每條指令有對應(yīng)的機器代碼。 2. 2. 偽指令:偽指令: 匯編控制指令,僅提供匯編信息,沒有指令代碼。匯編控制指令,僅提供匯編信息,沒有指令代碼。2021-11-218 3 3. 宏指令:宏指令: 宏匯編功能:將需要多次反復(fù)執(zhí)行的程序段定義成一個宏指令宏匯編功能:將需要多
8、次反復(fù)執(zhí)行的程序段定義成一個宏指令 名(宏定義),編程時,可在程序中使用宏指令名(宏定義),編程時,可在程序中使用宏指令 名來替代一段程序(宏調(diào)用)。名來替代一段程序(宏調(diào)用)。宏定義過程宏定義過程:宏指令名宏指令名 MACRO 形式參數(shù)形式參數(shù) ;定義程序段;定義程序段 ENDM宏調(diào)用過程:宏調(diào)用過程: 宏指令名宏指令名 實際參數(shù)實際參數(shù) 宏指令名宏指令名 實際參數(shù)實際參數(shù)2021-11-219二、匯編控制指令(偽指令): 偽指令是放在匯編語言源程序中用于指示匯偽指令是放在匯編語言源程序中用于指示匯編程序如何對源程序進(jìn)行匯編的指令,它不同編程序如何對源程序進(jìn)行匯編的指令,它不同于指令系統(tǒng)中的
9、指令,指令系統(tǒng)中的指令在匯于指令系統(tǒng)中的指令,指令系統(tǒng)中的指令在匯編程序匯編時能夠產(chǎn)生相應(yīng)的指令代碼,而偽編程序匯編時能夠產(chǎn)生相應(yīng)的指令代碼,而偽指令在匯編程序匯編時不會產(chǎn)生代碼,只是對指令在匯編程序匯編時不會產(chǎn)生代碼,只是對匯編過程進(jìn)行相應(yīng)的控制和說明。匯編過程進(jìn)行相應(yīng)的控制和說明。 偽指令通常在匯編語言源程序中用于定義數(shù)偽指令通常在匯編語言源程序中用于定義數(shù)據(jù)、分配存儲空間、控制程序的輸入輸出等。據(jù)、分配存儲空間、控制程序的輸入輸出等。MCS-51MCS-51匯編語言源程序相對于一般的微型計算匯編語言源程序相對于一般的微型計算機匯編語言源程序結(jié)構(gòu)簡單,偽指令數(shù)目少,機匯編語言源程序結(jié)構(gòu)簡單
10、,偽指令數(shù)目少,常用的偽指令只有幾條。常用的偽指令只有幾條。2021-11-21101.1.ORGORG起始地址指令:指明程序和數(shù)據(jù)塊起始地址。起始地址指令:指明程序和數(shù)據(jù)塊起始地址。該指令的該指令的功能功能是向匯編程序說明下面緊接的程序段或是向匯編程序說明下面緊接的程序段或數(shù)據(jù)段存放的起始地址。表達(dá)式通常為數(shù)據(jù)段存放的起始地址。表達(dá)式通常為1616進(jìn)制地址,進(jìn)制地址,也可以是已定義的標(biāo)號地址。也可以是已定義的標(biāo)號地址。常用偽指令及其功能:常用偽指令及其功能: ORG 8000HORG 8000HSTARTSTART:MOV AMOV A,#30H#30H 此時規(guī)定該段程序的機器碼從地址此時規(guī)
11、定該段程序的機器碼從地址8000H8000H單元開始存單元開始存放。放。 在每一個匯編語言源程序的開始,在每一個匯編語言源程序的開始,都要設(shè)置一條都要設(shè)置一條ORGORG偽偽指令來指定該程序在存儲器中存放的起始位置。指令來指定該程序在存儲器中存放的起始位置。若省略若省略O(shè)RGORG偽偽指令,則該程序段從指令,則該程序段從0000H0000H單元開始存放。在一個源程序中,單元開始存放。在一個源程序中,可以多次使用可以多次使用ORGORG偽指令規(guī)定不同程序段或數(shù)據(jù)段存放的起始偽指令規(guī)定不同程序段或數(shù)據(jù)段存放的起始地址,但地址,但要求地址值由小到大依序排列要求地址值由小到大依序排列,不允許空間重疊。
12、,不允許空間重疊。2021-11-21112DB偽指令偽指令格式:格式:標(biāo)號:標(biāo)號: DB 項或項表項或項表 DB偽指令用于定義字節(jié)數(shù)據(jù),可以偽指令用于定義字節(jié)數(shù)據(jù),可以定義一個字節(jié),也可定義多個字節(jié),字義定義一個字節(jié),也可定義多個字節(jié),字義多個字節(jié)時,兩兩之間用逗號間隔,定義多個字節(jié)時,兩兩之間用逗號間隔,定義的多個字節(jié)在存儲器中是連續(xù)存放的。定的多個字節(jié)在存儲器中是連續(xù)存放的。定義的字節(jié)可以是一般常數(shù),也可以為字符,義的字節(jié)可以是一般常數(shù),也可以為字符,還可以是字符串,字符和字符串以引號括還可以是字符串,字符和字符串以引號括起來,字符數(shù)據(jù)在存儲器中以起來,字符數(shù)據(jù)在存儲器中以ASCII碼形
13、碼形式存放。式存放。在定義時前面可以帶標(biāo)號,定義的標(biāo)號在定義時前面可以帶標(biāo)號,定義的標(biāo)號在程序中是起始單元的地址。在程序中是起始單元的地址?!纠?-19】 ORG 3000HTAB1: DB 12H,34HDB 5,A,abc匯編后,各個數(shù)據(jù)在存儲單元中的存放匯編后,各個數(shù)據(jù)在存儲單元中的存放情況如下:情況如下:12H34H35H41H61H62H63H3000H3001H3002H3003H3004H3005H3006H2021-11-21123DW偽指令偽指令格式:格式:標(biāo)號:標(biāo)號: DW 項或項表項或項表 這條指令與這條指令與DB相似,但用于相似,但用于定義字?jǐn)?shù)據(jù)。項或項表指所定義的一
14、定義字?jǐn)?shù)據(jù)。項或項表指所定義的一個字在存儲器中占兩個字節(jié)。匯編時,個字在存儲器中占兩個字節(jié)。匯編時,機器自動按低字節(jié)在前,高字節(jié)在后,機器自動按低字節(jié)在前,高字節(jié)在后,即低字節(jié)存放在低地址單元,高字節(jié)即低字節(jié)存放在低地址單元,高字節(jié)存放在高地址單元。存放在高地址單元?!纠?-20】 ORG 3000HTAB2:DW 1234H,5678H匯編后,各個數(shù)據(jù)在存儲單元中的匯編后,各個數(shù)據(jù)在存儲單元中的存放情況如下:存放情況如下:34H12H78H56H3000H3001H3002H3003H2021-11-21134DS偽指令偽指令格式:格式:標(biāo)號:標(biāo)號: DS 數(shù)值表達(dá)數(shù)值表達(dá)式式 該偽指令用
15、在存儲器中保留該偽指令用在存儲器中保留一定數(shù)量的字節(jié)單元。保留存貯一定數(shù)量的字節(jié)單元。保留存貯空間主要為以后存放數(shù)據(jù)。保留空間主要為以后存放數(shù)據(jù)。保留的字節(jié)單元數(shù)由表達(dá)式的值決定。的字節(jié)單元數(shù)由表達(dá)式的值決定?!纠?-21】 ORG 2000HTAB1: DB 12H,34HDS 4HDB 5匯編后,存儲單元中的分配情況匯編后,存儲單元中的分配情況如下:如下:12H34H-35H3000H3001H3002H3003H3004H3005H3006H2021-11-21145EQU偽指令偽指令格式:符號格式:符號 EQU 項項 該偽指令的功能是將指令中的項的值賦予該偽指令的功能是將指令中的項的
16、值賦予EQU前前面的符號。項可以是常數(shù)、地址標(biāo)號或表達(dá)式。以后可面的符號。項可以是常數(shù)、地址標(biāo)號或表達(dá)式。以后可以通過使用該符號使用相應(yīng)的項。以通過使用該符號使用相應(yīng)的項。【例例3-22】 TAB1 EQU 1000HTAB2 EQU 2000H匯編后匯編后TAB1、TAB2分別等于分別等于1000H、2000H。程序。程序后面使用后面使用1000H、2000H的地方就可以用符號的地方就可以用符號TAB1、TAB2替換。替換。用用EQU偽指令對某標(biāo)號賦值后,該符號的值在整個程偽指令對某標(biāo)號賦值后,該符號的值在整個程序中不能再改變。序中不能再改變。2021-11-21157END偽指令偽指令格式
17、:格式:END 該指令放于程序最后位置,用于指明匯編語言源程該指令放于程序最后位置,用于指明匯編語言源程序的結(jié)束位置,當(dāng)匯編程序匯編到序的結(jié)束位置,當(dāng)匯編程序匯編到END偽指令時,匯編結(jié)偽指令時,匯編結(jié)束。束。END后面的指令,匯編程序都不予處理。一個源程序后面的指令,匯編程序都不予處理。一個源程序只能有一個只能有一個END命令,否則就有一部分指令不能被匯編。命令,否則就有一部分指令不能被匯編。6bit偽指令偽指令格式:符號格式:符號 bit 位地址位地址bit該偽指令用于給位地址賦予符號,經(jīng)賦值后可用該符該偽指令用于給位地址賦予符號,經(jīng)賦值后可用該符號代替號代替bit后面的位地址。后面的位地
18、址。【例例3-23】 FLG bit F0AI bitP1.0定義后,在程序中位地址定義后,在程序中位地址F0、P1.0就可以通過就可以通過FLG和和AI來使用。來使用。2021-11-21164-2 匯編語言程序設(shè)計步驟一、確定方案和計算方法;一、確定方案和計算方法;二、了解應(yīng)用系統(tǒng)的硬件配置、性能指標(biāo);二、了解應(yīng)用系統(tǒng)的硬件配置、性能指標(biāo);三、建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟;三、建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟;四、畫程序流程圖;四、畫程序流程圖; 表示程序結(jié)構(gòu)和程序功能。表示程序結(jié)構(gòu)和程序功能。 五、編制源程序。五、編制源程序。 1. 1.合理分配存儲器單元和了解合理分
19、配存儲器單元和了解 I/O I/O接口地址。接口地址。 2. 2.按功能設(shè)計程序,明確各程序按功能設(shè)計程序,明確各程序 之間的相互關(guān)系。之間的相互關(guān)系。 3. 3.用注釋行說明程序,便于閱讀、用注釋行說明程序,便于閱讀、 修改和調(diào)試。修改和調(diào)試。2021-11-2117常用程序結(jié)構(gòu):4-3 4-3 順序程序順序程序 順序程序是指無分支、無循環(huán)結(jié)構(gòu)的程序。其執(zhí)行流順序程序是指無分支、無循環(huán)結(jié)構(gòu)的程序。其執(zhí)行流程是依指令在存儲器中的存放順序進(jìn)行的。程是依指令在存儲器中的存放順序進(jìn)行的。順序程序又稱簡順序程序又稱簡單程序,程序走向只有一條路徑。單程序,程序走向只有一條路徑。例:例:雙字節(jié)變補程序雙字
20、節(jié)變補程序( (設(shè)數(shù)據(jù)在設(shè)數(shù)據(jù)在R R4 4R R5 5中中) ):MOVMOV A A,R R5 5;取低字節(jié)取低字節(jié)CPLCPL A AADDADD A A,#01H#01H;低字節(jié)變補低字節(jié)變補MOVMOV R R5 5,A AMOVMOV A A, R R4 4 ;取高字節(jié)取高字節(jié)CPLCPL A AADDC AADDC A,#00H#00H;高字節(jié)變補高字節(jié)變補MOVMOV R4 R4,A A 順序程序、分支程序、循環(huán)程序。順序程序、分支程序、循環(huán)程序。2021-11-2118例題(順序) 例例4.14.1 三字節(jié)無符號數(shù)相加,其中被加數(shù)在內(nèi)部三字節(jié)無符號數(shù)相加,其中被加數(shù)在內(nèi)部RA
21、MRAM的的5050H H、51H51H和和5252H H單元中;加數(shù)在內(nèi)部單元中;加數(shù)在內(nèi)部RAMRAM的的5353H H、54H54H和和5555H H單元單元中;要求把相加之和存放在中;要求把相加之和存放在5050H H、51H51H和和5252H H單元中,進(jìn)位存放單元中,進(jìn)位存放在位尋址區(qū)的在位尋址區(qū)的0000H H位中。位中。低字節(jié)低字節(jié)低字節(jié)低字節(jié)中字節(jié)中字節(jié)中字節(jié)中字節(jié)高字節(jié)高字節(jié)高字節(jié)高字節(jié)高字節(jié)高字節(jié)高字節(jié)高字節(jié)低字節(jié)低字節(jié)低字節(jié)低字節(jié)R0R12021-11-2119MOVMOVR R0 0,#52H#52HMOVMOVR R1 1,#55H#55HMOVMOVA A,RR
22、0 0ADDADDA A,RR1 1MOVMOVRR0 0,A ADECDECR R0 0DECDECR R1 1MOVMOVA A,RR0 0ADDCADDCA A,RR1 1MOVMOVRR0 0,A ADECDECR R0 0DECDECR R1 1MOVMOVA A,RR0 0ADDCADDCA A,RR1 1MOVMOVRR0 0,A ACLRCLRA AADDCADDCA A,#00H#00HMOVMOVR R0 0,#00H#00HMOVMOVRR0 0,A A;被加數(shù)的低字節(jié)地址被加數(shù)的低字節(jié)地址;加數(shù)的低字節(jié)地址;加數(shù)的低字節(jié)地址;低字節(jié)相加;低字節(jié)相加;存低字節(jié)相加結(jié)果;存
23、低字節(jié)相加結(jié)果;中間字節(jié)帶進(jìn)位相加;中間字節(jié)帶進(jìn)位相加;存中間字節(jié)相加結(jié)果;存中間字節(jié)相加結(jié)果;高字節(jié)帶進(jìn)位相加;高字節(jié)帶進(jìn)位相加;存高字節(jié)相加結(jié)果;存高字節(jié)相加結(jié)果;存放進(jìn)位的單元地址;存放進(jìn)位的單元地址;進(jìn)位送;進(jìn)位送0000H H位保存位保存程序:程序:MOVC,ACC.0MOV00H,CMOVR0,#20HMOVR0,A例: 壓縮式BCD碼分解成為單字節(jié)BCD碼。MOVMOV R R0 0,#40H#40H ;設(shè)指針設(shè)指針MOVMOV A A,RR0 0 ;取一個字節(jié)取一個字節(jié)MOVMOV R R2 2,A A ;暫存暫存ANLANL A A,#0FH#0FH ;高半字節(jié)清高半字節(jié)清0
24、 0INCINC R R0 0MOVMOV R R0 0,A A ;保存數(shù)據(jù)保存數(shù)據(jù)個位個位MOVMOV A A,R R2 2SWAP ASWAP A ;十位換到低半字節(jié)十位換到低半字節(jié)ANLANL A A,#0FH#0FHINCINC R R0 0MOVMOV R R0 0,A A ;保存數(shù)據(jù)保存數(shù)據(jù)十位十位十十 個個2021-11-21214-4 分支程序4-4-14-4-1單重分支程序單重分支程序一個判斷決策框,程序有兩條出路。一個判斷決策框,程序有兩條出路。兩種分支結(jié)構(gòu):兩種分支結(jié)構(gòu): 例:例:求求R R2 2中補碼絕對值:中補碼絕對值: 正數(shù)不變,負(fù)數(shù)變補。正數(shù)不變,負(fù)數(shù)變補。 MO
25、V AMOV A,R R2 2 JNB ACC. JNB ACC.7 7,NEXT NEXT ;為正數(shù)?為為正數(shù)?為0 0跳跳 CPL ACPL A ;負(fù)數(shù)變補負(fù)數(shù)變補 INC AINC A MOV R MOV R2 2,A A NEXT NEXT:SJMP NEXT SJMP NEXT ;結(jié)束結(jié)束由由條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。P85:例題(單分支) 例例4.2 4.2 假定在外部假定在外部RAMRAM中有中有STST1 1、STST2 2和和STST3 3共共3 3個連續(xù)單元,其中個連續(xù)單元,其中 ST ST1 1和和
26、STST2 2單元中分別存放著兩個單元中分別存放著兩個8 8位無符號二進(jìn)制數(shù),位無符號二進(jìn)制數(shù),要求要求 找出其中的找出其中的大數(shù)大數(shù)并存入并存入STST3 3 單元中。單元中。STARTSTART:CLR CCLR C MOV DPTR MOV DPTR,#ST#ST1 1 MOVX A MOVX A,DPTRDPTR MOV R MOV R2 2,A A INC DPTR INC DPTR MOVX A MOVX A,DPTRDPTR SUBB A SUBB A,R R2 2 JNC BIG1 JNC BIG1 XCH A XCH A,R R2 2 BIG0 BIG0: INC DPTR
27、INC DPTR MOVX DPTR MOVX DPTR,A A RET RET BIG1 BIG1: MOVX A MOVX A,DPTRDPTR SJMP BIG0 SJMP BIG0;進(jìn)位位清進(jìn)位位清“0”;設(shè)置數(shù)據(jù)指針,指向設(shè)置數(shù)據(jù)指針,指向ST1;取第一個數(shù);取第一個數(shù);第一個數(shù)存;第一個數(shù)存R2;數(shù)據(jù)指針加數(shù)據(jù)指針加1,指向,指向ST2;取第二個數(shù);取第二個數(shù);兩數(shù)比較;兩數(shù)比較(第二個數(shù)(第二個數(shù)第一個數(shù))第一個數(shù));第二個數(shù)大轉(zhuǎn);第二個數(shù)大轉(zhuǎn)BIG1(C=0無借位跳)無借位跳);第一個數(shù)大整字節(jié)交換繼續(xù)第一個數(shù)大整字節(jié)交換繼續(xù);指向;指向ST3單元單元;存大數(shù);存大數(shù)例: FR
28、T: MOV A,40H ;取行李重量計價單位取行李重量計價單位G MOV R3,A MOV B,# 03H ;M=G3 MUL AB MOV R2,A ;暫存;暫存3G MOV A,R3 ;取回;取回G CJNE A,# 05H,L1 ;G5 ? G 5 跳跳L1 SJMP WETC L1: JC WETC ;是,轉(zhuǎn)至;是,轉(zhuǎn)至WETC(C=1即即G5跳)跳) SUBB A,#05H ;否則;否則M=3G+2(G-5) RLC A ADD A,R2 SJMP L2WETC: MOV A ,R2 L2: MOV 41H,A ;存結(jié)果;存結(jié)果M RETG5? :跳:跳WETC :G5:跳:跳WE
29、TC G5:順序執(zhí)行:順序執(zhí)行行 李 計 價 : 當(dāng)行 李 計 價 : 當(dāng) G 5 , M = G 3 ; 當(dāng)當(dāng)G5,M=G3+(G-5)(5-3) 。2021-11-2124例例 求雙字節(jié)補碼。求雙字節(jié)補碼。設(shè)在內(nèi)部設(shè)在內(nèi)部RAM的的addr1和和addr+1單單元存有一個雙字節(jié)元存有一個雙字節(jié)數(shù)(高位字節(jié)存于數(shù)(高位字節(jié)存于高地址單元)。編高地址單元)。編寫程序?qū)⑵渥x出取寫程序?qū)⑵渥x出取補后再存入補后再存入addr2和和addr2+1單元。單元。首先對低字節(jié)取補,首先對低字節(jié)取補,然后判其結(jié)果是否然后判其結(jié)果是否為全為全“0”。若是,。若是,則高字節(jié)取補,否則高字節(jié)取補,否則高字節(jié)取反。則
30、高字節(jié)取反。 STARTSTART:MOV R0MOV R0,#addr1 #addr1 ;原碼低字節(jié)地址送;原碼低字節(jié)地址送R0R0 MOV R1 MOV R1,#addr2 #addr2 ;補碼低字節(jié)地址送;補碼低字節(jié)地址送R1R1 MOV A MOV A,R0 R0 ;原碼低字節(jié)送;原碼低字節(jié)送A A CPL A CPL A ;A A內(nèi)容取補內(nèi)容取補 INC A INC A MOV R1 MOV R1,A A ;存補碼低字節(jié);存補碼低字節(jié) INC R0 INC R0 ;調(diào)整地址,指向下;調(diào)整地址,指向下一單元一單元 INC R1 INC R1 JZ ZERO JZ ZERO ;(;(A
31、A)=0=0時轉(zhuǎn)時轉(zhuǎn)ZEROZERO MOV A MOV A,R0 R0 ;原碼高字節(jié)送;原碼高字節(jié)送A A CPL A CPL A MOV R1 MOV R1,A A ;高字節(jié)反碼存入;高字節(jié)反碼存入addr2+1addr2+1單元單元 SJMP LOOP1 SJMP LOOP1 ZERO ZERO:MOV AMOV A, R0 R0 ;高字節(jié)取補存入;高字節(jié)取補存入addr2+1addr2+1單元單元 CPL ACPL A INC A INC A MOV R1 MOV R1,A A LOOP1: RET LOOP1: RET4-4-2 多重分支程序例:例:求符號函數(shù)求符號函數(shù)Y=SGN(X
32、)Y=SGN(X) +1 +1 (當(dāng)(當(dāng) X0X0)SGN(X)= 0 SGN(X)= 0 (當(dāng)當(dāng) X=0X=0) -1 -1 (當(dāng)當(dāng) X0X0)SYMB: MOV A,40H ;取取X JZ STOR ;X=0跳,跳,Y=X JB ACC.7,MINUS ;X0(A.7=1跳)跳) MOV A,# 01H ;X0,Y=+1 SJMP STORMINUS:MOV A,#0FFH ;X0,Y= -1 STOR: MOV 41H,A ;保存保存Y RET一、多次使用條件轉(zhuǎn)移指令,形成兩個以上判斷框。一、多次使用條件轉(zhuǎn)移指令,形成兩個以上判斷框。2021-11-2126溫控系統(tǒng)結(jié)構(gòu)框圖 電熱箱采用電
33、熱絲加熱,由雙向可控硅控制加熱量的大??;電熱箱采用電熱絲加熱,由雙向可控硅控制加熱量的大??; 溫度傳感器檢測電熱箱內(nèi)的溫度,經(jīng)放大與溫度傳感器檢測電熱箱內(nèi)的溫度,經(jīng)放大與A/DA/D轉(zhuǎn)換后進(jìn)入單片轉(zhuǎn)換后進(jìn)入單片機;機; 單片機將設(shè)定的溫度值與檢測到的電熱箱中的實際溫度進(jìn)行比較,單片機將設(shè)定的溫度值與檢測到的電熱箱中的實際溫度進(jìn)行比較,并調(diào)節(jié)運算后,發(fā)出控制信號經(jīng)光電隔離器去驅(qū)動雙向可控硅以調(diào)節(jié)并調(diào)節(jié)運算后,發(fā)出控制信號經(jīng)光電隔離器去驅(qū)動雙向可控硅以調(diào)節(jié)加在電熱絲的電壓,從而控制電熱箱的溫度。加在電熱絲的電壓,從而控制電熱箱的溫度。電熱箱單片機溫控系統(tǒng)結(jié)構(gòu)框圖電熱箱單片機溫控系統(tǒng)結(jié)構(gòu)框圖2021
34、-11-2127例題(多分支) 例例4.3 4.3 某溫度控制系統(tǒng),采集的溫度值(某溫度控制系統(tǒng),采集的溫度值(TaTa)放在累加器放在累加器A A中。此中。此外,外, 在內(nèi)部在內(nèi)部RAM54HRAM54H單元存放控制溫度下限值(單元存放控制溫度下限值(T54T54),), 在在 5 55 5 H H 單 元 存 放 控 制 溫 度 上 限 值單 元 存 放 控 制 溫 度 上 限 值(T55T55)。)。 若若TaTaT55,程序轉(zhuǎn)向程序轉(zhuǎn)向JW(降溫處理子程序);降溫處理子程序); 若若TaTaT54,則程序轉(zhuǎn)向則程序轉(zhuǎn)向SW(升溫處理子程序);升溫處理子程序); 若若T55T55TaTa
35、T54,則程序轉(zhuǎn)向則程序轉(zhuǎn)向FH(返回主程序)。返回主程序)。 :去:去FHFH思路:思路: Ta=Ta=T55? : TaTaT55:去去JW TaTaT55:Ta=Ta=T54? :去:去FHFH : TaTaT54:去去SW TaTaT54:去去FH算法算法: (1) TaTaT55:去去JW (2) TaTaT54:去去SW (3) T55T55TaTaT54:去去FH2021-11-2128程序: CJNE ACJNE A,55H55H,LOOP1LOOP1 AJMP FH AJMP FHLOOP1:JNC JWLOOP1:JNC JW CJNE A CJNE A,54H54H,LO
36、OP2LOOP2 AJMP FH AJMP FHLOOP2:JC SWLOOP2:JC SW FH: RET FH: RET ;Ta T55:轉(zhuǎn)向:轉(zhuǎn)向LOOP1; Ta=T55 :返回:返回;若若CY=0,表明表明Ta T55,轉(zhuǎn)降溫處理程序轉(zhuǎn)降溫處理程序 ; Ta T54:轉(zhuǎn)向:轉(zhuǎn)向LOOP2; Ta=T54 :返回:返回;若若CY=1,表明表明Ta T54,轉(zhuǎn)升溫處理程序轉(zhuǎn)升溫處理程序; T55TaT54,返回主程序返回主程序若若TaT55,程序轉(zhuǎn)向程序轉(zhuǎn)向JW(降溫處理子程序);降溫處理子程序);若若TaT54,則程序轉(zhuǎn)向則程序轉(zhuǎn)向SW(升溫處理子程序);升溫處理子程序);若若T55T
37、aT54,則程序轉(zhuǎn)向則程序轉(zhuǎn)向FH(返回主程序)。返回主程序)。二、按分支號轉(zhuǎn)移。如:當(dāng)分支號如:當(dāng)分支號=0,程序轉(zhuǎn)移到,程序轉(zhuǎn)移到ADDR0處;處; 當(dāng)分支號當(dāng)分支號=1,程序轉(zhuǎn)移到,程序轉(zhuǎn)移到ADDR1處;處; 。 例例4.44.4有有BR0BR0、BR1BR1、BR2BR2和和BR3BR3共共4 4個分支程序段,各分支程序段的功能個分支程序段,各分支程序段的功能 依次是從內(nèi)部依次是從內(nèi)部RAMRAM256256B B范圍取數(shù)、從外部范圍取數(shù)、從外部RAMRAM低低256B256B范圍取范圍取數(shù)、數(shù)、 從外部從外部RAM4KBRAM4KB范圍取數(shù)和從外部范圍取數(shù)和從外部RAM64KBRA
38、M64KB范圍取數(shù)。并假定范圍取數(shù)。并假定R R0 0 中存放取數(shù)地址低中存放取數(shù)地址低8 8位地址,位地址,R R1 1中存放高中存放高8 8位地址,位地址,R R3 3中存放中存放分支序分支序 號值。假定以號值。假定以BRTABBRTAB作差值表首地址,作差值表首地址, BR0_BRTAB BR0_BRTAB BR3_BRTAB BR3_BRTAB為差值。為差值。 分析:差值表分析:差值表= =分支入口地址分支入口地址該表首址該表首址1、利用查地址表法: MOVMOV A A,R R3 3 MOV MOV DPTR DPTR,#BRTAB#BRTAB MOVC MOVC A A,A+DPT
39、RA+DPTR JMP JMP A+DPTR A+DPTRBRTAB:BRTAB: DB DB BR0_BRTAB BR0_BRTAB DB DB BR1_BRTAB BR1_BRTAB DB DB BR2_BRTAB BR2_BRTAB DB DB BR3_BRTAB BR3_BRTAB BR0: BR0:MOVMOV A A,RR0 0SJMPSJMP BRE BRE BR1: BR1:MOVXMOVX A A,RR0 0SJMPSJMP BRE BRE BR2: BR2:MOVMOV A A,R R1 1ANLANL A A,#0FH#0FHANLANL P P2 2,#0F0H#0F0
40、HORLORL P P2 2,A AMOVXMOVX A A,RR0 0SJMPSJMP BRE BRE BR3: BR3:MOVMOV DPL DPL,R R0 0MOVMOV DPH DPH,R R1 1MOVXMOVX A A,DPTRDPTR BRE BRE: SJMP SJMP ;分支轉(zhuǎn)移值送;分支轉(zhuǎn)移值送A(如如R3=2);差值表首址差值表首址(BRTAB=3000H);查表;查表A+DPTR=3002H,(A)=40H ;轉(zhuǎn)移;轉(zhuǎn)移(A+DPTR=3040H);差值表;差值表(=10H) (=20H) (=40H) (=60H);從內(nèi)部;從內(nèi)部RAM取數(shù)取數(shù);從外部;從外部RAM
41、256B取數(shù)取數(shù);從外部;從外部RAM4KB取數(shù)取數(shù);高位地址取低;高位地址取低4位位;清;清P2口低口低4位位;發(fā)高位地址;發(fā)高位地址;從外部;從外部RAM64KB取數(shù)取數(shù)程序:程序:入口地址:入口地址:3010H3020H3040H3060H差值表差值表=分支入口地址該表首址分支入口地址該表首址例題(查轉(zhuǎn)移指令表)4.54.5假定鍵盤上有假定鍵盤上有3 3個操作鍵,功能說明如下個操作鍵,功能說明如下表:表: MOVMOV DPTR DPTR,#3000H#3000HCLRCLR C CRLCRLC A AJMPJMP A+DPTR A+DPTRAJMPAJMP DS DSAJMPAJMP
42、XS XSAJMPAJMP CR CR 3000H3001H3002H3003H3004H3005H3006H;3000H為基址為基址;進(jìn)位位;進(jìn)位位CY清清“0”;A帶進(jìn)位位循環(huán)左移帶進(jìn)位位循環(huán)左移;轉(zhuǎn)操作鍵處理程序;轉(zhuǎn)操作鍵處理程序;轉(zhuǎn)讀數(shù)據(jù)程序;轉(zhuǎn)讀數(shù)據(jù)程序;轉(zhuǎn)寫數(shù)據(jù)程序;轉(zhuǎn)寫數(shù)據(jù)程序;轉(zhuǎn)插入程序;轉(zhuǎn)插入程序2、使用轉(zhuǎn)移指令表法。用分支轉(zhuǎn)移指令 AJMP 對AJMP指令應(yīng)將分支序號乘以2, 轉(zhuǎn)移范圍為2KB;對LJMP指令應(yīng)將分支序號乘以3, 轉(zhuǎn)移范圍為64KB。2021-11-2132 設(shè)分支號已存入設(shè)分支號已存入A。把分支程序入口地址存放在表中。把分支程序入口地址存放在表中。 MTJ
43、S:MOV SP,#30HMOV DPTR,#TAB ;取分支入口地址表首地址取分支入口地址表首地址 CLR C ;分支號分支號2 RLC AMOV R2,AMOVC A,A+DPTR ;取分支地址低位取分支地址低位PUSH A ;入棧保存入棧保存 MOV A,R2INC AMOVC A,A+DPTR ;取分支地址高位取分支地址高位PUSH A ;入棧保存入棧保存 RET ;分支地址分支地址PC,轉(zhuǎn)移轉(zhuǎn)移 TAB: DW ADDR0 ;分支程序入口地址表分支程序入口地址表 DW ADDR1 ADDR0: ;程序段程序段0 ADDR1: ;程序段程序段1 ADDR2: ;程序段程序段2 3、利用
44、堆棧操作法:如:DPTR=3000H A=2 PC4-5 循環(huán)程序4-5-14-5-1 循環(huán)程序的構(gòu)成循環(huán)程序的構(gòu)成各個環(huán)節(jié)任務(wù):各個環(huán)節(jié)任務(wù):一、初始化部分:一、初始化部分: 循環(huán)準(zhǔn)備工作。如:清結(jié)果單元、循環(huán)準(zhǔn)備工作。如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。設(shè)指針、設(shè)循環(huán)控制變量初值等。二、循環(huán)體:二、循環(huán)體: 循環(huán)工作部分:循環(huán)工作部分: 需多次重復(fù)處理的工作。需多次重復(fù)處理的工作。 循環(huán)控制部分:循環(huán)控制部分: 1.1.修改指針和循環(huán)控制變量。修改指針和循環(huán)控制變量。 2. 2.檢測循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。檢測循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)
45、。三、結(jié)束部分:三、結(jié)束部分: 處理和保存循環(huán)結(jié)果。處理和保存循環(huán)結(jié)果。 允許允許0 0次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測循環(huán)條件。次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測循環(huán)條件。包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。4-5-2 單重循環(huán)簡單循環(huán)結(jié)構(gòu):簡單循環(huán)結(jié)構(gòu): 循環(huán)體中不套循環(huán)。循環(huán)體中不套循環(huán)。循環(huán)控制方法:循環(huán)控制方法:計數(shù)控制;計數(shù)控制;特征標(biāo)志控制。特征標(biāo)志控制。2021-11-2135例: 求求n n個單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在個單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在4343H H起始單元,數(shù)據(jù)串長度在起始單元,數(shù)據(jù)串長度在42
46、42H H單元,累加和單元,累加和不超過不超過2 2個字節(jié)。個字節(jié)。SUMSUM: MOVMOVR R0 0,#42H #42H ;設(shè)指針設(shè)指針MOVMOVA A,RR0 0MOVMOVR R2 2,A A ;循環(huán)計數(shù)器循環(huán)計數(shù)器n nCLRCLRA A ;結(jié)果單元清結(jié)果單元清0 0MOVMOVR R3 3,A AADD1ADD1:INCINCR R0 0 ;修改指針修改指針ADDADDA A,RR0 0 ;累加累加JNC NEXTJNC NEXT ;處理進(jìn)位(處理進(jìn)位(C=0C=0跳)跳)INCINCR R3 3 ;有進(jìn)位,高字節(jié)加有進(jìn)位,高字節(jié)加1 1NEXTNEXT:DJNZ DJNZ
47、R R2 2,ADD1 ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完循環(huán)控制:數(shù)據(jù)是否加完?MOVMOV40H40H,A A ;循環(huán)結(jié)束,保存結(jié)果循環(huán)結(jié)束,保存結(jié)果MOVMOV41H41H,R R3 3RETRETR02021-11-2136一、計數(shù)控制:例:例:為一串為一串7 7位位ASCIIASCII碼數(shù)據(jù)的碼數(shù)據(jù)的D D7 7位加上奇校驗,設(shè)數(shù)據(jù)存位加上奇校驗,設(shè)數(shù)據(jù)存放在片外放在片外RAMRAM的的21012101H H起始單元,數(shù)據(jù)長度在起始單元,數(shù)據(jù)長度在21002100H H單元。單元。 MOV DPTR MOV DPTR,#2100H#2100H MOVX A MOVX A,DPTRDP
48、TR MOV R MOV R2 2,A ANEXTNEXT:INC DPTRINC DPTR MOVX A MOVX A,DPTRDPTR ORL A ORL A,#80H#80H JNB P JNB P,PASS PASS ;P=0P=0:1 1的個數(shù)為偶數(shù),跳的個數(shù)為偶數(shù),跳 MOVX DPTR MOVX DPTR,A APASSPASS:DJNZ RDJNZ R2 2,NEXTNEXTDONEDONE:SJMP DONESJMP DONE設(shè)循環(huán)計數(shù)器,控制循環(huán)次數(shù)。正計數(shù)和倒計數(shù)兩種方式。設(shè)循環(huán)計數(shù)器,控制循環(huán)次數(shù)。正計數(shù)和倒計數(shù)兩種方式。2021-11-2137 二、特征控制:例:例:
49、找正數(shù)表最小值。正數(shù)表存在片外找正數(shù)表最小值。正數(shù)表存在片外RAMRAM中以中以LISTLIST為為 起始單元,用起始單元,用-1-1作為結(jié)束標(biāo)志。作為結(jié)束標(biāo)志。STARTSTART:MOV DPTRMOV DPTR,#LIST#LIST;數(shù)表首地址數(shù)表首地址MOV BMOV B,#127#127;預(yù)置最小值預(yù)置最小值 NEXT NEXT:MOVX AMOVX A,DPTRDPTR;取數(shù)取數(shù) INC DPTR INC DPTR;修改指針修改指針CJNE ACJNE A,#-1#-1,NEXT1NEXT1;是否為數(shù)表結(jié)尾?(是否為數(shù)表結(jié)尾?(A A- -1跳)跳) SJMP DONESJMP D
50、ONE;循環(huán)結(jié)束循環(huán)結(jié)束NEXT1NEXT1:CJNE ACJNE A,B B,NEXT2NEXT2;比較(比較(A AB B跳)跳)NEXT2NEXT2:JNC NEXT JNC NEXT ;C=0C=0跳跳 MOV B MOV B,A A;保存較小值保存較小值SJMP NEXTSJMP NEXT DONE DONE:SJMP DONESJMP DONE習(xí)題:習(xí)題:統(tǒng)計一班考試為統(tǒng)計一班考試為100100分和不及格人數(shù),成績單分和不及格人數(shù),成績單 在在4141H H起始單元。起始單元。設(shè)定循環(huán)結(jié)束標(biāo)志實現(xiàn)循環(huán)控制。設(shè)定循環(huán)結(jié)束標(biāo)志實現(xiàn)循環(huán)控制。4-5-3 多重循環(huán)例:例:將內(nèi)存一串單字節(jié)無
51、符號數(shù)升序排序?qū)?nèi)存一串單字節(jié)無符號數(shù)升序排序步驟:步驟:每次取相鄰單元的兩個數(shù)比較,決定是否需要交換數(shù)據(jù)位置。每次取相鄰單元的兩個數(shù)比較,決定是否需要交換數(shù)據(jù)位置。第一次循環(huán),比較第一次循環(huán),比較N-1N-1次,取到數(shù)據(jù)表中最大值。次,取到數(shù)據(jù)表中最大值。第二次循環(huán),比較第二次循環(huán),比較N-2N-2次,取到次大值。次,取到次大值。 第第N-1N-1次循環(huán):比較一次,排序結(jié)束。次循環(huán):比較一次,排序結(jié)束。循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。 SORT SORT: MOV MOV A A,#N-1#N-1;N N個數(shù)據(jù)排序個數(shù)據(jù)排序 MOVMOV R
52、R4 4,A A;外循外循環(huán)次數(shù)環(huán)次數(shù)LOOP1LOOP1: MOV MOV A A,R R4 4 MOV MOV R R3 3,A A;內(nèi)循內(nèi)循環(huán)次數(shù)環(huán)次數(shù) MOVMOV R R0 0,#TAB#TAB;設(shè)數(shù)據(jù)指針設(shè)數(shù)據(jù)指針LOOP2LOOP2: MOV MOV A A,RR0 0 ;取二數(shù)取二數(shù) MOVMOV B B,A A INC INC R R0 0 MOV MOV A A,RR0 0 CJNE A CJNE A,B B,L1L1;比較(比較(A AB B跳)跳) L1 L1: JNC JNC UNEX UNEX;ABAB,不交不交換換 DECDEC R R0 0 ;否則交換數(shù)否則交換
53、數(shù)據(jù)據(jù) XCHXCH A A,RR0 0 INC INC R R0 0 MOV MOV R R0 0,A A UNEX UNEX: DJNZ R DJNZ R3 3,LOOP2LOOP2;內(nèi)循環(huán)結(jié)束?內(nèi)循環(huán)結(jié)束? DJNZ RDJNZ R4 4,LOOP1LOOP1;外循環(huán)結(jié)束?外循環(huán)結(jié)束? RETRET2021-11-21401、單循環(huán)定時程序:單循環(huán)定時程序: (參看(參看P88P88) MOV R5,#TIMELOOP: NOP NOP DJNZ R5,LOOP軟件延時程序:1T1T1T2T設(shè):設(shè):f fOSCOSC=6MHz=6MHz, 則則 T=12/6MHz=2T=12/6MHz=
54、2 s t= t=(1+41+4TIMETIME)T T =2+8 =2+8TIMETIME( s)用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實現(xiàn)軟件延時。用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實現(xiàn)軟件延時。試計算延時程序的執(zhí)行時間。試計算延時程序的執(zhí)行時間。 源程序源程序指令周期指令周期( (M) M) 指令執(zhí)行次數(shù)指令執(zhí)行次數(shù)習(xí)題:習(xí)題:DELAYDELAY:MOV RMOV R6 6,#100#100 1 1 D1 D1:MOV RMOV R7 7,#10#10 1 1 D2 D2:NOPNOP 1 1DJNZ RDJNZ R7 7,D2D2 2 2 t=6.606 mst=6.606 ms DJNZ RD
55、JNZ R6 6,D1D1 2 2RETRET 2 2計算延時程序的執(zhí)行時間計算延時程序的執(zhí)行時間( (設(shè)時鐘設(shè)時鐘f fOSCOSC=6MHz,T=2=6MHz,T=2 s 。 DELAY DELAY: MOV R MOV R6 6,#64H #64H (=100=100)1 1I1I1: MOV R MOV R7 7,#0FFH#0FFH(=255=255)1 1I2I2: DJNZ R DJNZ R7 7,I2I22 2 DJNZ R DJNZ R6 6,I1I12 2 RET RET2 2延時時間計算:(設(shè)時鐘延時時間計算:(設(shè)時鐘f fOSCOSC=12MHz=12MHz) T=1
56、T=1 st=(1t=(11+11+1100+2100+2100100255+2255+2100+2100+21)1)T T = 51.303 ms = 51.303 ms1 11001001001002552551001001 12、多重循環(huán)定時:用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實現(xiàn)較長時間的延時。用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實現(xiàn)較長時間的延時。2021-11-21424-6 算術(shù)運算程序4-6-1 多字節(jié)加減運算程序 多字節(jié)加法子程序,多字節(jié)加法子程序,Z=X+YZ=X+Y。(參看參看P84P84)ADDSADDS:CLRCLRC C MOV R MOV R2 2,#23H#23H LOO
57、PLOOP:MOVMOVA A,RR0 0ADDC ADDC A A,RR1 1 ;加一字節(jié)加一字節(jié)MOVMOV RR0 0,A A ;存和一字節(jié)存和一字節(jié)INCINC R R0 0 ;修改指針修改指針I(yè)NCINC R R1 1DJNZ DJNZ R R2 2,LOOP LOOP ;全部字節(jié)全部字節(jié)加完?加完?RETRET習(xí)題習(xí)題1 1:編寫十進(jìn)制多字節(jié)加法子程序,編寫十進(jìn)制多字節(jié)加法子程序,Z=X+YZ=X+Y。習(xí)題習(xí)題2 2:編寫多字節(jié)減法子程序,編寫多字節(jié)減法子程序,Z=X-YZ=X-Y。思考題:思考題:修改程序使運算結(jié)果保存到其他存儲單元。修改程序使運算結(jié)果保存到其他存儲單元。2021
58、-11-2143設(shè)被乘數(shù)的高字節(jié)放在設(shè)被乘數(shù)的高字節(jié)放在R7中,低字節(jié)放于中,低字節(jié)放于R6中;乘數(shù)的高字節(jié)放中;乘數(shù)的高字節(jié)放于于R5中,低字節(jié)放于中,低字節(jié)放于R4中。乘得的積有中。乘得的積有4個字節(jié),按由低字節(jié)到高個字節(jié),按由低字節(jié)到高字節(jié)的次序存于片內(nèi)字節(jié)的次序存于片內(nèi)RAM中以中以ADDR為首址的區(qū)域中。為首址的區(qū)域中。 由于由于MCS-51單片機只有一條單字節(jié)無符號數(shù)乘法指令單片機只有一條單字節(jié)無符號數(shù)乘法指令MUL,而且要求參加運算的兩個字節(jié)須放于累加器而且要求參加運算的兩個字節(jié)須放于累加器A和和B寄存器中,而乘得寄存器中,而乘得的結(jié)果高字節(jié)放于的結(jié)果高字節(jié)放于B寄存器中,低字節(jié)
59、放于累加器寄存器中,低字節(jié)放于累加器A中。因而兩字節(jié)中。因而兩字節(jié)乘法須用四次乘法指令來實現(xiàn),即乘法須用四次乘法指令來實現(xiàn),即R6 R4、R7 R4、R6 R5和和R7 R5,設(shè),設(shè)R6 R4的結(jié)果為的結(jié)果為B1A1,R7 R4結(jié)果為結(jié)果為B2A1,R6 R5的的結(jié)果為結(jié)果為B3A3,R7 R5的結(jié)果為的結(jié)果為B4A4,乘得的結(jié)果須按下面的關(guān)系,乘得的結(jié)果須按下面的關(guān)系加起來。加起來。R7R6R5R4B1A1B2A2B3A3B4A4C2C1C4C3+4-6-2 多字節(jié)無符號數(shù)乘除運算2021-11-2144即乘積的最低字節(jié)即乘積的最低字節(jié)C1只由只由A1這部分得到,乘積的第二字節(jié)這部分得到,乘
60、積的第二字節(jié)C2由由B1、A2和和A3相加得到,乘積的第三字節(jié)相加得到,乘積的第三字節(jié)C3由由B2、B3、A4以及以及C2部分部分的進(jìn)位相加得到,乘積的第四字節(jié)的進(jìn)位相加得到,乘積的第四字節(jié)C4由由B4和低字節(jié)的進(jìn)位相加得和低字節(jié)的進(jìn)位相加得到。由于在計算機內(nèi)部不能同時實現(xiàn)多個數(shù)相加,因而我們用累加到。由于在計算機內(nèi)部不能同時實現(xiàn)多個數(shù)相加,因而我們用累加的方法來計算的方法來計算C2、C3和和C4部分,用部分,用R3寄存器來累加寄存器來累加C2部分,用部分,用R2寄存器來累加寄存器來累加C3部分,用部分,用R1寄存器來累加寄存器來累加C4部分,另外用部分,另外用R0作作指針來依次存放指針來依次
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度地形圖保密協(xié)議模板-國土空間數(shù)據(jù)安全合作3篇
- 2024年大米產(chǎn)業(yè)鏈金融投資合作協(xié)議范本3篇
- 2024年度高品質(zhì)肉牛養(yǎng)殖基地建設(shè)合同3篇
- 新疆警察學(xué)院《食品工程與機械1》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年安陽職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫
- 管道產(chǎn)品采購合同范例
- 維修平房合同范例
- 鄉(xiāng)下老屋轉(zhuǎn)讓合同范例
- 場地聯(lián)合經(jīng)營合同范例
- 會議接待服務(wù)合同范例
- 集成電路板維修方法
- 小升初小學(xué)數(shù)學(xué)幾何圖形應(yīng)用題專題練習(xí)《巧算周長》
- 旅游學(xué)概論最新復(fù)習(xí)題庫與答案
- 水電站調(diào)速器系統(tǒng)最權(quán)威講義課件
- 膠合板生產(chǎn)工藝
- TROXLER3440核子密度儀
- 課程設(shè)計--高位自卸汽車的設(shè)計
- 初中數(shù)學(xué)八年級上《整式的乘法及因式分解》知識點及經(jīng)典題型
- 天罡儀表CR40系列數(shù)據(jù)集中器用戶手冊
- 威尼斯狂歡節(jié)長笛鋼琴伴奏譜PierreAgricolaGeninC
- 古傳五禽戲內(nèi)功法詳解(圖)
評論
0/150
提交評論