電腦基礎(chǔ)知識(shí)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第1頁(yè)
電腦基礎(chǔ)知識(shí)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第2頁(yè)
電腦基礎(chǔ)知識(shí)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第3頁(yè)
電腦基礎(chǔ)知識(shí)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第4頁(yè)
電腦基礎(chǔ)知識(shí)匯編語(yǔ)言程序設(shè)計(jì)PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 4-14-1 匯編程序約定匯編語(yǔ)言程序:用匯編語(yǔ)言編寫(xiě)的、完成特定功能的指令序列。匯編程序:能將匯編語(yǔ)言源程序轉(zhuǎn)換成機(jī)器語(yǔ)言目標(biāo)程序的系統(tǒng)軟件。 匯編語(yǔ)言程序到機(jī)器語(yǔ)言程序的轉(zhuǎn)換過(guò)程稱(chēng)為匯編。1.手工匯編:人工查指令表匯編。用于設(shè)計(jì)短小程序或調(diào)試程序的場(chǎng)合。2. .機(jī)器匯編:用匯編程序進(jìn)行匯編。第1頁(yè)/共44頁(yè)5.1.2 5.1.2 匯編語(yǔ)言規(guī)范匯編語(yǔ)言規(guī)范高級(jí)語(yǔ)言:一種面向過(guò)程且獨(dú)立于計(jì)算機(jī)硬高級(jí)語(yǔ)言:一種面向過(guò)程且獨(dú)立于計(jì)算機(jī)硬件結(jié)構(gòu)的通用計(jì)算機(jī)語(yǔ)言件結(jié)構(gòu)的通用計(jì)算機(jī)語(yǔ)言匯編語(yǔ)言格式與偽指令1)1)匯編語(yǔ)言源程序由以下兩種指令構(gòu)成匯編語(yǔ)言源程序由以下兩種指令構(gòu)成匯編語(yǔ)句(指令語(yǔ)句)匯編語(yǔ)

2、句(指令語(yǔ)句)偽指令(指示性語(yǔ)句)偽指令(指示性語(yǔ)句)2)2)匯編語(yǔ)句的格式:匯編語(yǔ)句的格式: 標(biāo)號(hào)標(biāo)號(hào):操作碼操作碼操作數(shù)操作數(shù);注釋?zhuān)蛔⑨?) 偽指令:控制匯編用的特殊指令,這些指令不偽指令:控制匯編用的特殊指令,這些指令不屬于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。屬于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。 第2頁(yè)/共44頁(yè)2. 80C512. 80C51匯編程序設(shè)計(jì)中常用的偽指令匯編程序設(shè)計(jì)中常用的偽指令 (1)ORG 匯編起始指令 規(guī)定目標(biāo)程序的起始地址,格式如下: 標(biāo)號(hào) 操作碼 操作數(shù) ORG 表達(dá)式(exp)必須為16位地址 (2) EQU 賦值指令 把操作數(shù)段中的地址或數(shù)據(jù)賦值給標(biāo)號(hào),格式如下: 標(biāo)號(hào)

3、操作碼 操作數(shù) 字符名稱(chēng) EQU 數(shù)或匯編符號(hào) 例1 AA EQU R1 ;R1與AA等值 則 MOV A, AA 指令與 MOV A,R1指令結(jié)果相同。第3頁(yè)/共44頁(yè)(3)DB(3)DB 從指定單元開(kāi)始定義(存儲(chǔ))若干個(gè)字節(jié)的數(shù)從指定單元開(kāi)始定義(存儲(chǔ))若干個(gè)字節(jié)的數(shù)據(jù)或據(jù)或ASCIIASCII碼字符,常用于定義碼字符,常用于定義8 8位數(shù)據(jù)常數(shù)表。位數(shù)據(jù)常數(shù)表。格式:格式: 操作碼操作碼 操作數(shù)操作數(shù) DB DB 字節(jié)常數(shù)或字節(jié)常數(shù)或ASCIIASCII字符字符例例: :ORGORG 1000H 1000HDBDB34H34H,7373,A A,B BDBDB0AH0AH,0BH0BH,

