匯編語言程序設(shè)計_第1頁
匯編語言程序設(shè)計_第2頁
匯編語言程序設(shè)計_第3頁
匯編語言程序設(shè)計_第4頁
匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計演示文稿當(dāng)前1頁,總共55頁。(優(yōu)選)匯編語言程序設(shè)計當(dāng)前2頁,總共55頁。匯編語言特點程序精練,執(zhí)行速度快,適合于實時控制處理接口技術(shù)、中斷技術(shù)很方便需要熟悉硬件,編程有一定難度高級語言面向?qū)ο蠛蛦栴},接近自然語言,易學(xué)易用獨立于機器一條語句可對應(yīng)一段匯編語言程序既然有了高級語言,為什么還要學(xué)習(xí)匯編語言?當(dāng)前3頁,總共55頁。二、匯編語言源程序的格式MCS-51的匯編語句采用典型的四分段格式:標(biāo)號段操作碼段操作數(shù)段注釋段標(biāo)號的構(gòu)成原則是什么?注釋段起什么作用? ORG 0030HMAIN: MOV A,#00H ;A←0 MOV R2#0AH ;R2←10 MOV R1,#03H ;R1←3LOOP: ADD A,R1 ;A←A+R1 DJNZR2,LOOP ;未完,轉(zhuǎn)LOOP NOP SJMP $ END當(dāng)前4頁,總共55頁。標(biāo)號構(gòu)成:大寫字母開頭后跟字母或數(shù)字,最多8個字符。限制條件:禁止用保留字做標(biāo)號,如MOV、ADD、END等。禁止用寄存器號,如ACC、DPTR等。標(biāo)號作用:用做符號地址。操作數(shù)的表示形式當(dāng)前5頁,總共55頁。三、偽指令起始指令:ORG匯編結(jié)束:END─指導(dǎo)匯編過程的命令ORG 1000H MOV R0,#50H ;R0←50HMOV@R0,30H ;50H←(30H)SJMP$END當(dāng)前6頁,總共55頁。定義字節(jié):DB──定義若干個8位數(shù)據(jù)例:ORG3000HTABL:DB30H,31H,’2’,’A’匯編后:TABL=3000H

(3000H)=30H, (3001H)=31H, (3002H)=32H, (3003H)=41H,當(dāng)前7頁,總共55頁。定義字:DW──定義若干個16位數(shù)據(jù)匯編后:TAB=3010H

(3010H)=12H

(3011H)=34H

(3012H)=00H

(3013H)=56H

例:

ORG3010HTAB:DW1234H,56H當(dāng)前8頁,總共55頁。賦值:EQU──將一個數(shù)或符號賦給變量 ORG 1000H AA EQU R1A10 EQU 10HDEL EQU 07E6H MOV R0,A10;R0←(10H) MOVA,AA;A←R1 LCALLDEL ;調(diào)用子程序

…… END當(dāng)前9頁,總共55頁。位地址賦值:BIT──將位地址賦給字符 ORG 0500H A1 BIT 00H SETB C ;CY←1 MOVA1,C;(20H)0

←1 …… END當(dāng)前10頁,總共55頁。四、源程序的匯編第一次匯編:查出機器碼,并對應(yīng)地址列表第二次匯編:計算偏移量什么叫匯編?有幾種匯編的方法?1.手工匯編當(dāng)前11頁,總共55頁。查書后附錄,找出每條指令的機器嗎,遇到標(biāo)號或地址偏移量就先原樣照寫,按下表所示,對照地址列出來第一次匯編當(dāng)前12頁,總共55頁。Rel=目標(biāo)地址-源地址-3(對3字節(jié)指令)第二次匯編

──計算偏移量LOOP=1008H-1003H-3=02HNEXT=1009H-100BH-3=-5,補碼為FBH同理可得:$=FEH,HERE=-12,補碼為F4H當(dāng)前13頁,總共55頁。2.機器匯編利用專用軟件(稱為匯編程序),由計算機完成匯編工作。經(jīng)過兩次掃描過程:第一次掃描:檢查語法錯誤,確定符號名字;建立使用的全部符號名字表;每一符號名字后跟一對應(yīng)值(地址或數(shù))。第二次掃描:是在第一次掃描基礎(chǔ)上,將符號地址轉(zhuǎn)換成地址(代真);利用操作碼表將助記符轉(zhuǎn)換成相應(yīng)的目標(biāo)碼。

