微機(jī)原理匯編語言程序設(shè)計(jì)課件_第1頁
微機(jī)原理匯編語言程序設(shè)計(jì)課件_第2頁
微機(jī)原理匯編語言程序設(shè)計(jì)課件_第3頁
微機(jī)原理匯編語言程序設(shè)計(jì)課件_第4頁
微機(jī)原理匯編語言程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

微機(jī)原理及應(yīng)用MCS-51單片機(jī)第七章匯編語言程序設(shè)計(jì)程序設(shè)計(jì)語言簡介程序設(shè)計(jì)的步驟和方法轉(zhuǎn)移指令和分支程序循環(huán)程序子程序及其調(diào)用程序設(shè)計(jì)舉例機(jī)器語言計(jì)算機(jī)唯一能夠識(shí)別和執(zhí)行的語言匯編語言“符號(hào)語言”,用指令助記符代表機(jī)器語言指令高級(jí)語言面向算法、過程、對(duì)象,類似自然語言,可移植性好,須經(jīng)解釋或翻譯后才能被執(zhí)行程序設(shè)計(jì)語言簡介匯編機(jī)器語言目標(biāo)程序匯編語言源程序程序設(shè)計(jì)的步驟分析課題,確定算法和思路根據(jù)算法和思路畫出流程圖根據(jù)流程圖編寫程序上機(jī)調(diào)試,排除錯(cuò)誤流程圖圖例起止框處理框判斷框連線開始結(jié)束XX+1YY-1F>5?YN程序設(shè)計(jì)的方法結(jié)構(gòu)化設(shè)計(jì)模塊化設(shè)計(jì)開發(fā)方法自底向上開發(fā)先底層開發(fā)自頂向下開發(fā)先頂層開發(fā)混合方法匯編起始偽指令格式:ORG<起始地址>功能:指定匯編源程序編譯成機(jī)器語言程序 的起始地址例如:ORG0000Hljmp0100HORG0100HStart:movA,#5Ahsjmp$END匯編結(jié)束偽指令格式:END[起始地址]功能:停止匯編示例:ORG0000Hljmp0100HORG0100HStart:movA,#5Ahsjmp$END movA,#0A5h定義字節(jié)偽指令格式:<標(biāo)號(hào):>DB<項(xiàng)或項(xiàng)表>功能:把項(xiàng)或項(xiàng)表的數(shù)值存入從標(biāo)號(hào)開始的連續(xù)單元,其中項(xiàng)或項(xiàng)表可以是一個(gè)字節(jié)、數(shù)或以引號(hào)括起來的字符串。

ORG1000HDat:DB11h,22h,’A’,”BCD”END定義位偽指令格式:<符號(hào)>BIT<位地址>功能:定義位變量地址UBIT20H.0VBIT20H.1WBIT20H.2XBIT20H.3YBIT20H.4ZBIT20H.5QBIT20H.6賦值偽指令格式:<符號(hào)>EQU<變量值>功能:定義符號(hào)變量值

XEQU05HYEQU06H匯編語言格式指令格式:標(biāo)號(hào):助記符

參數(shù),參數(shù);注釋偽指令格式:名字定義符參數(shù),…,參數(shù);注釋轉(zhuǎn)移指令和分支程序控制轉(zhuǎn)移類指令無條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令比較轉(zhuǎn)移指令循環(huán)轉(zhuǎn)移指令分支程序用cjne實(shí)現(xiàn)三分支用jmp@A+DPTR實(shí)現(xiàn)多分支無條件轉(zhuǎn)移指令絕對(duì)無條件轉(zhuǎn)移指令長轉(zhuǎn)移指令短轉(zhuǎn)移指令間接轉(zhuǎn)移指令格式:ajmpaddr11;功能:無條件轉(zhuǎn)向指令中提供的11位地址。

轉(zhuǎn)移范圍:2K,PC15~11不變例:ajmpStart絕對(duì)無條件轉(zhuǎn)移指令a10a9a800001a7a6a0短轉(zhuǎn)移指令格式:sjmprel;(PC)(PC)+2,(PC)(PC)+rel功能:相對(duì)轉(zhuǎn)向指令,rel為一字節(jié)補(bǔ)碼形式的相對(duì)偏移量.轉(zhuǎn)移范圍:-128~+127例:sjmpLoop

sjmp$間接轉(zhuǎn)移指令(散轉(zhuǎn))格式:jmp@A+DPTR;(PC)(A)+(DPTR)功能:根據(jù)A與DPTR的內(nèi)容轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址可變.例:movDPTR,JMP_TBLjmp@A+DPTRJMP_TBL:ajmpLable1ajmpLable2..