4、2020則則 (1000H1000H)34H 34H (1001H1001H)49H 49H (1002H1002H)41H 41H (1003H1003H)42H 42H (1004H1004H)0AH 0AH (1005H1005H)0BH0BH (1006H1006H)14H 14H 第4頁(yè)/共44頁(yè)(4 4) DW DW 定義字指令定義字指令 定義程序存儲(chǔ)器中存放的若干個(gè)字的數(shù)據(jù)或定義程序存儲(chǔ)器中存放的若干個(gè)字的數(shù)據(jù)或ASCIIASCII碼字符碼字符1616位常數(shù)表位常數(shù)表格式格式 DW16DW 。 例3 ORG 2200H DW 1246H,7BH,10 則 (2200H)12H (

5、2201H)46H (2202H)00 (2203H)7BH (2204H)00 (2205H)0AH (5) BIT 定義位地址指令 格式 BIT 例4 ABC BIT P1.0 Q4 BIT P2.2 則匯編后,位地址P1.0,P1.2分別賦給變量ABC和Q4。 (6) END 匯編結(jié)束指令第5頁(yè)/共44頁(yè)(7) DATA定義標(biāo)號(hào)數(shù)值為指令 格式: 標(biāo)號(hào) 操作碼 操作數(shù) 符號(hào)名稱(chēng) DATA 表達(dá)式如 MN DATA 3000H ;MN相當(dāng)于3000HDATA與EQU的區(qū)別在于前者可以先使用后定義而后者不行,必須先定義才能使用。(8)DS定義存儲(chǔ)空間指令 功能:從指定地址開(kāi)始保留DS之后表達(dá)

6、式的值所規(guī)定的存儲(chǔ)單元。 格式: 標(biāo)號(hào) 操作數(shù) DS 表達(dá)式例:P105 例7第6頁(yè)/共44頁(yè)判斷框 連接點(diǎn) 圖:常用流程圖符號(hào) 美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)ANSIANSI(American National American National Standard InstituteStandard Institute)設(shè)定了一些常用的流程圖符號(hào)如圖所示:起止框 或 流程線輸入輸出框 處理框5.1.35.1.3 匯編語(yǔ)言程序設(shè)計(jì)步驟一. .分析工作任務(wù)、確定方案和計(jì)算方法二. .了解應(yīng)用系統(tǒng)的硬件配置、性能指標(biāo)。三. .建立系統(tǒng)數(shù)學(xué)模型,確定控制算法和操作步驟。四. .畫(huà)程序流程圖 表示程序結(jié)構(gòu)和程序功

7、能 五. . 編制源程序1.1.合理分配存儲(chǔ)器單元和了解I/OI/O接口地址。2.2.按功能設(shè)計(jì)程序,明確各程序之間的相互關(guān)系。3.3.用注釋行說(shuō)明程序,便于閱讀和修改調(diào)試和修改。開(kāi)始1 YN?第7頁(yè)/共44頁(yè) 5 52 2 順序與循環(huán)程序設(shè)計(jì)順序與循環(huán)程序設(shè)計(jì) 5.2.1 順序程序設(shè)計(jì)(又稱(chēng)簡(jiǎn)單程序) 常用程序結(jié)構(gòu): 順序程序、循環(huán)程序、分支程序、查表程序、子程第8頁(yè)/共44頁(yè)將一個(gè)字節(jié)內(nèi)的兩個(gè)將一個(gè)字節(jié)內(nèi)的兩個(gè)BCD碼拆開(kāi)并變成碼拆開(kāi)并變成ASCII碼,碼, 存入兩個(gè)存入兩個(gè)RAM單元。單元。BCD碼放在內(nèi)碼放在內(nèi)RAM的的20H, 轉(zhuǎn)換后高半字節(jié)放到轉(zhuǎn)換后高半字節(jié)放到21H,低字節(jié)放,低

8、字節(jié)放22H。 BCDH BCDLBCDH BCDL0011001100110011ROMROM21H21H22H22H20H20HBCD碼碼09對(duì)應(yīng)的對(duì)應(yīng)的ASCII碼為碼為30H39H轉(zhuǎn)換時(shí),將轉(zhuǎn)換時(shí),將20H中的中的BCD碼拆開(kāi),高四位置為碼拆開(kāi),高四位置為“0011”即可。即可。BCDHBCDHBCDLBCDL上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄ASCII碼碼即:采用先把即:采用先把20H中低中低4位位BCD碼交換出來(lái)加以轉(zhuǎn)換、碼交換出來(lái)加以轉(zhuǎn)換、存放,然后再把高存放,然后再把高4位位BCD碼交換至低碼交換至低4位加以轉(zhuǎn)換、位加以轉(zhuǎn)換、存放。存放。第9頁(yè)/共44頁(yè) 0011 BCDH0011

