




已閱讀5頁(yè),還剩123頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)原理及應(yīng)用 佘勇電子基礎(chǔ)教學(xué)實(shí)驗(yàn)中心課件密碼 kys2006Telmail sy 辦公室 科教樓110 第四章MCS 51單片機(jī)的指令系統(tǒng)與匯編程序設(shè)計(jì) 上章內(nèi)容小結(jié) 51單片機(jī)基本特點(diǎn)51單片機(jī)存儲(chǔ)器組織程序存儲(chǔ)器片內(nèi)ROM和片外ROM擴(kuò)展 EA引腳作用 PC與中斷向量數(shù)據(jù)存儲(chǔ)器片內(nèi)RAM 工作寄存器 位尋址區(qū) 用戶RAM 堆棧 SFR片外RAM擴(kuò)展時(shí)序與復(fù)位節(jié)拍 狀態(tài) 機(jī)器周期和指令周期的概念單片機(jī)復(fù)位 MCS 51內(nèi)部RAM配置 直接尋址 內(nèi)部數(shù)據(jù)存儲(chǔ)器配置圖 總結(jié) 地址重疊 256B 384B 間接尋址 僅52系列有 本章內(nèi)容 本節(jié)課需掌握指令的基本概念操作數(shù)尋址方式51單片機(jī)的指令系統(tǒng)偽指令匯編語(yǔ)言程序設(shè)計(jì)重點(diǎn)操作數(shù)尋址方式51單片機(jī)的指令系統(tǒng)匯編語(yǔ)言程序設(shè)計(jì) 指令 指令系統(tǒng)和程序指令是CPU能執(zhí)行的一個(gè)基本操作 如 取數(shù) 加 減 乘 除 存數(shù)等指令系統(tǒng)是CPU所能執(zhí)行的全部指令的集合 不同的CPU 其指令系統(tǒng)不同 程序用戶編寫(xiě)的完成特定任務(wù)的指令的有序集合 4 1指令概述 程序設(shè)計(jì)語(yǔ)言 指令助記符指令編碼是二進(jìn)制編碼 記憶起來(lái)有些困難 可用與指令含義接近的英文單詞或縮寫(xiě)來(lái)代替指令的二進(jìn)制編碼程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言 二進(jìn)制指令代碼程序設(shè)計(jì)語(yǔ)言 形成目標(biāo)程序計(jì)算機(jī)唯一可以直接識(shí)別的語(yǔ)言二進(jìn)制的表達(dá)形式 編程困難高級(jí)語(yǔ)言和匯編語(yǔ)言程序 源程序 必須轉(zhuǎn)換成機(jī)器語(yǔ)言目標(biāo)代碼 目標(biāo)程序 才能被計(jì)算機(jī)執(zhí)行 高級(jí)語(yǔ)言 面向過(guò)程和對(duì)象的程序設(shè)計(jì)語(yǔ)言語(yǔ)句功能強(qiáng) 編程速度快需要編譯程序或解釋程序翻譯成機(jī)器代碼不太適用于微型計(jì)算機(jī)系統(tǒng)匯編語(yǔ)言 用助記符代替二進(jìn)制指令代碼的程序語(yǔ)言每條語(yǔ)句與一個(gè)具體的操作或指令對(duì)應(yīng)編寫(xiě)的程序需要匯編成機(jī)器代碼運(yùn)行程序代碼短 運(yùn)行效率高 但編程復(fù)雜非常適合計(jì)算機(jī)原理的學(xué)習(xí) 匯編語(yǔ)言指令格式 MCS 51單片機(jī)指令格式 標(biāo)號(hào) 操作碼 操作數(shù) 注釋 1 8個(gè)字母 數(shù)字 下劃線 字母開(kāi)頭 1 3個(gè) 多個(gè)操作數(shù)之間用 分隔 介紹描述指令符號(hào)的意義 Ri 由Ri尋址的單元中的內(nèi)容 Ri DPTR 由DPTR尋址的單元中的內(nèi)容 DPTR direct 由direct尋址的單元中的內(nèi)容 直接尋址 Rn Rn中的內(nèi)容 4 2尋址方式 MCS 51單片機(jī)指令格式 標(biāo)號(hào) 操作碼 操作數(shù) 注釋 定位操作數(shù)所在存儲(chǔ)位置的方式叫尋址方式寄存器尋址直接尋址立即尋址寄存器間接尋址變址尋址 基址寄存器加變址寄存器間接尋址 相對(duì)尋址位尋址 寄存器尋址方式 操作數(shù)位置出現(xiàn)的是工作寄存器名 操作數(shù)存放在工作寄存器中 MOVA R1 30H 30H MOVB A 3FH 3FH INCB 3FH 40H 直接尋址方式 出現(xiàn)在操作數(shù)位置不是操作數(shù)本身 而是操作數(shù)所在的存儲(chǔ)單元的地址可用于轉(zhuǎn)移或調(diào)用指令的目標(biāo)地址尋址 以 addr16 或 addr11 的形式出現(xiàn)可用于RAM存儲(chǔ)單元的尋址 以 direct 的形式出現(xiàn) MOVA 30H A 30H 24H 立即尋址方式 指令的操作數(shù)存放在程序存儲(chǔ)器中 緊跟在操作碼的后面 前綴指示符 MOVA 30H A 30H 30H 直接尋址與立即尋址的區(qū)別 MOVA 30H A 30H MOVA 30H A 30H 寄存器間接尋址方式 出現(xiàn)在操作數(shù)位置的寄存器的內(nèi)容不是操作數(shù)本身 而是操作數(shù)所在的存儲(chǔ)單元的地址 以 寄存器名 形式表示R0 R1可用于片內(nèi)RAM和片外RAM低256字節(jié)的間接尋址 MOVA Ri或MOVXA Ri DPTR可用于片外RAM整個(gè)64K字節(jié)空間的間接尋址 MOVXA DPTR MOVA R0 A R0 24H 寄存器尋址與寄存器間接尋址區(qū)別 MOVA R1 30H 30H MOVA R1 A R1 設(shè)R1 30H MOVCA A DPTR 變址尋址 以累加器A為變址寄存器 以程序計(jì)數(shù)器PC或數(shù)據(jù)指針DPTR為基址寄存器 以二者之和作為程序存儲(chǔ)器單元地址 取出其中的數(shù)據(jù)作為操作數(shù) A A DPTR 02H 2002H 82H 相對(duì)尋址 相對(duì)尋址用于訪問(wèn)程序存儲(chǔ)器 在相對(duì)轉(zhuǎn)移指令后作為轉(zhuǎn)移的地址偏移 以 rel 形式表示 rel 是8位補(bǔ)碼 范圍 128 127 轉(zhuǎn)移的目標(biāo)地址為轉(zhuǎn)移指令的下一條指令 PC rel JNZrel 例 累加器A不等零則轉(zhuǎn)移設(shè) rel 23H PC 2002H rel 23H 修正后轉(zhuǎn)移目標(biāo)地址D PC 2025H PC 2002H Rel 23H 0 0 5 2 0 2 H D 尋址空間 片內(nèi)RAM的地址為20H 2FH字節(jié)單元共128位位地址表現(xiàn)形式 1 位地址00H 7FH2 字節(jié)地址 位序號(hào) SFR中12個(gè)能被8整除的字節(jié)地址位地址請(qǐng)參看P52表2 6SFR中的可尋址位的三種形式 1 位地址 如80H 81H2 位地址名 如C OV AC3 SFR名 位序號(hào) 如P1 0 P0 5 對(duì)內(nèi)部RAM SFR的位地址空間進(jìn)行訪問(wèn) 稱為位尋址 位地址用于布爾指令 共221位 位尋址 關(guān)于累加器A在指令中的形式 累加器A在指令中的表現(xiàn)形式1 以累加器A形式出現(xiàn)A是指令編碼的一部分 不占用獨(dú)立字節(jié)例 MOVA Ri指令編碼 E8 EF2 以direct地址形式 SFR地址 出現(xiàn)ACC或字節(jié)地址例 PUSHACC指令編碼 C0E0 4 3MCS 51指令系統(tǒng) MCS 51指令系統(tǒng)有111條指令 按操作功能分類 算術(shù)操作指令24條 邏輯操作指令24條 程序轉(zhuǎn)移指令17條 數(shù)據(jù)傳送指令29條 位操作指令17條 按指令長(zhǎng)度分類 單字節(jié)指令49條 雙字節(jié)指令45條 三字節(jié)指令17條 按指令周期分類 單周期指令64條 雙周期指令45條 四周期指令2條 1 s 2 s 4 s 設(shè)時(shí)鐘頻率為12MHz 則按指令執(zhí)行的時(shí)間分 4 3 1數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送類指令的種類 29條 片內(nèi)RAM傳送指令 MOV片外RAM傳送指令 MOVXROM傳送 查表傳送 MOVC累加器交換指令 XCH XCHD SWAP堆棧操作指令 進(jìn)棧指令 PUSH出棧指令 POP對(duì)標(biāo)志位的影響影響累加器A內(nèi)容的傳送指令影響奇偶標(biāo)志P 其它標(biāo)志位不受影響 傳送類指令操作示意圖 累加器A Rn工作寄存器 Ri片內(nèi)RAM單元 direct Ri DPTR片外RAM單元 A PC A DPTRROM單元 堆棧 data PUSH POP MOVC MOVX MOV XCH MOV XCH XCHD MOV XCH MOV MOV MOV MOV MOV MOV MOV DPTR MOV 寄存器間接尋址 寄存器尋址 立即尋址 寄存器間接尋址 變址尋址 基址寄存器加變址寄存器 應(yīng)用實(shí)例 直接尋址 以累加器A為一方的傳送指令 累加器A Rn工作寄存器 Ri片內(nèi)RAM單元 direct Ri DPTR片外RAM單元 A PC A DPTRROM單元 data MOVC MOVX MOV XCH MOV XCH XCHD MOV XCH MOV MOVdirect AMOVA directXCHA direct MOV Ri AMOVA RiXCHA Ri低半字節(jié)交換XCHDA Ri MOVRn AMOVA RnXCHA Rn MOVA data MOVCA A PCMOVCA A DPTR MOVX Ri AMOVXA RiMOVX DPTR AMOVXA DPTR 變址尋址 寄存器間接尋址 立即尋址 寄存器尋址 寄存器間接尋址 直接尋址 SWAPA 以direct單元為一方的傳送指令 Rn工作寄存器 Ri片內(nèi)RAM單元 direct 堆棧 PUSH POP MOV MOV MOV 寄存器間接尋址 寄存器尋址 直接尋址 MOVRn directMOVdirect Rn MOV Ri directMOVdirect Ri MOVdirect direct PUSHdirect SP SP 1 SP direct POPdirect direct SP SP SP 1 例 PUSHACCPUSH30HPOP40HPOPB 立即數(shù)傳送指令 累加器A Rn工作寄存器 Ri片內(nèi)RAM單元 direct data MOV MOV MOV MOV DPTR MOV 寄存器間接尋址 寄存器尋址 立即尋址 直接尋址 MOVDPTR data16例 MOVDPTR 2000H MOVRn data例 MOVR0 2FH MOV Ri data例 MOV R1 2FH MOVdirect data例 MOV30H 2FH MOVA data例 MOVA 2FH 傳送類指令實(shí)例1 立即數(shù)送至累加器MOVA 20H A 20H累加器與工作寄存器R0 R7之間的傳送MOVR1 20HMOVA R1MOVR0 A R0 20H累加器與 Ri間接尋址的片內(nèi)RAM單元之間的傳送MOVA 2FHMOVR0 30HMOVR1 40HMOV R0 A 30H 2FHMOVA R1 A 40H XCHA R0 A 30H 傳送類指令實(shí)例2 累加器與direct直接尋址的片內(nèi)RAM單元之間的傳送MOVA 20H A 20H MOVP1 A P1 AXCHA 30H 30H A累加器與片外RAM單元之間的傳送MOVR1 20HMOVDPTR 2000HMOVXA R1MOVX DPTR A 2000H 0020H 累加器與ROM單元之間的傳送 查表指令 MOVDPTR 2000HMOVCA A DPTRMOVCA A PC 傳送類指令實(shí)例3 工作寄存器與direct直接尋址的片內(nèi)RAM單元之間的傳送MOVR1 20H R1 20H MOV2FH R1 2FH R1 direct直接尋址的片內(nèi)RAM單元與 Rj間接尋址的片內(nèi)RAM單元之間的傳送MOVR1 20HMOV30H R1 30H 20H MOV R1 40H 20H 40H direct直接尋址的片內(nèi)RAM單元之間的傳送MOV30H 40H 30H 40H MOV23H 30HMOV12H 34HMOVR0 23HMOVR7 12HMOVR1 12HMOVA R0MOV34H R1MOV45H 34HMOVDPTR 6712HMOV12H DPHMOVR0 DPLMOVA R0 23H 30H 12H 34H R0 23H R7 34H R1 12H A 30H 34H 34H 45H 34H DPTR 6712H 12H 67H R0 12H A 67H 傳送類指令綜合實(shí)例 30H 34H 23H 34H 12H 34H 34H 67H 12H 67H 12H 4 3 2算術(shù)操作類指令 算術(shù)操作類指令的種類 24條 加法指令 ADD ADDC減法指令 SUBB加1指令 INC減1指令 DEC十進(jìn)制調(diào)整指令 DA乘法指令 MUL除法指令 DIV 加法指令 不帶進(jìn)位的加法指令A(yù)DDA Rn A A Rn ADDA Ri A A Ri ADDA direct A A direct ADDA data A A data帶進(jìn)位的加法指令A(yù)DDCA Rn A A Rn Cy ADDCA Ri A A Ri Cy ADDCA direct A A direct Cy ADDCA data A A data Cy 加法指令影響PSW中的Cy OV AC P 加法實(shí)例 MOVA 1 A 0FFHADDA 255 A A 0FFHMOVR0 0 R0 0ADDCA R0 A A R0 Cy OVCyA11111111 11111111 0111111110 ADD二進(jìn)制結(jié)果00000000 1 0011111111 ADDC二進(jìn)制結(jié)果 對(duì)編程者來(lái)說(shuō) 可以把這兩個(gè)數(shù)的當(dāng)作無(wú)符號(hào)數(shù) 也可以當(dāng)作帶符號(hào)數(shù) 減法指令 帶借位的減加法指令SUBBA Rn A A Rn Cy SUBBA Ri A A Ri Cy SUBBA direct A A direct Cy SUBBA data A A data Cy 減法指令沒(méi)有不減進(jìn)位位的指令 所以必須注意 在減法指令之前應(yīng)清除進(jìn)位位減法指令影響PSW中的Cy OV AC P 減法實(shí)例 CLRC Cy 0MOVA 52H A 52HMOVR0 0B4H R0 0B4HSUBBA R0 A A R0 Cy OVCyA001010010 10110100 10010110 0 1110010110 SUBB二進(jìn)制結(jié)果 0B4H當(dāng)作無(wú)符號(hào)數(shù)180 也可以當(dāng)作帶符號(hào)數(shù) 76 加1減1指令 加1指令I(lǐng)NCA A A 1INCRn Rn Rn 1INC Ri Ri Ri 1INCdirect direct direct 1 用于端口操作時(shí) 讀 改 寫(xiě) INCDPTR DPTR DPTR 1減1指令DECA A A 1DECRn Rn Rn 1DEC Ri Ri Ri 1DECdirect direct direct 1 用于端口操作時(shí) 讀 改 寫(xiě) 加1減1指令不影響PSW中的標(biāo)志位 16位無(wú)符號(hào)數(shù)加法實(shí)例 設(shè)在片內(nèi)RAM地址為30H和40H處存放著2個(gè)16位無(wú)符號(hào)數(shù) 低位在前 編程求兩者之和 存放于R3 R4中 16位無(wú)符號(hào)數(shù)加法實(shí)例流程圖 2個(gè)間接尋址寄存器 地址指針 指向操作數(shù)低8位 取加數(shù)低8位至累加器 低8位加法 結(jié)果存儲(chǔ) 調(diào)整間址寄存器 指向操作數(shù)高8位 取加數(shù)高8位至累加器 高8位加法 結(jié)果存儲(chǔ) MOVR0 M1 R0 M1 R1 M2 間接MOVR1 M2 尋址寄存器 地址指針 初始化MOVA R0 取第1個(gè)數(shù)第8位ADDA R1 低8位相加MOVR4 A R4 低8位和INCR0 調(diào)整地址指針 指向高8位INCR1 MOVA R0 ADDCA R1 高8位相加MOVR3 A R4 高8位和 累加器十進(jìn)制調(diào)整指令DA ALU完成壓縮BCD碼 每字節(jié)兩位十進(jìn)制數(shù)碼 運(yùn)算后 累加器中的運(yùn)算結(jié)果并不是十進(jìn)制結(jié)果 必須用DA指令調(diào)整成十進(jìn)制結(jié)果指令格式 DAA調(diào)整方法 DA指令一般跟在加法指令的后面 利用加法指令對(duì)標(biāo)志位C AC影響以及累加器A內(nèi)容完成十進(jìn)制調(diào)整如果低半字節(jié) 9或AC 1 則低半字節(jié)加6如果高半字節(jié) 9或C 1 則高半字節(jié)加6DA指令影響進(jìn)位位C 只置位 不復(fù)位 不影響OV位 十進(jìn)制調(diào)整指令實(shí)例 MOVR1 92H R1 92HMOVA 73H A 73HADDA R1 A 05H AC 0 C 1DAA A 65H C 1 CA10010010 壓縮BCD碼92 01110011 壓縮BCD碼73 100000101 二進(jìn)制結(jié)果01100000 十進(jìn)制調(diào)整 101100101 十進(jìn)制結(jié)果163 乘法指令 乘法指令格式 MULAB執(zhí)行時(shí)間 4個(gè)機(jī)器周期操作 累加器A和寄存器B中的兩個(gè)數(shù)相乘 乘積的高8位在B中 低8位在A中對(duì)標(biāo)志位的影響 Cy 0 當(dāng)乘積 255時(shí) OV 1 否則 OV 0 除法指令 除法指令格式 DIVAB執(zhí)行時(shí)間 4個(gè)機(jī)器周期操作 累加器A中的被除數(shù)除以寄存器B中的除數(shù) 除得的商在A中 余數(shù)在B中對(duì)標(biāo)志位的影響 一般情況下 Cy 0 OV 0 當(dāng)除數(shù)為0時(shí) OV 1 乘法實(shí)例 設(shè)在片內(nèi)RAM地址為M1處存放著一個(gè)16位無(wú)符號(hào)數(shù) 低位在前 在M2處存放著一個(gè)8位無(wú)符號(hào)數(shù) 編程求兩者之積 存放于R2 R3 R4中 乘法實(shí)例 M1 1 M1 M2 R3R4 BA R2R3R4 MOVR0 M1MOVA R0MOVB M2MULABMOVR4 AMOVR3 BINCR0MOVA R0MOVB M2MULAB R0 M1 指向被乘數(shù)低8位 A 被乘數(shù)低8位 M1 B 乘數(shù) M2 M1 M2 R4 乘積低8位 R3 乘積高8位 暫存 指向被乘數(shù)高8位 A 被乘數(shù)高8位 M1 1 B 乘數(shù) M2 M1 1 M2 ADDA R3MOVR3 AMOVA BADDCA 00HMOVR2 A 乘積第2字節(jié)相加 R3 乘積第2字節(jié) A 乘積第3字節(jié) 加進(jìn)位位Cy R2 乘積第3字節(jié) 4 3 3邏輯操作類指令 邏輯操作類指令的種類 24條 按位運(yùn)算 與指令 ANL或指令 ORL異或指令 XRL累加器取反指令 CPL累加器清零指令 CLR移位指令 RL RR RLC RRC 與指令 與指令 源操作數(shù)與目標(biāo)操作數(shù)按位相與ANLA Rn A A direct direct data與指令不影響標(biāo)志位用于端口操作時(shí) 執(zhí)行 讀 改 寫(xiě) 操作例 設(shè) A 55H則 ANLA 0F0H 運(yùn)行后 A 50H 或指令 或指令 源操作數(shù)與目標(biāo)操作數(shù)按位相或ORLA Rn A A Rn ORLA Ri A A Ri ORLA direct A A direct ORLA data A A dataORLdirect A direct A direct ORLdirect data direct direct data或指令不影響標(biāo)志位用于端口操作時(shí) 執(zhí)行 讀 改 寫(xiě) 操作例 設(shè) A 55H則 ORLA 0F0H 運(yùn)行后 A 0F0H 異或指令 異或指令 源與目標(biāo)操作數(shù)按位相異或XRLA Rn A A RnXRLA Ri A A Ri XRLA direct A A direct XRLA data A A dataXRLdirect A direct A direct XRLdirect data direct direct data異或指令不影響標(biāo)志位用于端口操作時(shí) 執(zhí)行 讀 改 寫(xiě) 操作例 設(shè) A 55H則 XRLA 0F0H 運(yùn)行后 A 0A5H 累加器取反和清零指令 累加器取反指令 累加器內(nèi)容按位取反CPLA A A累加器清零指令 累加器置0CLRA A 0指令不影響標(biāo)志位 算術(shù)移位與邏輯移位 算術(shù)移位算術(shù)左移數(shù)據(jù)各位依次移到相鄰高位 最低位補(bǔ)0算術(shù)右移數(shù)據(jù)各位依次移到相鄰低位 符號(hào)位不變邏輯移位邏輯左移與算術(shù)左移相同邏輯右移數(shù)據(jù)各位依次移到相鄰低位 最高位補(bǔ)0 16位算術(shù)左移例 CY 0 A M1 A M1 1 存放于M1處的16位數(shù) 4 3 4控制轉(zhuǎn)移指令 程序轉(zhuǎn)移類指令的功能程序不再順序執(zhí)行 根據(jù)條件或無(wú)條件地轉(zhuǎn)移到目的地址位置處開(kāi)始執(zhí)行符號(hào) 表示當(dāng)前指令所在起始單元地址程序轉(zhuǎn)移類指令的種類 17條 無(wú)條件轉(zhuǎn)移指令 AJMP LJMP SJMP JMP條件轉(zhuǎn)移指令 JZ JNZ CJNE DJNZ JC JNC JB JNB JBC調(diào)用指令 ACALL LCALL RET RETI空操作指令 NOP 無(wú)條件轉(zhuǎn)移指令 1 絕對(duì)轉(zhuǎn)移指令格式 AJMPaddr11執(zhí)行操作 PC PC 2PC10 0 addr11PC15 11不變2 長(zhǎng)轉(zhuǎn)移指令格式 LJMPaddr16執(zhí)行操作 PC PC 3PC addr16 無(wú)條件轉(zhuǎn)移指令 續(xù) 3 短轉(zhuǎn)移指令格式 SJMPrel執(zhí)行操作 PC PC 2PC PC relrel 8位二進(jìn)制補(bǔ)碼 范圍 128 1274 變址方式轉(zhuǎn)移 間接轉(zhuǎn)移 指令格式 JMP A DPTR執(zhí)行操作 PC A DPTR 絕對(duì)轉(zhuǎn)移指令示意圖 MOVA 20H AJMPAA1 AA1 MOVA R0 在同一個(gè)2KB區(qū)間內(nèi) 絕對(duì)轉(zhuǎn)移指令示意圖 短轉(zhuǎn)移指令示意圖 MOVA 20H SJMPAA1 AA1 MOVA R0 MOVA 20H AA1 MOVA R0 SJMPAA1 距離 128 長(zhǎng)轉(zhuǎn)移指令示意圖 MOVA 20H LJMPAA1 AA1 MOVA R0 距離任意 64KB轉(zhuǎn)移空間 變址方式轉(zhuǎn)移指令例子 散轉(zhuǎn) MOVDPTR TABMOVA R0MOVB 3MULABJMP A DPTR SJMP TAB LJMPTAR1LJMPTAR2LJMPTAR3 LJMPTABn 原地踏步Rel 2 0FEH 程序中的無(wú)條件轉(zhuǎn)移指令 在編程時(shí) 在無(wú)條件轉(zhuǎn)移指令后 直接寫(xiě)出轉(zhuǎn)移目的指令前的標(biāo)號(hào) 代表目標(biāo)地址 標(biāo)號(hào)與 rel或addr11 之間的轉(zhuǎn)換運(yùn)算由匯編程序自動(dòng)完成 如果目標(biāo)地址超出范圍 匯編程序?qū)⒔o出錯(cuò)誤提示 編程者必須對(duì)其進(jìn)行調(diào)整 條件轉(zhuǎn)移指令 累加器零條件 累加器為0轉(zhuǎn)移指令格式 JZrel執(zhí)行操作 ifA 0PC PC 2 順序執(zhí)行elsePC PC 2 rel累加器非0轉(zhuǎn)移指令格式 JNZrel執(zhí)行操作 ifA 0PC PC 2 順序執(zhí)行elsePC PC 2 rel 累加器零條件轉(zhuǎn)移指令實(shí)例 編程實(shí)現(xiàn)將片外RAM地址為DATA1的8位無(wú)符號(hào)數(shù)組 位于地址低256單元內(nèi) 連續(xù)傳送到片內(nèi)RAM地址為DATA2處 直到遇到數(shù)組元素為0為止 累加器零條件轉(zhuǎn)移指令實(shí)例 MOVR0 DATA1MOVR1 DATA2LOOP MOVXA R0JZAA1MOV R1 AINCR0INCR1SJMPLOOPAA1 SJMP 距離 127 注意此例的缺陷 沒(méi)有考慮數(shù)據(jù)區(qū)長(zhǎng)度 改進(jìn) 條件轉(zhuǎn)移指令 進(jìn)位條件轉(zhuǎn)移 進(jìn)位位C為1轉(zhuǎn)移指令格式 JCrel執(zhí)行操作 ifC 0PC PC 2 順序執(zhí)行elsePC PC 2 rel進(jìn)位位C為0轉(zhuǎn)移指令格式 JNCrel執(zhí)行操作 ifC 1PC PC 2 順序執(zhí)行elsePC PC 2 rel 條件轉(zhuǎn)移指令 位條件轉(zhuǎn)移 直接尋址位為1轉(zhuǎn)移指令格式 JBbit rel執(zhí)行操作 ifbit 0PC PC 3elsePC PC 3 rel直接尋址位為0轉(zhuǎn)移指令格式 JNBbit rel執(zhí)行操作 ifbit 1PC PC 3elsePC PC 3 rel直接尋址位為1轉(zhuǎn)移且該位清0指令格式 JBCbit rel執(zhí)行操作 ifbit 0PC PC 3elsePC PC 3 rel bit 0 條件轉(zhuǎn)移指令 比較條件轉(zhuǎn)移 指令格式 CJNEA data relCJNEA direct relCJNERn data relCJNE Ri data rel執(zhí)行操作 if第一操作數(shù) 第二操作數(shù)PC PC 3 C 0if第一操作數(shù) 第二操作數(shù)PC PC 3 relif第一操作數(shù) 第二操作數(shù)C 0if第一操作數(shù) 第二操作數(shù)C 1 CJNE應(yīng)用實(shí)例 無(wú)符號(hào)數(shù)的比較 編程實(shí)現(xiàn) 如果R0與R1相等 轉(zhuǎn)移到AA1 如果R0大于R1 轉(zhuǎn)移到AA2 如果R0小于R1 轉(zhuǎn)移到AA3 MOVA R0MOV30H R1CJNEA 30H MIDAA1 MID JNCAA2AA3 AA2 注意指令的語(yǔ)法 R0與R1不能直接比較 Yes CJNE應(yīng)用實(shí)例 帶符號(hào)數(shù)的比較 編程實(shí)現(xiàn) A與30H單元內(nèi)容 帶符號(hào)數(shù) 進(jìn)行比較 如果相等 轉(zhuǎn)移到LOOP1 如果大于 轉(zhuǎn)移到LOOP2 如果小于 轉(zhuǎn)移到LOOP3 A 0 30H 0 30H 0 A 30H CJNEA 30H比較 A 30H A 30H A 30H Cy 0 No No Yes Yes No Yes No Yes No LOOP1 LOOP2 LOOP3 COMP NEXT MOVR0 AANLA 80HJNZNEGMOVA 30HANLA 80HJNZLOOP2SJMPCOMPNEG MOVA 30HANLA 80HJNZLOOP3 COMP MOVA R0CJNEA 30H NEXTSJMPLOOP1NEXT JNCLOOP2LOOP3 NOP A為 30H 為 A為 30H 為 A 30H A 30H A 30H 條件轉(zhuǎn)移指令 減1條件轉(zhuǎn)移 寄存器減 1 不等零轉(zhuǎn)移指令格式 DJNZRn rel執(zhí)行操作 Rn Rn 1ifRn 0PC PC 2 順序執(zhí)行elsePC PC 2 rel內(nèi)部RAM或SFR減 1 不為零轉(zhuǎn)移指令格式 DJNZdirect rel執(zhí)行操作 direct direct 1if direct 0PC PC 3 順序執(zhí)行elsePC PC 3 rel DJNZ指令實(shí)例1 對(duì)累加器零條件轉(zhuǎn)移實(shí)例的修改 MOVR0 DATA1MOVR1 DATA2MOVR3 nLOOP MOVXA R0JZAA1MOV R1 AINCR0INCR1DJNZR3 LOOPAA1 SJMP 距離 128 考慮數(shù)據(jù)區(qū)長(zhǎng)度 累加器零條件轉(zhuǎn)移實(shí)例 考慮數(shù)據(jù)區(qū)長(zhǎng)度 DJNZ應(yīng)用實(shí)例2 課堂練習(xí) 編寫(xiě)一段程序 把片內(nèi)RAM地址30H 3FH的16個(gè)存儲(chǔ)單元清0 DJNZ應(yīng)用實(shí)例2 解答 編寫(xiě)一段程序 把片內(nèi)RAM地址30H 3FH的16個(gè)存儲(chǔ)單元清0 MOVR0 30H 地址指針初始化MOVR1 16 循環(huán)變量初始化AGA MOV R0 0 存儲(chǔ)單元清0INCR0 地址指針增加DJNZR1 AGA 循環(huán)變量判斷 子程序調(diào)用與返回指令 主 程 序 子 程 序 1 子 程 序 2 斷點(diǎn)1 斷點(diǎn)2 恢復(fù)斷點(diǎn)2 恢復(fù)斷點(diǎn)1 斷點(diǎn) 在子程序調(diào)用時(shí) 指調(diào)用指令的下一條指令地址 將被壓入堆棧 在返回指令中被從棧頂彈出到PC 絕對(duì)調(diào)用指令 指令格式 ACALLaddr11執(zhí)行操作 PC PC 2SP SP 1 SP PC7 0SP SP 1 SP PC15 8PC10 0 addr11PC15 11不變 斷點(diǎn)保護(hù) 絕對(duì)調(diào)用指令示例 MOVA 20H ACALLAA1 AA1 MOVA R0 RET 在同一個(gè)2KB區(qū)間內(nèi) 長(zhǎng)調(diào)用指令 指令格式 LCALLaddr16執(zhí)行操作 PC PC 3SP SP 1 SP PC7 0SP SP 1 SP PC15 8PC15 0 addr16 斷點(diǎn)保護(hù) 長(zhǎng)調(diào)用指令示例 MOVA 20H LCALLAA1 AA1 MOVA R0 RET 距離任意 64KB轉(zhuǎn)移空間 返回指令 返回指令指令格式 RET執(zhí)行操作 PC15 8 SP SP SP 1PC7 0 SP SP SP 1中斷返回指令格式 RETI操作 1 清除中斷響應(yīng)時(shí)置位的優(yōu)先級(jí)狀態(tài)觸發(fā)器 使同級(jí)或低級(jí)中斷請(qǐng)求不會(huì)被阻斷 2 其它操作同RET指令 斷點(diǎn)恢復(fù) 位處理器 布爾處理器 布爾處理器 布爾運(yùn)算器ALU 布爾累加器CY PSW 7 布爾RAM區(qū)共128位 布爾I O口 P0 P3口每位都可做布爾I O口 布爾指令子集 17條布爾指令 布爾SFR區(qū) 共221位 布爾地址空間 4 3 5位操作類指令 位操作類指令的分類 17條 位傳送指令 MOV位邏輯操作指令 CPL CLR SETB ANL ORL位條件轉(zhuǎn)移指令 JC JNC JB JNB JBC 見(jiàn)轉(zhuǎn)移類指令 位傳送指令 直接尋址位內(nèi)容送進(jìn)位位MOVC bit Cy bit 進(jìn)位位內(nèi)容送直接尋址位MOVbit C bit Cy位地址表示方法1 位地址 RAM 00H 7FH SFR 80H FFH 2 位名稱 SFR中的專用名稱位3 點(diǎn)表示 字節(jié)地址或SFR名 位序號(hào)4 位符號(hào)地址表示方式 用偽指令定義的符號(hào)地址 如 FLGbitF0 位邏輯操作指令 進(jìn)位位取反 CPLC進(jìn)位位清零 CLRC進(jìn)位位置1 SETBC 直接尋址位取反 CPLbit直接尋址位清零 CLRbit直接尋址位置1 SETBbit 直接尋址位與進(jìn)位位與 ANLC bit直接尋址位與進(jìn)位位或 ORLC bit直接尋址位取反后與進(jìn)位位與 ANLC bit直接尋址位取反后與進(jìn)位位或 ORLC bit 直接尋址位原值不變 4 4MCS 51匯編語(yǔ)言偽指令 匯編語(yǔ)言程序的格式 匯編語(yǔ)言程序語(yǔ)句 指令語(yǔ)句 偽指令語(yǔ)句 匯編過(guò)程中產(chǎn)生CPU將要執(zhí)行的機(jī)器代碼 僅對(duì)匯編過(guò)程進(jìn)行控制 不產(chǎn)生可執(zhí)行的機(jī)器代碼 程序定位 符號(hào)定義和存儲(chǔ)空間保留等 指令語(yǔ)句 指令語(yǔ)句格式 標(biāo)號(hào) 操作碼 操作數(shù) 注釋 各部分由分隔符 空格或Tab 分開(kāi)標(biāo)號(hào)一條指令或一段程序的符號(hào)地址 由1 8個(gè)字母 數(shù)字與下劃線 首字符必須是字母 組成 后跟 號(hào)指令語(yǔ)句在匯編過(guò)程中將產(chǎn)生機(jī)器碼 偽指令語(yǔ)句 偽指令格式 名稱 或 標(biāo)號(hào) 偽指令 表達(dá)式或符號(hào)列表 在匯編過(guò)程中不產(chǎn)生機(jī)器碼和目標(biāo)程序 不令計(jì)算機(jī)產(chǎn)生任何操作作用 在匯編程序?qū)υ闯绦蜻M(jìn)行匯編的過(guò)程中 控制匯編程序?qū)υ闯绦虻慕忉?完成數(shù)據(jù) 符號(hào)的定義等 偽指令 ORG ORG命令格式 ORG16位地址作用 用在一段源程序或數(shù)據(jù)塊前 說(shuō)明程序段或數(shù)據(jù)塊的起始地址例1 ORG0000HLJMPMAINORG1000HMAIN MOVR0 100H 例2 ORG1000HTAB DB01H 02H 偽指令 END END命令格式 END作用 表明源程序結(jié)束 偽指令 DB命令 DB命令格式 標(biāo)號(hào) DB數(shù)據(jù)項(xiàng)或數(shù)據(jù)項(xiàng)列表作用 定義字節(jié)數(shù)據(jù)或數(shù)據(jù)塊 列表中的數(shù)據(jù)項(xiàng)用逗號(hào)分開(kāi) 匯編程序把它們依次存放在從標(biāo)號(hào)地址開(kāi)始的連續(xù)存儲(chǔ)單元中例 ORG2000HFIRST DB10 20 30 40DB11 12 13 14 則 從地址為2000H的單元開(kāi)始 存儲(chǔ)單元中的數(shù)據(jù)依次為10 20 30 40 11 12 13 14 偽指令 DW命令 DW命令格式 標(biāo)號(hào) DW數(shù)據(jù)項(xiàng)或數(shù)據(jù)項(xiàng)列表作用 定義字?jǐn)?shù)據(jù)或數(shù)據(jù)塊 列表中的數(shù)據(jù)項(xiàng)用逗號(hào)分開(kāi) 匯編程序把它們依次存放在從標(biāo)號(hào)地址開(kāi)始的連續(xù)存儲(chǔ)單元中 字的高8位在前 低8位在后例 ORG2000HFIRST DW1001H 2002HDW03H 4004HDW3344H 5566H 偽指令 DS命令 DS命令格式 標(biāo)號(hào) DS數(shù)字作用 定義偽初始化數(shù)據(jù)塊 從標(biāo)號(hào)地址開(kāi)始保留 數(shù)字 規(guī)定個(gè)數(shù)的連續(xù)字節(jié)存儲(chǔ)單元 供以后存入數(shù)據(jù)例 ORG2000HFIRST DS20H則 從地址為2000H的單元開(kāi)始 保留32個(gè)存儲(chǔ)單元 偽指令 bit命令 bit命令格式 符號(hào)名稱bit位地址作用 給位地址賦予一個(gè)代替的字符名稱例 A1bitP1 0 偽指令 EQU與DATA 賦值命令EQU 先賦值 后使用 格式 符號(hào)名稱EQU表達(dá)式或匯編符號(hào)作用 給表達(dá)式或符號(hào)一個(gè)代替的字符名稱例 rregEQUR0標(biāo)號(hào)地址賦值命令DATA格式 標(biāo)號(hào)名稱DATA表達(dá)式作用 此命令把數(shù)據(jù) 代碼地址賦予標(biāo)號(hào)段所規(guī)定的字符名稱 定義的字符名稱可先使用后定義例 addrDATA2000H EQU與DATA示例 合法的 reg1EQUR1reg2EQUR2MASKEQU0FHAAEQU10HAA1EQUAA 1L1DATA1000HRAM2DATA30HRAM3DATARAM2 1 非法的 AAEQU30HAAEQU31HcpyEQUmovreg1DATAr1RAM2DATA1000HRAM2DATA30H 偽指令 HIGH與LOW 取16位數(shù)高字節(jié)命令HIGH格式 HIGH 表達(dá)式 取16位數(shù)低字節(jié)命令LOW格式 LOW 表達(dá)式 4 5匯編語(yǔ)言程序設(shè)計(jì) 匯編語(yǔ)言程序結(jié)構(gòu) 順序結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 分支結(jié)構(gòu) 4 5 1順序程序設(shè)計(jì) 初始化 指令1 指令2 程序結(jié)束 順序程序?qū)嵗?將20H中的8位無(wú)符號(hào)數(shù)轉(zhuǎn)成3位BCD碼 存儲(chǔ)在30H 31H兩個(gè)RAM單元中 FIRSTDATA30HSECONDATA31HORG0000H 復(fù)位向量LJMPSTARTORG0100HSTART MOVA 20H A 待轉(zhuǎn)換數(shù)據(jù)xMOVB 100DIVAB 百位BCD x 100MOVFIRST A 30H 百位MOVA B A x 100的余數(shù)y MOVB 10 DIVAB y 10 A中為十位 B中為個(gè)位SWAPA 把十位BCD交換到A的高4位ORLA B A高4位中的十位BCD與B中的 個(gè)位BCD組合起來(lái)MOVSECON A 結(jié)果存儲(chǔ)31H單元SJMP END 4 5 2分支程序設(shè)計(jì) 分支程序?qū)嵗?例4 2 ORG0000HSTART MOVA 30H 取溫度值CLRCSUBBA 35 溫度值減去35JCNEXT 小于35度轉(zhuǎn)下一步SETBP1 0 否則點(diǎn)亮紅燈CLRP1 1CLRP1 2SJMPSTART 繼續(xù)檢測(cè)NEXT MOVA 30H 重取溫度值CLRCSUBBA 20 溫度值減去20JCYE 小于20轉(zhuǎn)點(diǎn)黃燈 SETBP1 1 否則點(diǎn)亮綠燈CLRP1 0CLRP1 2SJMPSTARTYE SETBP1 2 點(diǎn)亮黃燈CLRP1 0CLRP1 1SJMPSTARTEND 散轉(zhuǎn) 散轉(zhuǎn)是一種并行的多分支程序轉(zhuǎn)移結(jié)構(gòu)在同一轉(zhuǎn)移點(diǎn)上 根據(jù)不同的輸入條件使程序轉(zhuǎn)移向不同的入口點(diǎn)上 散轉(zhuǎn)方法 1 構(gòu)建轉(zhuǎn)移指令表 用指令JMP A DPTR執(zhí)行程序轉(zhuǎn)移2 構(gòu)建轉(zhuǎn)移目標(biāo)地址表 用指令MOVC裝載目標(biāo)地址至DPTR 用指令JMP A DPTR執(zhí)行程序轉(zhuǎn)移 散轉(zhuǎn)程序?qū)嵗?例4 3 ORG0000HSTART MOVDPTR TAB 指向轉(zhuǎn)移指令表MOVA 30H 取30H內(nèi)容MOVB 3MULAB 30H內(nèi)容乘以3JMP A DPTR 轉(zhuǎn)向地址 DPTR A TAB LJMPOPR0 轉(zhuǎn)向功能程序1LJMPOPR1 轉(zhuǎn)向功能程序2LJMPOPR2 轉(zhuǎn)向功能程序3OPR0 MOV31H 10H 功能程序1SJMP OPR1 MOV31H 20H 功能程序2SJMP OPR2 MOV31H 30H 功能程序3SJMP 基于地址表方法的例4 3 ORG0000HSTART MOVDPTR TAB 指向轉(zhuǎn)移目標(biāo)地址表MOVA 30H 取30H內(nèi)容MOVB 2MULAB 30H內(nèi)容乘以2MOVR1 A 目標(biāo)地址表偏移MOVCA A DPTR 取目標(biāo)地址高位PUSHACC 暫存MOVA R1ADDA 1 地址表偏移 1MOVCA A DPTR 取目標(biāo)地址低位MOVDPL A POPACC 恢復(fù)目標(biāo)地址高位MOVDPH ACLRAJMP A DPTR 轉(zhuǎn)向地址 DPTR A TAB DWOPR0 OPR1 OPR2OPR0 MOV31H 10H 功能程序1SJMP OPR1 MOV31H 20H 功能程序2SJMP OPR2 MOV31H 30H 功能程序2SJMP END 4 5 3循環(huán)程序設(shè)計(jì) 地址指針和循環(huán)變量初始化 循環(huán)控制 循環(huán)體 地址指針和循環(huán)變量修改 地址指針和循環(huán)變量初始化 循環(huán)控制 循環(huán)體 地址指針和循環(huán)變量修改 Yes No No Yes 先處理后判斷 先判斷后處理 循環(huán)程序示例 從BLOCK單元開(kāi)始有一無(wú)符號(hào)數(shù)據(jù)塊 其長(zhǎng)度存放于LEN單元 求出數(shù)據(jù)塊中最大
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025養(yǎng)雞場(chǎng)建筑施工合同(李俊杰)
- 2025至2030年中國(guó)前示高燈行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國(guó)冷庫(kù)速冷機(jī)行業(yè)投資前景及策略咨詢報(bào)告
- 2025年光學(xué)纖維面板系列項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025至2030年中國(guó)光澤清面漆行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國(guó)書(shū)冊(cè)行業(yè)投資前景及策略咨詢報(bào)告
- 2025年驗(yàn)孕棒項(xiàng)目提案報(bào)告模板
- 2025合同模板個(gè)人網(wǎng)店轉(zhuǎn)讓合同示例
- 2025年中國(guó)耳鼻喉科器械市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)電腦數(shù)控雕刻機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 導(dǎo)電高分子課件:探索導(dǎo)電材料的秘密
- 2025年成人高考《語(yǔ)文》文學(xué)常識(shí)經(jīng)典題型與歷年真題試卷
- 浙江開(kāi)放大學(xué)2025年《社會(huì)保障學(xué)》形考任務(wù)4答案
- 機(jī)電應(yīng)聘筆試試題及答案
- 試管嬰兒協(xié)議合同書(shū)
- 2024年生物制造產(chǎn)業(yè)藍(lán)皮書(shū)-華谷研究院
- 9 天上有顆南仁東星 課件-課堂無(wú)憂新課標(biāo)同步核心素養(yǎng)課堂
- 車輛日常安全檢查課件
- 新型傳感技術(shù)及應(yīng)用 課件 第五部分:典型傳感器-諧振式傳感器
- 2025-2030全球美容機(jī)構(gòu)行業(yè)消費(fèi)需求與未來(lái)經(jīng)營(yíng)規(guī)模預(yù)測(cè)研究報(bào)告
- 廣西《淡水水產(chǎn)養(yǎng)殖尾水排放標(biāo)準(zhǔn)》編制說(shuō)明
評(píng)論
0/150
提交評(píng)論