當(dāng)前14頁,總共55頁。4.2匯編語言程序的結(jié)構(gòu)一、匯編語言程序設(shè)計步驟1.分析題意,明確要求2.建立數(shù)學(xué)模型并確定算法將控制對象的物理過程歸納為數(shù)學(xué)模型常見數(shù)學(xué)模型有:數(shù)學(xué)表達(dá)式數(shù)學(xué)的推理和判斷運行狀態(tài)的模擬例如:測量距離的數(shù)學(xué)表達(dá)式工件表面形狀的數(shù)學(xué)表達(dá)式當(dāng)前15頁,總共55頁。3.畫程序流程圖程序流程圖是解題步驟及算法的具體化直觀清晰地體現(xiàn)了程序的設(shè)計思路4.分配內(nèi)存單元確定程序與數(shù)據(jù)區(qū)的存放地址熟悉所用單片機指令系統(tǒng)所編程序要正確并具有可讀性5.編寫程序當(dāng)前16頁,總共55頁。6.程序優(yōu)化縮短程序長度加快運行速度節(jié)省存儲單元7.上機調(diào)試檢驗源程序的正確性使用開發(fā)系統(tǒng)利用仿真軟件當(dāng)前17頁,總共55頁。二、順序程序結(jié)構(gòu)

根據(jù)ASCII碼表,十進制數(shù)0~9的ASCII碼和它的BCD碼之間僅相差30H,本題需要把一個字節(jié)的兩位BCD數(shù)進行拆分,然后分別和30H拼接,即得到相應(yīng)的ASCII碼。程序按順序執(zhí)行,無分支,無轉(zhuǎn)移例1:將壓縮BCD碼轉(zhuǎn)換成ASCII碼當(dāng)前18頁,總共55頁。源程序XCHD是什么指令?SWAP是什么指令?ORG 0030HMOV R0, #22HMOV @R0 #00HMOV A, 20HXCHD A, @R0ORL 22H, #30HSWAP AORL A, #30HDEC R0MOV @R0, ASJMP $END當(dāng)前19頁,總共55頁。三、分支程序結(jié)構(gòu)具有判斷和轉(zhuǎn)移功能的程序【例4-4】求符號函數(shù)Y的值已知在VAR單元內(nèi)有一變量X,要求按如下函數(shù)關(guān)系求Y值,并將結(jié)果送到FUNC單元當(dāng)前20頁,總共55頁。源程序JNBACC.7,POSI是什么指令? ORG 0030HVAR EQU 30HFUNCEQU 31H MOV A,VAR;A←X JZ DONE ;若X=0,則DONE JNB ACC.7, POSI;若X>0,則POSI MOV A,#0FFH;若X<0,A←-1 SJMP DONE ;轉(zhuǎn)DONEPOSI: MOV A,#01H;A←1DONE: MOV FUNC,A;存結(jié)果

SJMP $

END當(dāng)前21頁,總共55頁。四、循環(huán)程序結(jié)構(gòu)2.先判斷后處理1.先處理后判斷當(dāng)前22頁,總共55頁。例1:已知數(shù)塊長度L,求累加和已知內(nèi)部RAM的BLOCK單元開始有一無符號數(shù)據(jù)塊,塊長在LEN單元。請編出求數(shù)據(jù)塊中各數(shù)累加和、并存入SUM單元的程序當(dāng)前23頁,總共55頁。解法一:先處理后判斷 ORG 0030HLEN EQU 20HSUM EQU 21HBLOCKEQU 22H CLR A ;A←0 MOV R2,LEN;R2←L MOV R1,#BLOCK;R1←BLOCKNEXT: ADD A,@R1;A←A+(R1) INC R1 ;R1←R1+1 DJNZ R2,NEXT;R2-1≠0轉(zhuǎn)NEXT MOV SUM,A;存結(jié)果