9、BCDH0000 00000000 0000 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ù)BCDH BCDLBCDH BCDLBCDLBCDL0000000000110011BCDH BCDLBCDH BCDLROMROM21H21H22H22H20H20H00000

10、000 BCDHBCDH00110011A上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄R0第10頁(yè)/共44頁(yè)5.2.25.2.2 循環(huán)程序包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。循環(huán)控制 ?循環(huán)工作循環(huán)結(jié)束循環(huán)初始化YN各個(gè)環(huán)節(jié)任務(wù):一初始化部分(循環(huán)初態(tài))循環(huán)準(zhǔn)備工作。如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。二循環(huán)體循環(huán)工作部分:需多次重復(fù)處理的工作。循環(huán)控制部分:1.1.修改指針和循環(huán)控制變量。2.2.檢測(cè)循環(huán)條件:滿(mǎn)足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。三. .結(jié)束部分 處理和保存循環(huán)結(jié)果。允許0 0次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測(cè)循環(huán)條件。第11頁(yè)/共44頁(yè)簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)

11、。例2 2:試計(jì)算下列程序段執(zhí)行時(shí)間。 程序 指令執(zhí)行周期 MOV R7MOV R7, #64H #64H 1T1TLOOPLOOP:NOP NOP 1T1T NOP NOP 1T1T DJNZ R7 DJNZ R7, LOOP LOOP 2T2T解:上述程序顯然屬于循環(huán)程序,其算法結(jié)構(gòu)如圖所示。循環(huán)次數(shù)100100次,根據(jù)每條指令的執(zhí)行周期可得每次循環(huán)消耗1+1+2=41+1+2=4(機(jī)器周期),加上第一條指令,整個(gè)程序段共計(jì)消耗時(shí)間為(4 4100+1100+1)T= 401TT= 401T,當(dāng)晶振頻率為6MHZ6MHZ時(shí),T=2sT=2s,故上述程序?qū)嶋H消耗802s802s。第12頁(yè)/共

12、44頁(yè)多重循環(huán)循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。軟件延時(shí)程序。用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。 試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。 源程序指令周期(M) (M) 指令執(zhí)行次數(shù)DELAYDELAY:MOV R6MOV R6,#64H#64H1 1I1I1: MOV R7MOV R7,#0FFH#0FFH1 1I2I2: DJNZ R7DJNZ R7,I2I22 2 DJNZ R6 DJNZ R6,I1I12 2 RET RET2 2延時(shí)時(shí)間計(jì)算:(設(shè)時(shí)鐘f=12MHzf=12MHz,M=1sM=1s)t=(1t=(11+11+1100+2100+2100100255+2255+2100

13、+2100+21)1)M=51.3 msM=51.3 ms1 11001001001002552551001001 1第13頁(yè)/共44頁(yè)習(xí)題:試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。源程序指令周期(M) (M) 指令執(zhí)行次數(shù)DELAYDELAY:MOV R6MOV R6,#100#1001 1D1D1: MOV R7MOV R7,#10#101 1D2D2: NOPNOP1 1 DJNZ R7DJNZ R7,D2D22 2 DJNZ R6 DJNZ R6,D1D12 2 RET RET2 2計(jì)算延時(shí)程序的執(zhí)行時(shí)間( (設(shè)時(shí)鐘f=6MHz)f=6MHz)。第14頁(yè)/共44頁(yè)5 53 3 分支程序設(shè)計(jì)分支程序設(shè)