條件轉(zhuǎn)移指令判零轉(zhuǎn)移指令判位變量轉(zhuǎn)移指令判位變量并清零轉(zhuǎn)移指令判布爾累加器C轉(zhuǎn)移指令判位變量轉(zhuǎn)移指令格式:jbbit,rel;rel:8位相對(duì)偏移量功能:(PC)(PC)+3,

IF(bit)=1THEN(PC)(PC)+relELSEgo

on格式:jnbbit,rel;rel:8位相對(duì)偏移量功能:(PC)(PC)+3,

IF(bit)=0THEN(PC)(PC)+relELSEgo

on判位變量并清零轉(zhuǎn)移指令格式:jbcbit,rel;rel:8位相對(duì)偏移量功能:(PC)(PC)+3,

IF(bit)=1THEN(PC)(PC)+reland(bit)=0ELSEgo

on判布爾累加器C轉(zhuǎn)移指令格式:jcrel;rel:8位相對(duì)偏移量功能:(PC)(PC)+2,

IF(C)=1THEN(PC)(PC)+relELSEgo

on格式:jncrel;rel:8位相對(duì)偏移量功能:(PC)(PC)+2,

IF(C)=0THEN(PC)(PC)+relELSEgo

on循環(huán)轉(zhuǎn)移指令格式:djnzRn,rel;rel:8位相對(duì)偏移量功能:(PC)(PC)+2,(Rn)(Rn)-1

IF(Rn)0THEN(PC)(PC)+relELSEgo

on格式:djnzdirect,rel;rel:8位相對(duì)偏移量功能:(PC)(PC)+3,

IF(direct)0THEN(PC)(PC)+relELSEgo

on用cjne實(shí)現(xiàn)三分支

cjneR0,#0,MP1movR1,#0sjmpMP3MP1:movA,R0jnbACC.7,MP2movR1,#0FFhsjmpMP3MP2:movR1,#01hMP3:sjmp$y=開始結(jié)束y0y-1y+1x=0?x<0?YYNNR0xR1y用jmp@A+DPTR實(shí)現(xiàn)多分支KeyB5:movDPTR,#JMPTBLclrCsubbA,#0AhrlAJMP@A+DPTRJMPTBL:ajmpAAAajmpBBBajmpCCCajmpDDD循環(huán)程序循環(huán)程序結(jié)構(gòu)單循環(huán)程序例1:多字節(jié)求和例2:內(nèi)部數(shù)據(jù)區(qū)清零多重循環(huán)程序例3:50ms延時(shí)程序循環(huán)程序結(jié)構(gòu)循環(huán)初始化:循環(huán)控制變量的初始化、數(shù)據(jù)變量的初始化循環(huán)工作部分:循環(huán)主體,重復(fù)執(zhí)行的計(jì)算循環(huán)控制部分:循環(huán)變量的修改、終止控制例1:多字節(jié)求和ORG0000HSUM:movR3,#0movR4,#0movR0,#50HmovR2,#5Loop:movA,R4addA,@R0movA,R4incR0clrAaddcA,R3movR3,AdjnzR2,Loopsjmp$END例2:內(nèi)部數(shù)據(jù)區(qū)清零

ORG0000HZero:movR0,#30HmovR7,#10movA,#00HLoop:mov@R0,AincR0djnzR7,Loopsjmp$END例3:50ms延時(shí)程序Delay:movR7,#200Del1:movR6,#123nopDel2:djnzR6,Del2djnzR7,Del1sjmp$;1us;1us;1us;2us;2us子程序及其調(diào)用子程序調(diào)用與返回指令子程序設(shè)計(jì)方法子程序的調(diào)用過程與子程序嵌套調(diào)用過程中的參數(shù)傳遞通過寄存器傳遞通過堆棧傳遞通過數(shù)據(jù)指針(DPTR)傳遞子程序調(diào)用與返回指令絕對(duì)調(diào)用指令acalladdr11;(PC)(PC)+2,(SP)(SP)+1((SP))(PC0~7),(SP)(SP)+1,((SP))(PC8~15),(PC0~10)addr11,(PC11~15)

不變lcalladdr16返回指令ret;(PC8~15)((SP)),(SP)(SP)-1(PC0~7)((SP)),(SP)(SP)-1舉例:子程序調(diào)用與返回指令舉例ORG0000HStart:movA,#0acallSub1movA,#0lcallSub2sjmpSub1:incAretSub2:decAretEND子程序設(shè)計(jì)方法格式:;子程序名;子程序功能:;入口參數(shù):;出口參數(shù):;占用資源:子程序名:...子程序的調(diào)用過程與子程序嵌套主程序要使用子程序時(shí)通過call指令子程序執(zhí)行完后通過ret指令返回防止自然進(jìn)入子程序和自然退出子程序子程序嵌套正在執(zhí)行主程序CPU正在執(zhí)行子程序SubACPU正在執(zhí)行子程序SubB通過寄存器傳遞方法簡單、參數(shù)有限例:

ORG0000HMain:movR0,#40hmovR7,#10HlcallZerosjmp$;子程序名:Zero;功能:對(duì)內(nèi)部數(shù)據(jù)區(qū)清零;入口參數(shù):R0內(nèi)部數(shù)據(jù)區(qū);R7內(nèi)部數(shù)據(jù)區(qū)長度;出口參數(shù):無;占用資源:A,R0,R7Zero:clrALoop:mov@R0,AincR0djnz,R7,Loopret通過堆棧傳遞ORG0000HMain:mov70H,#40hmov71H,#10Hpush70hpush71hlcallZerosjmp$;子程序名:Zero;功能:對(duì)內(nèi)部數(shù)據(jù)區(qū)清零;入口參數(shù):70內(nèi)部數(shù)據(jù)區(qū)地址;71h內(nèi)部數(shù)據(jù)區(qū)長度;出口參數(shù):無;占用資源:A,R0,R7,70h,71hZero:popDPHpopDPLpop07h;R7pop00h;R0clrALoop:mov@R0,AincR0djnz,R7,LooppushDPLpushDPHret通過數(shù)據(jù)指針(DPTR)傳遞將待傳遞參數(shù)緊跟在調(diào)用指令之后

ORG0000HMain:nopacallPrintDB:”THISISANEXAMPLE”DB:0AH,0DH,00HNext:nopsjmp$ENDPrint:popDPHpopDPLPPP1:movA,#00hmovcA,@A+DPTRincDPTRjzPPPEndPPP2:movP1,AsjmpPPP1PPPEnd:jmp@A+DPTR程序設(shè)計(jì)舉例算術(shù)運(yùn)算程序?多字節(jié)加法?多字節(jié)BCD碼減法邏輯運(yùn)算程序

?數(shù)據(jù)的拼裝?

ASCII碼二進(jìn)制查表程序

?以PC為指針?以DPTR為指針散轉(zhuǎn)程序?轉(zhuǎn)移指令表?地址偏移量表?轉(zhuǎn)向地址表多字節(jié)加法2F5BA7C3H(43424140)H+14DF35B8H(53525150)H

ORG0000HJia:movR0,#40hmovR1,#50hmovR2,#4

clrCJia1:movA,@R1addcA,@R0mov@R0,AincR0incR1

djnzR2,Jia1movF0,Csjmp$END多字節(jié)BCD碼減法99887766H(43424140)H-44556677H(53525150)H

ORG0000HJia:movR0,#40hmovR1,#50hmovR2,#4

clrCJia1:movA,#9AhsubbA,@R1addA,@R0mov@R0,A

incR0incR1

djnzR2,Jia1movF0,Csjmp$END數(shù)據(jù)的拼裝x7x6x5x4x3x2x1x0(20H)y7y6y5y4y3y2y1y0(21H)y2y0y0x4x3x2x1x0(30H)

ORG0000HStart:mov30h,20hanl30h,#00011111bmovA,21hswapArlAanlA,#11100000borl30h,Asjmp$ENDASCII碼二進(jìn)制

ORG0000HAtoH:movA,#’A’clrCsubbA,#30hcjneA,#0Ah,NEQsjmpBIGNEQ:jcAENDBIG:subbA,#07hAEND:sjmp$END

ORG0000HHtoA:movA,#0BhaddA,#90hdaAaddcA,#40hdaAsjmp$END以PC為指針查表程序TB1:movA,R2addA,R2movR3,AaddA,#06HmovcA,@A+PCxchA,R3addA,#03HmovcA,@A+PCmovR4,Asjmp$TAB1:DW1520,3721,4264DW7850,3483,32657DW883,9943,1000DW4051,6785,8931DW4468,5871DW13284,27808END以DPTR為指針查表程序LTB2:movDPTR,#TAB2movA,R3clrCrlcAmovR3,AxchA,R2rlcAxchR2,AaddA,DPLmovDPL,AmovA,DPHaddcA,R2movDPH,AclrAmovcA,@A+DPTRmovR2,AclrAincDPTRmovcA,@A+DPTRmovR3,AretTAB2:DW......使用轉(zhuǎn)移指令表的散轉(zhuǎn)程序

ORG0000HmovR2,#2Main:movDPTR,#TAJ1movA,R2addA,R2jncNADDincDPTRNADD:jmp@A+DPTRTBJ1:ajmpPRG0ajmpPRG1ajmpPRG2ajmpPRG3sjmp$PRG0:movA,#0sjmpHaltPRG1:movA,#1sjmpHaltPRG2:movA,#2sjmpHaltPRG3:movA,#3Halt:sjmp$END使用地址偏移量表的散轉(zhuǎn)程序JMP3:movR2,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論