SJMP $

END當(dāng)前24頁,總共55頁。解法二:先判斷后處理程序中INCR2指令有什么用途? ORG 0030HLEN EQU 20HSUM EQU 21HBLOCKEQU 22H CLR A ;A←0 MOV R2,LEN;R2←L MOV R1,#BLOCK;R1←BLOCK INC R2 SJMP CHEKNEXT: ADD A,@R1;A←A+(R1) INC R1 ;R1←R1+1CHEK: DJNZ R2,NEXT;R2-1≠0轉(zhuǎn)NEXT MOV SUM,A;存結(jié)果

SJMP $

END當(dāng)前25頁,總共55頁。例2:查找最大值算法:逐個比較,大數(shù)送指定單元當(dāng)前26頁,總共55頁。查找最大值源程序JCNEXT是什么指令?1 ORG 0030HLEN EQU 20HMAX EQU 21HBLOCKEQU 22H MOV MAX,#00H ;A←0 MOV R0,#BLOCK ;R2←LLOOP: MOV A,@R0 ;A←數(shù)據(jù)

CJNE A,MAX,NEXT1NEXT1: JC NEXT;A<(MAX)則轉(zhuǎn)

MOV MAX,A;MAX←大數(shù)NEXT: INC R0 ;R2-1≠0轉(zhuǎn)NEXT DJNZ LEN,LOOP;存結(jié)果

SJMP $

END當(dāng)前27頁,總共55頁。五、主程序調(diào)用子程序結(jié)構(gòu)絕對調(diào)用:ACALLaddr11長調(diào)用:LCALLaddr16子程序返回:RET當(dāng)前28頁,總共55頁。例:將一批壓縮BCD碼轉(zhuǎn)換成ASCII碼

編寫程序,把以R0為首地址的壓縮BCD碼轉(zhuǎn)換為ASCII碼,存于以R1為首地址的片內(nèi)RAM中,已知BCD數(shù)的字節(jié)數(shù)在R2中

BCD碼與ASCII碼之間是什么關(guān)系呢?當(dāng)前29頁,總共55頁。

BCD碼ASCII碼

0 30H 1 31H 2 32H 3 33H 4 34H 5 35H 6 36H 7 37H 8 38H 9 39H(A)+30H[]ASCII將其編成子程序,如下所示

當(dāng)前30頁,總共55頁。 ORG 0000HSTART:MOV A, @R0 ACALLGT ;調(diào)用轉(zhuǎn)換子程序

MOV @R1,A ;存轉(zhuǎn)換結(jié)果

INC R1 MOV A, @R0 ;再取原BCD碼字節(jié)

SWAPA ;高4位交換到低4位

ACALLGT ;調(diào)用轉(zhuǎn)換子程序

MOV @R1,A INC R0 INC R1 DJNZ R2, START;未完繼續(xù)

HRER:SJMP HERE GT: ANL A, #0FH ;屏蔽高4位

ADD A, #30H ;求相應(yīng)的ASCII碼

RET END

然后再編寫主程序,調(diào)用下面子程序?qū)崿F(xiàn)本題要求本例的參數(shù)傳遞方式為傳遞數(shù)據(jù)當(dāng)前31頁,總共55頁。下次課前請預(yù)習(xí)4.3-4.4節(jié),并思考下列問題欲將外部RAM起始地址為DATA的數(shù)據(jù)塊(設(shè)數(shù)據(jù)塊長度為20)傳送到內(nèi)部RAM起始地址為30H的存儲區(qū),應(yīng)如何編程?已知以外部RAM2000H為起始地址的存儲區(qū)有20個有符號數(shù),要求把正數(shù)和正零取出來存放到內(nèi)部RAM以20H為起始地址的存儲區(qū)(負(fù)數(shù)和負(fù)零不作處理),如何編程?當(dāng)前32頁,總共55頁。練習(xí)題一已知被除數(shù)和除數(shù)都是8位無符號數(shù),欲將這兩數(shù)相除,并把商和余數(shù)放到指定單元,試說明編程思路已知X和Y都是8位無符號數(shù),要完成如下計算