14、計(jì) 5.3.1 分支程序設(shè)計(jì)綜述 分支程序應(yīng)用要點(diǎn)是正確使用轉(zhuǎn)移指令,通常有如下3種指令。 1. 無(wú)條件轉(zhuǎn)移:與以執(zhí)行程序的結(jié)果無(wú)關(guān),只要給出正確的轉(zhuǎn)移目標(biāo)地址或偏移量即可 2. 條件轉(zhuǎn)移 :根據(jù)已執(zhí)行程序?qū)μ厥饣蛱囟ù鎯?chǔ)器的影響結(jié)果來(lái)決定程序的走向。 3. 散轉(zhuǎn):根據(jù)某種已輸入的或運(yùn)算的結(jié)果,是程序轉(zhuǎn)到各個(gè)處理程序中 第15頁(yè)/共44頁(yè)例例3 3 設(shè)設(shè)5AH5AH單元中有一變量單元中有一變量X X,請(qǐng)編寫(xiě)計(jì),請(qǐng)編寫(xiě)計(jì)算下述函數(shù)式的程序,結(jié)果存入算下述函數(shù)式的程序,結(jié)果存入5BH5BH單元單元 Y= 3X , X 10 Y= 2X +10 , 10= X 155.3.2 無(wú)條件/條件轉(zhuǎn)移程序

15、第16頁(yè)/共44頁(yè) ORG 200H MOV A,5AH ADD A,5AH ;2XA MOV R1,A MOV A,5AH ;重新把X裝入A CJNE A,#10,L1L1: JC L2 ;X15 CJNE A,#10H,L3 ;與16比L3: JNC L4 ;X15轉(zhuǎn)L4 MOV A,R1 ADD A,#10 ;10X15,Y2X10第17頁(yè)/共44頁(yè) MOV R0,A SJMP L4L2: MOV A,R1 ADD A,5AH ;X10,Y=3X MOV R0,AL4 : MOV 5BH,R0 ;存結(jié)果 SJMP $ END第18頁(yè)/共44頁(yè)空調(diào)機(jī)制冷時(shí),若排出的空氣溫度比吸入的空氣空調(diào)

16、機(jī)制冷時(shí),若排出的空氣溫度比吸入的空氣 溫度低溫度低8則認(rèn)為工作正常,否則便認(rèn)為是故障,則認(rèn)為工作正常,否則便認(rèn)為是故障, 并設(shè)置故障標(biāo)志。并設(shè)置故障標(biāo)志。為了可靠的監(jiān)控空調(diào)機(jī)的工作情況,做兩次減法:為了可靠的監(jiān)控空調(diào)機(jī)的工作情況,做兩次減法:第一次(第一次(40H)-(41H),若),若CY=1 ,則肯定有故障;,則肯定有故障;第二次兩個(gè)溫度的差值減去第二次兩個(gè)溫度的差值減去8 ,若,若CY=1 ,則肯定,則肯定有故障有故障程序的流程圖如下:程序的流程圖如下:上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄首先定義一些工作單元首先定義一些工作單元內(nèi)部?jī)?nèi)部RAM40H41H42H吸入溫度值吸入溫度值排出溫度值排出

17、溫度值故障標(biāo)志故障標(biāo)志第19頁(yè)/共44頁(yè)A(40H)-(41H)CY=1?(A)-8ENDSTART Y NCY=1?42HFFH42H0 Y N流程圖:流程圖:上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄故故 障障正常正常第20頁(yè)/共44頁(yè) ORG 1000HSTART:MOV A,40HCLR CSUBB A,41HJC ERRORMOV 42H,#0JC ERRORSUBB A,#8SJMP EXITERROR:MOV 42H,#0FFHEXIT: SJMP $END程序:程序:;吸入溫度值送;吸入溫度值送A; 0 CY; A(40H)-(41H);CY=1,則故障,則故障;是則故障是則故障;溫度小于溫

18、度小于8?;工作正常標(biāo)志工作正常標(biāo)志;轉(zhuǎn)出口轉(zhuǎn)出口;設(shè)置故障標(biāo)志設(shè)置故障標(biāo)志若若CY1順順序執(zhí)行序執(zhí)行CY=1轉(zhuǎn)轉(zhuǎn)移移CY=1轉(zhuǎn)轉(zhuǎn)移移若若CY1順順序執(zhí)行序執(zhí)行上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄第21頁(yè)/共44頁(yè)5.3.3 5.3.3 散轉(zhuǎn)程序設(shè)計(jì)散轉(zhuǎn)程序設(shè)計(jì) 例5 根據(jù)R3的內(nèi)容,轉(zhuǎn)向各個(gè)操作程序。 R30, 轉(zhuǎn)入OPR0 R31, 轉(zhuǎn)入OPR1. R3n, 轉(zhuǎn)入OPRn 解:程序清單如下。 MOV DPTR,TAB1 ;跳轉(zhuǎn)表首地址送數(shù)據(jù)指針 MOV A,R3 ;R32 A(修正變址值) ADD A,R3 JNC NOAD ;判有否進(jìn)位 INC DPH ;有進(jìn)位則加到高字節(jié)地址 NOAD: JM

19、P ADPTR ;轉(zhuǎn)向形成的散轉(zhuǎn)地址入口 TAB1: AJMP OPR0 ;轉(zhuǎn)移到OPR0 AJMP OPR1. AJMP OPRn第22頁(yè)/共44頁(yè)5.4 5.4 查表程序上頁(yè)上頁(yè) 下頁(yè)下頁(yè)回目錄回目錄對(duì)于復(fù)雜參數(shù)的計(jì)算如對(duì)于復(fù)雜參數(shù)的計(jì)算如:非線性參數(shù)非線性參數(shù)對(duì)數(shù)、指數(shù)、三角函數(shù)對(duì)數(shù)、指數(shù)、三角函數(shù)微分、積分等微分、積分等用匯編編程十分困難用匯編編程十分困難甚至無(wú)法建立數(shù)學(xué)模型甚至無(wú)法建立數(shù)學(xué)模型用用查表查表的方法簡(jiǎn)單容易的方法簡(jiǎn)單容易80C51指令系統(tǒng)中有兩條指令具有極強(qiáng)的查表功能指令系統(tǒng)中有兩條指令具有極強(qiáng)的查表功能(1) MOVC A,A+DPTR作作基址寄存器基址寄存器作作變址寄

20、存器變址寄存器長(zhǎng)查表指令長(zhǎng)查表指令尋址尋址64KB(2) MOVC A,A + PC作基址寄存器作基址寄存器作變址作變址短查表指令短查表指令頁(yè)內(nèi)查表指令頁(yè)內(nèi)查表指令指向表格首址指向表格首址指向表格的第指向表格的第 i 項(xiàng)項(xiàng)16位數(shù)據(jù)指針位數(shù)據(jù)指針第第i項(xiàng)加項(xiàng)加變址調(diào)整值變址調(diào)整值不能不能第23頁(yè)/共44頁(yè)例例6:一個(gè)十六進(jìn)制數(shù)放在一個(gè)十六進(jìn)制數(shù)放在HEX單元的低四位單元的低四位,將其轉(zhuǎn)換成將其轉(zhuǎn)換成ASCII碼碼 查表程序:查表程序:解:解:十六進(jìn)制十六進(jìn)制 09 的的ASCII碼為碼為 30H39H, AF 的的ASCII碼為碼為 41H46H, 利用查表指令利用查表指令 MOVC A,A+

21、DPTRMOVC A,A+PC先用偽指令先用偽指令 DB 或或 DW 把表格的數(shù)據(jù)存入把表格的數(shù)據(jù)存入ROM上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄來(lái)獲得數(shù)據(jù)來(lái)獲得數(shù)據(jù)ASCII碼表格的首址為碼表格的首址為ASCIITAB第24頁(yè)/共44頁(yè)ASCTAB:DB 30H,31H,32H,33HDB 34H,35H,36H,37HDB 38H,39H,41H,42HDB 43H,44H,45H,46H END上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄編程編程1: 0 1 2 3 4 5 6 7 8 9 A B C D E F ORG 0200HHEX EQU 30HHEXASC: MOV A,HEXMOV DPTR,#ASC

22、TABMOVC A,A+DPTRMOV HEX,ARETANL A,#0FHDPTR(A)= 333H(A)= 1546H第25頁(yè)/共44頁(yè)例例1 1 設(shè)計(jì)一個(gè)將設(shè)計(jì)一個(gè)將1616進(jìn)制數(shù)轉(zhuǎn)換成進(jìn)制數(shù)轉(zhuǎn)換成ASCIIASCII碼的子程序,設(shè)碼的子程序,設(shè)1616進(jìn)制進(jìn)制數(shù)存放在數(shù)存放在R0R0的低的低4 4位,要求將轉(zhuǎn)換后的位,要求將轉(zhuǎn)換后的ASCIIASCII碼送回碼送回R0R0。 ORG 30H MOV A,R0 ANL A,0FH ; 保留低4位 ADD A,2 ;變址調(diào)整 MOVC A,APC;查表獲取ASCII碼值 MOV R0,A RET TAB:DB 30H,31H,32H,33H