Z=3X+2Y,并將結(jié)果Z(設(shè)Z<255)送到指定單元,試說明編程思路當(dāng)前33頁,總共55頁。4.3算術(shù)運算程序設(shè)計運算程序加法程序減法程序乘法程序除法程序當(dāng)前34頁,總共55頁。一、加法程序例1:3字節(jié)加法程序當(dāng)前35頁,總共55頁。多字節(jié)無符號數(shù)相加的算法間接尋址,循環(huán)相加當(dāng)前36頁,總共55頁。3字節(jié)加法源程序程序中為什么要用CLRC這條指令?

ORG 1000H

MOV R0,

#BLOCK1

;R0←BLOCK1

MOV R1,

#BLOCK2

;R1←BLOCK2

MOV R3,

#03H ;字節(jié)數(shù)送R3

CLR C

;清進位LOOP:

MOV A, @R0 ;取被加數(shù) ADDC A, @R1 ;加上加數(shù) MOV @R0, A ;存和 INC R0

;修改被加數(shù)指針 INC R1

;修改加數(shù)指針 DJNZ R3, LOOP ;R3-1≠0轉(zhuǎn)LOOP SJMP $ END當(dāng)前37頁,總共55頁。例2:8位有符號數(shù)加法運算例:設(shè)在BLOCK和BLOCK+1單元中有兩個補碼形式的有符號數(shù)。請編出求兩數(shù)之和,并把它放在SUM和SUM+1單元(低8位在SUM單元)的程序

算法:兩個8位二進制有符號數(shù)相加,其和可能會超過8位數(shù),故需要用16位表示,因此要先將這兩個加數(shù)擴展成16位二進制補碼,然后再相加當(dāng)前38頁,總共55頁。將8位二進制有符號數(shù)擴展成16位的方法對正數(shù),高8位補0對負(fù)數(shù),高8位補1當(dāng)前39頁,總共55頁。8位有符號數(shù)加法運算源程序

ORG

1000H

MOVR0,#BLOCK

;R0←BLOCK1

MOVR1,#SUM

;R1指向和單元MOVR2,#00H;高位先令其為零MOVR3,#00HMOVA,@R0

;取一個加數(shù) JNBACC.7,POS1

;若為正數(shù),則轉(zhuǎn)POS1MOVR2,#0FFH;若為負(fù),R2←全“1”當(dāng)前40頁,總共55頁。POS1: INC

R0

;R0指向下一個加數(shù)MOV

B,

@R0

;取第二加數(shù)到BJNB

B.7,

POS2;若為正數(shù),則轉(zhuǎn)POS2

MOV

R3,

#0FFH;若為負(fù),R3←全“1”POS2:

ADD

A,

B

;低8位相加MOV

@R1,

A

;存低8位和INC

R1

;指向SUM+1MOV

A,

R2ADDC

A,

R3

;完成高8位求和MOV

@R1,

A

;存高8位和

RET END當(dāng)前41頁,總共55頁。二、減法程序在BLOCK1和BLOCK2為起始地址的片內(nèi)RAM中分別有5字節(jié)無符號被減數(shù)和減數(shù)。要求將它們相減,并把差值放入BLOCK1為起始地址的片內(nèi)RAM中多字節(jié)無符號數(shù)減法程序的算法:間接尋址,循環(huán)相減當(dāng)前42頁,總共55頁。5字節(jié)無符號數(shù)減法子程序 ORG1000HMOVR0,#BLOCK1 ;被減數(shù)始址送R0MOVR1,#BLOCK2;減數(shù)始址送R1MOVR2,#05H ;字長送R2 CLRC ;Cy清零LOOP:MOVA,@R0 ;被減數(shù)送ASUBBA,@R1 ;相減

MOV@R0,A ;存差

INCR0 ;修改被減數(shù)指針

INCR1 ;修改減數(shù)地址指針