23、,34H,35H DB 36H,37H,38H,39H,41H,42H,43H,44H,45H,46H 第26頁(yè)/共44頁(yè)5.5 子程序設(shè)計(jì)子程序設(shè)計(jì)一、子程序的概念一、子程序的概念把能完成某種基本操作并具有相同操作的程序段單獨(dú)把能完成某種基本操作并具有相同操作的程序段單獨(dú) 編成子程序。編成子程序。如:函數(shù)、如:函數(shù)、 運(yùn)算、代碼轉(zhuǎn)換、延時(shí)等運(yùn)算、代碼轉(zhuǎn)換、延時(shí)等利用調(diào)用子程序指令(利用調(diào)用子程序指令(ACALL或或LCALL)和從子程序返)和從子程序返回指令回指令RET使用子程序的優(yōu)點(diǎn)使用子程序的優(yōu)點(diǎn) 不必重復(fù)書(shū)寫(xiě)同樣的程序,提高編程效率不必重復(fù)書(shū)寫(xiě)同樣的程序,提高編程效率 程序的邏輯結(jié)構(gòu)簡(jiǎn)

24、單,便于閱讀程序的邏輯結(jié)構(gòu)簡(jiǎn)單,便于閱讀 縮短了源程序和目標(biāo)程序的長(zhǎng)度,節(jié)省了存儲(chǔ)器空間縮短了源程序和目標(biāo)程序的長(zhǎng)度,節(jié)省了存儲(chǔ)器空間 使程序模塊化、通用化、便于交流共享資源使程序模塊化、通用化、便于交流共享資源 便于按某種功能調(diào)試便于按某種功能調(diào)試上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄第27頁(yè)/共44頁(yè)二、調(diào)用子程序的要點(diǎn)二、調(diào)用子程序的要點(diǎn) 子程序開(kāi)頭的標(biāo)號(hào)段必須有一個(gè)標(biāo)志,該子程序開(kāi)頭的標(biāo)號(hào)段必須有一個(gè)標(biāo)志,該標(biāo)志標(biāo)志既是子程序既是子程序的的名字名字又是其又是其入口地址入口地址,以便主程序調(diào)用。,以便主程序調(diào)用。在主程序中利用指令在主程序中利用指令A(yù)CALL或或LCALL可轉(zhuǎn)入子程序??赊D(zhuǎn)入子程序