DJNZR2,LOOP ;若未完,則LOOPRETEND當(dāng)前43頁,總共55頁。三、乘除法程序例:設(shè)R0和R1中有兩個補碼形式的有符號數(shù),要求編寫求兩數(shù)之積并把積送入R3R2的程序

MCS-51乘法指令是對兩個無符號數(shù)求積的。若要對兩個有符號數(shù)求積,可采用對符號位單獨處理的辦法,步驟如下:單獨處理積的符號位將被乘數(shù)和乘數(shù)的絕對值相乘得積的絕對值求乘積的補碼:若積為正,則補碼就是原碼;若積為負(fù),則對乘積的絕對值求補當(dāng)前44頁,總共55頁。8位有符號數(shù)乘法程序框圖當(dāng)前45頁,總共55頁。8位有符號數(shù)乘法源程序SBITBIT20H.0SBIT1BIT20H.1SBIT2BIT20H.2MOVA,R0 ;被乘數(shù)送ARLCA ;被乘數(shù)符號送CyMOVSBIT1,C;送入SBIT1MOVA,R1 ;乘數(shù)送ARLCA ;乘數(shù)符號送CyMOVSBIT2,C ;送入SBIT2ANLC,/SBIT1;SBIT2∧/SBIT1送CyMOVSBIT,C;送入SBITMOVC,SBIT1;SBIT1送CyANLC,/SBIT2;SBIT1∧/SBIT2送CyORLC,SBIT;積的符號位送CyMOVSBIT,C;送入SBITMOVA,R0 ;處理被乘數(shù)

JNBSBIT1,NCH1;若它為正,則轉(zhuǎn)NCH1CPLA ;若它為負(fù),則求補得絕對值

INCA當(dāng)前46頁,總共55頁。8位有符號數(shù)乘法源程序(續(xù))NCH1:MOVB,A ;被乘數(shù)絕對值送BMOVA,R1;處理乘數(shù)

JNBSBIT2,NCH2;若它為正,則轉(zhuǎn)NCH2CPLA ;若它為負(fù),則求補得絕對值

ADDA,#01HNCH2:MULAB ;求積的絕對值

JNBSBIT,NCH3;若它為正,則轉(zhuǎn)NCH3CPLA ;若它為負(fù),則低字節(jié)求補

ADDA,#01HNCH3:MOVR2,A ;積的低字節(jié)存入R2MOVA,B ;積的高字節(jié)送AJNBSBIT,NCH4;若它為正,則轉(zhuǎn)NCH4CPLA ;若它為負(fù),則高字節(jié)求補

ADDCA,#00HNCH4:MOVR3,A;積的高字節(jié)存入R3SJMP$ END跟00H相加有什么意義?當(dāng)前47頁,總共55頁。4.4非數(shù)值操作程序設(shè)計非數(shù)值操作程序碼制轉(zhuǎn)換程序查表程序檢索程序當(dāng)前48頁,總共55頁。一、碼制轉(zhuǎn)換程序例:單字節(jié)二進制數(shù)→

BCD碼當(dāng)前49頁,總共55頁。單字節(jié)二進制數(shù)→

BCD碼算法單字節(jié)無符號數(shù)最大可能是255,其中所包含的100(64H)的個數(shù)即為BCD碼的百位數(shù);扣去百位數(shù)后的余數(shù)中所包含的10(0AH)的個數(shù)即為BCD碼的十位數(shù);扣去十位數(shù)后的余數(shù)即為BCD碼的個位數(shù)轉(zhuǎn)換后的結(jié)果放在(30H)(31H)中,如下所示:

百30H個31H十當(dāng)前50頁,總共55頁。單字節(jié)二進制數(shù)→

BCD碼源程序

ORG

1000HFIRSTEQU30HSECONDEQU31H

MOV A, 20H ;

A

←被除數(shù)

MOV

B, #64H

;

B

←100 DIV AB

;

A/B=A…B

MOV

FIRST, A

;FIRST←百位 MOV A, B

;

A

←余數(shù)

MOV

B, #0AH ;

B

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論