25、。 該指令具有保護(hù)該指令具有保護(hù)斷點(diǎn)斷點(diǎn)的功能的功能例如:調(diào)用延時(shí)子程序例如:調(diào)用延時(shí)子程序LCALL(ACALL) DELY 子程序結(jié)尾必須使用一條從子程序返回指令子程序結(jié)尾必須使用一條從子程序返回指令RET,它具有恢復(fù)斷點(diǎn)的功能它具有恢復(fù)斷點(diǎn)的功能LCALL addr16LCALL addr16; PC addr16 ; PC addr16 轉(zhuǎn)向子程序轉(zhuǎn)向子程序;(PC(PC) (PCPC)+3+3;SP (SP)+1SP (SP)+1,(SP),(SP) PC7 PC70 0;SP (SP)+1,(SP) SP (SP)+1,(SP) PC15PC158 8;在調(diào)用子程序之前,保護(hù);在調(diào)

26、用子程序之前,保護(hù)斷點(diǎn)地址斷點(diǎn)地址RETRET; PC15PC158 (SP) ,8 (SP) ,(SPSP) (SPSP) -1-1; PC7PC70 (SP) ,0 (SP) ,(SPSP) (SPSP) -1-1主程序主程序CALL斷點(diǎn)斷點(diǎn)子程序子程序RET1、子程序的結(jié)構(gòu)、子程序的結(jié)構(gòu)上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄子程序特點(diǎn):功能上有通用性,結(jié)構(gòu)上有獨(dú)立性第28頁(yè)/共44頁(yè)2、正確的參數(shù)傳遞、正確的參數(shù)傳遞 在調(diào)用一個(gè)子程序時(shí),主程序應(yīng)先把有關(guān)參在調(diào)用一個(gè)子程序時(shí),主程序應(yīng)先把有關(guān)參數(shù)放到某些約定的位置(如累加器、工作寄存器數(shù)放到某些約定的位置(如累加器、工作寄存器等),子程序運(yùn)行時(shí),可

27、以從約定的位置得到有等),子程序運(yùn)行時(shí),可以從約定的位置得到有關(guān)參數(shù)。子程序結(jié)束前,也應(yīng)把處理結(jié)果送到約關(guān)參數(shù)。子程序結(jié)束前,也應(yīng)把處理結(jié)果送到約定位置定位置上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄3、子程序的通用性、子程序的通用性 為了使程序具有一定的通用性,子程序的操為了使程序具有一定的通用性,子程序的操作對(duì)象應(yīng)盡量采用地址或寄存器形式,而不用立作對(duì)象應(yīng)盡量采用地址或寄存器形式,而不用立即數(shù)形式。即數(shù)形式。第29頁(yè)/共44頁(yè)4、現(xiàn)場(chǎng)保護(hù)、現(xiàn)場(chǎng)保護(hù) 如果子程序使用的寄存器與主程序使用的寄存器如果子程序使用的寄存器與主程序使用的寄存器 有沖突,在轉(zhuǎn)入子程序前,特別是進(jìn)行中斷服務(wù)有沖突,在轉(zhuǎn)入子程序前,特別

28、是進(jìn)行中斷服務(wù) 子程序時(shí),要進(jìn)行現(xiàn)場(chǎng)保護(hù)。子程序時(shí),要進(jìn)行現(xiàn)場(chǎng)保護(hù)。主程序使用的內(nèi)部主程序使用的內(nèi)部 RAM 內(nèi)容,各工作寄存器內(nèi)容,內(nèi)容,各工作寄存器內(nèi)容,累加器累加器 A 和和 DPTR 以及以及 PSW 等寄存器內(nèi)容。等寄存器內(nèi)容。將要保護(hù)的單元壓入堆棧。將要保護(hù)的單元壓入堆棧。上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄中斷保護(hù)時(shí)中斷保護(hù)時(shí):還可以用還可以用 RS1 RS0 來(lái)選擇其他通用寄存器組,來(lái)選擇其他通用寄存器組, 以便保護(hù)主程序現(xiàn)場(chǎng)。以便保護(hù)主程序現(xiàn)場(chǎng)。R0 R7第30頁(yè)/共44頁(yè)5.5.2 5.5.2 子程序設(shè)計(jì)子程序設(shè)計(jì) 例1 用程序?qū)崿F(xiàn)c a2b2。設(shè)a、b均小于10。a存在31H單元

29、中,b存在32H單元,把c存入33H單元。 解:因本題二次用到平方值,所以在程序中采用把求平方的程序段編為子程序的方法。依題意編寫(xiě)主程序和子程序如下:第31頁(yè)/共44頁(yè) 地址 機(jī)器碼 源程序 ORG 200H 200 75 81 3F MOV SP,3FH ;設(shè)堆棧指針 203 E5 31 MOV A,31H ;取a值 205 12 04 00 LCALL SQR ;求a2 208 F9 MOV R1,A ;a2值暫存R1 209 E5 32 MOV A,32H ;取b值 20B 12 04 00 LCALL SQR ;求b2 20E 29 ADD A,R1 ;求a2b2 20F F5 33

30、MOV 33H,A ;存入33H 第32頁(yè)/共44頁(yè) ; 子程序 地址 機(jī)器碼 源程序 ORG 400H 400 04 SQR: INC A 401 83 MOVC A,APC 401 22 RET 403 1 4 9 16 TAB: DB 0,1, 4, 9,16 408 25 36 49 DB 25,36,49 40B 64,81 DB 64,81第33頁(yè)/共44頁(yè)子程序的嵌套子程序的嵌套 子程序中可調(diào)用其他子程序子程序中可調(diào)用其他子程序 數(shù)據(jù)處理程序如下數(shù)據(jù)處理程序如下.MAIN: MOV SP, #5FACALL RLC4.;定義堆棧指針定義堆棧指針;處理過(guò)程處理過(guò)程;調(diào)用子程序調(diào)用子

31、程序;上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄第34頁(yè)/共44頁(yè)多重嵌套的過(guò)程多重嵌套的過(guò)程SPSP *PC0L *PC0H *PC1L*PC1H5FH60H61H62H63H64H65H*PC2H*PC2L 斷點(diǎn)入棧斷點(diǎn)入棧斷點(diǎn)入棧斷點(diǎn)入棧SPSP斷點(diǎn)斷點(diǎn)入棧入棧SPSPSPSP彈出斷點(diǎn)彈出斷點(diǎn)彈出斷點(diǎn)彈出斷點(diǎn)SPSP彈出斷點(diǎn)彈出斷點(diǎn)SPSP上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄棧棧 底底 子程序與主程序的概念子程序與主程序的概念是相對(duì)的,在一個(gè)子程序中是相對(duì)的,在一個(gè)子程序中又可調(diào)用其它子程序,這就又可調(diào)用其它子程序,這就是子程序的多重嵌套。是子程序的多重嵌套。堆棧的設(shè)置是十分重要的堆棧的設(shè)置是十分重要的第35

32、頁(yè)/共44頁(yè) 多字節(jié)無(wú)符號(hào)數(shù)減法子程序多字節(jié)無(wú)符號(hào)數(shù)減法子程序NSUB(R0)=被減數(shù)低字節(jié)指針(被減數(shù)低字節(jié)指針(R1)=減數(shù)低字節(jié)指針減數(shù)低字節(jié)指針(R7)= 字節(jié)數(shù)字節(jié)數(shù)n(R0)=差數(shù)高字節(jié)地址指針差數(shù)高字節(jié)地址指針若被減數(shù)大于減數(shù),則差為正數(shù);若被減數(shù)小于若被減數(shù)大于減數(shù),則差為正數(shù);若被減數(shù)小于 減數(shù),則差為補(bǔ)碼數(shù)(負(fù)數(shù)),且差數(shù)為減數(shù),則差為補(bǔ)碼數(shù)(負(fù)數(shù)),且差數(shù)為n字節(jié)字節(jié)上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄5.6 5.6 綜合編程舉例綜合編程舉例 第36頁(yè)/共44頁(yè)流程圖:流程圖:0CY (R0)-(R1)-CY(R0)RETNSUB(R7)-1=0?修改地址指針修改地址指針(R0)

33、+1R0,R1+1R1 NNSUB: CLR CLOOP: MOV A,R0 NOP MOV R0, ASUBB A, R1INC R0INC R1DJNZ R7, LOOPDEC R0RET程序:程序:上頁(yè)上頁(yè)下頁(yè)下頁(yè)回目錄回目錄第37頁(yè)/共44頁(yè) 雙字節(jié)無(wú)符號(hào)數(shù)快速乘法子程序雙字節(jié)無(wú)符號(hào)數(shù)快速乘法子程序MULD(R7R6)= 被乘數(shù)被乘數(shù)ab(R5R4)= 乘數(shù)乘數(shù)cd(R0)= 有定義的內(nèi)部有定義的內(nèi)部RAM地址地址(R0)= 乘積的高字節(jié)地址指針乘積的高字節(jié)地址指針于兩個(gè)雙字節(jié)無(wú)符號(hào)數(shù)相乘,用于兩個(gè)雙字節(jié)無(wú)符號(hào)數(shù)相乘,用8位乘法指令來(lái)完成位乘法指令來(lái)完成需要四次,每次的乘積為需要四次,每次的乘積為16位,會(huì)產(chǎn)生位,會(huì)產(chǎn)生4個(gè)部分積,共需個(gè)部分積,共需要要8個(gè)單元存放,然后再按個(gè)單元存放,然后再按“位權(quán)位權(quán)”相加,和即為所求之相加,和即為所求之積。這樣所占存儲(chǔ)單元太多,應(yīng)該采用邊乘邊加的方法。積。這樣所占存儲(chǔ)單元太多,應(yīng)該采用邊乘邊加的方法。用用R3、R2、R1作暫存器或工作單元。作暫存器或工作單元。上頁(yè)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論