【正文】
R ;散轉(zhuǎn)入命令鍵入口JP T A B : AJ MP C CS 0 ;雙字節(jié)指令 A JM P CCS 1 A JM P CCS 2 從程序中看出,當 ( A ) =00H時,散轉(zhuǎn)到 CCS0 ;當 ( A ) =01H時,散轉(zhuǎn)到 CCS1 ;??。由于 AJMP是雙字節(jié)指令,散轉(zhuǎn)前中的鍵值應乘 2 。Back 總結(jié): ⑴ 四個無條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍 。 ⑵ 除長轉(zhuǎn)指令外 , 其他轉(zhuǎn)移指令可以生成浮動 代碼 , 在 64KB任意范圍內(nèi)浮動 。 ⑶ 涉及到的目標地址和偏移量均可用符號地址表示。 2 空操作指令( 1條) 這是一條單字節(jié)指令,除 PC 加 1 外,不影響其它寄存器和標志位。 “ NOP ”指令常用于產(chǎn)生一個機器周期的延遲。N O P ;0000 0000( PC ) +1 PCBack 3 條件轉(zhuǎn)移指令( 8條) Back (1) 判零轉(zhuǎn)移指令 按給出的條件判斷,滿足則轉(zhuǎn)移,不滿足繼續(xù)執(zhí)行下一條指令,轉(zhuǎn)移的目標地址為 PC當前值為中心的 128~ +127共 256B范圍,共有三類: 說明: (1 ) r el 為 8 位的帶符號數(shù),常用符號地址表示。 (2 ) 兩條指令都不會改變 A 的內(nèi)容,也不影響任何標志位。 Back (2)比較轉(zhuǎn)移指令( 4條) 功能:( d st )和( scr )作為條件,進行比較,若它們的值不等則轉(zhuǎn)移。 目標地址:( PC ) 當前值 +rel =源地址 +3 +rel ,同時若( dst ) ( src )則 CY 清零,( d st ) ( src ), CY 置 1 ,( dst )=( scr )時,順序往下執(zhí)行。即: Back C JN E ( dst ),( src ), re l ;三字節(jié)指令 格式: CJNE A,direct, rel ;先 (PC)+3→PC CJNE A,data,rel ;先 (PC)+3→PC CJNE Rn,data,rel;先( PC) +3→PC CJNE @Ri,data,rel;先( PC) +3→PC 說明: (1) rel為 8位的帶符號數(shù) , 常用符號地址表示 。 指令的相對轉(zhuǎn)移范圍為 125~ +130, 從 (PC)+3為起始地址的 +127~ 128字節(jié)單元地址 。 (2) 指令執(zhí)行后均不影響任何操作數(shù) 。 (3) 執(zhí)行過程的比較操作實際上是減法操作 , 只是不保存差值 , 而是形成標志位 CY。 (4) 若( dst)和( src)均為無符號數(shù),則根據(jù) CY可判斷大?。? CY= 0時,( dst) ≧ ( src); CY=1時,( dst) ( src) (3)循環(huán)轉(zhuǎn)移指令( 2條) D J N Z Rn , R E L ;1 1 0 1 1 r r rr e l( PC )+ 2 PC ( Rn ) 1 Rn當 ( Rn ) = /0 ,則 ( PC ) + re l P C當 ( Rn ) =0 ,則順序執(zhí)行Back DJNZ di rect , r el ;1 1 0 1 0101d i r e c tr e l( PC ) + 3 PC ( dire c t ) 1 dire c t 當 ( direc t ) =/0 ,則 ( PC ) + rel PC 當 ( direc t ) =0 ,則結(jié)束循環(huán),程序往下執(zhí)行 程序每執(zhí)行一次本指令 , 將第一操作數(shù)的字節(jié)變量減 1, 并判字節(jié)變量是否為零 , 若不為 0,則轉(zhuǎn)移到目標地址 , 繼續(xù)執(zhí)行循環(huán)程序段;若為 0, 則結(jié)束循環(huán)程序段的執(zhí)行 , 程序往下執(zhí)行 。 其中 , rel為一個帶符號的 8位數(shù) 。 轉(zhuǎn)移范圍同相對轉(zhuǎn)移指令 。 指令結(jié)果不影響程序狀態(tài)字寄存器 PSW。 DJNZ指令通常用于循環(huán)程序中控制循環(huán)次數(shù) 。 Back 【 思考 】 請用一個示意圖歸納條件轉(zhuǎn)移指令。 4 調(diào)用和返回指令 在程序設(shè)計中,有時因操作要求,需反復執(zhí)行某段程序,是這段程序能被公用。這樣可減少程序編寫和調(diào)試的工作量,于是引進了主程序和子程序的概念。指令系統(tǒng)中一般都有主程序調(diào)用子程序的指令和從子程序返回主程序的指令。通常把具有一定功能的公用程序段作為子程序,子程序的最后一條指令為返回主程序指令 ( RET )。主程序轉(zhuǎn)子程序以及子程序返回主程序的過程入圖所是。Back (1)短調(diào)用指令 短調(diào)用指令提供了11 位目標地址,限定在2K 地址空間內(nèi)調(diào)用。Back ( PC ) +2 PC , 斷點值 ( SP ) +1 SP ( PC 0 — 7 ) ( SP ) 壓入斷點 ( SP ) +1 SP ( PC 8 — 15 ) ( SP ) addr 1 — 10 PC 0 — 10 ( 2KB 區(qū)內(nèi)地址)( PC 11 — 15 )不變 AC AL L add r1 1 ;a 10 a 9 a 8 1 0001a d d r 0 — 7addr11常用符號地址代替。調(diào)用范圍同AJMP指令 。 (2)長調(diào)用指令 L C A L L a dd r 16 ;0001 0010addr 815addr 07( PC ) +3 PC 斷點值( SP ) +1 SP( PC 0 7 ) ( SP )( SP ) +1 S P 壓入斷點( PC 8 15 ) ( SP ) ad d r 0 15 PCBack addr16常用符號地址代替。調(diào)用范圍同LJMP指令 。 (3)返回指令( 2條) R E T ;0010 0010( ( S P )) P C 815 , 彈出斷點高 8 位( S P ) 1 S P( ( S P )) P C 07 , 彈出斷點低 8 位( S P ) 1 S PBack RET 指令是從子程序返回。當程序執(zhí)行到本指令時,表示結(jié)束子程序的執(zhí)行,返回調(diào)用指令( A CA L L 或 L CA LL )的下一條指令處(斷點)繼續(xù)往下執(zhí)行。 00 1 1 0010RETI ;(( SP )) PC 815 ,(S P) 1 SP(( SP )) PC 07 , (S P) 1 SP R ETI 指令是中斷返回指令 , 除具有 “ R E T ”指令的功能外,還將開放中斷邏輯。Back 在編程時不能將兩種返回指令混用,中斷返回一定要安排在中斷服務程序的最后。 例 編程:利用子程序技術(shù)把內(nèi) RAM 20H~ 2AH單元中的數(shù)清零。 【 思考 】 把本例題中的 DJNZ指令改成 CJNE指令,程序該如何修改? 167。 位操作 (布爾處理 )類指令 (17條 ) ? 位數(shù)據(jù)傳送指令( 2條) ? 位修正指令( 6條) ? 邏輯運算指令( 4條) ? 位條件轉(zhuǎn)移類指令( 5條) 本類指令分為四小類,除對 C為目的操作數(shù)進行操作的指令會對 CY產(chǎn)生影響外,其它指令結(jié)果均不影響 PSW中的標志位。 Back 回顧: 作 , 而是以字節(jié)中某位為對象進行操作 。 位操作是對字節(jié)中的位進行操作 , 位值只能是 0或 1,又叫布爾操作 。 。 , 進位標志位 CY—— 布爾累加器 ( 位累加器 ) , 簡寫成 “ C”。 位地址的表達方式: 接寫位地址: 如 D4H。 點操作符號: 如 (D0H).4。 位名稱方式: 如 RS1; 用戶定義名方式:如用偽指令 bit 例: SUB .REG bit RS1 經(jīng)定義后,允許指令中用SUB . REG 代替 RS1 。Back 位數(shù)據(jù)傳送指令( 2條) 匯編指令格式 機器碼格式 操作 注釋MOV C , bi t ; 10 10 0 01 0位地址 ( bi t )( bit ) CMOV b it , C ; 1001 0010位地址 ( bi t )( C ) bi t 位地址 ( bi t )Back 位修正指令( 6條) 匯編指令格式 機器碼格式 操作 注釋CLR C ; 11 00 0 01 1 0 CCLR bi t ; 110 0 0 01 0位地址 ( bi t )0 bi tBack (1)位清 0指令 (2)位置 1指令( 2條) 匯編指令格式 機器碼格式 操作 注釋SE TB C ; 11 01 0 01 1 1 CSETB b it ; 11 01 0 01 0位地址 ( bi t )1 bi tBack (3)位取反指令( 2條) 匯編指令格式 機器碼格式 操作 注釋CPL C ; 10 11 0 01 1 ( C ) CCPL bi t ; 10 11 0 01 0位地址 ( bi t )( bit ) b itBack 邏輯運算指令( 4條) 匯編指令格式 機器碼格式 操作 注釋ANL C , bi t ; 10 0 0 0 01 0位地址 ( bi t )(C) ∧ ( bit ) CANL C , / bi t ; 1011 0 00 0位地址 ( bi t )(C) ∧ ( bit ) CBack ( 1)位邏輯 “ 與 ” 指令( 2條) ( 2)位邏輯 “ 或 ” 指令( 2條) 匯編指令格式 機器碼格式 操作 注釋ORL C , bi t ; 01 11 0 01 0位地址 ( bi t )(C) ∨ ( bit ) CORL C , / bi t ; 01 01 0 00 0位地址 ( bi t )(C) ∨ ( bit ) CBack 注意: 51單片機中沒有位異或指令。 位條件轉(zhuǎn)移類指令( 5條) Back 說明:本小類指令中, rel為 8位帶符號數(shù),指令的轉(zhuǎn)移范圍同 SJMP指令。 匯編指令格式 機器碼格式 操作 注釋JC re l ; 01 00 0 00 0相對地址 ( rel )先 PC + 2 PC若 ( C ) =1 ,則 ( PC )+r el PC若 ( C ) =0 ,則順序往下執(zhí)行J N C r el ; 010 1 0 00 0相對地址 ( rel )先 PC + 2 PC若 ( C ) = 0 ,則 ( PC )+r el PC若 ( C ) = 1 ,則順序往下執(zhí)行Back (1) 判布爾累加器 C 轉(zhuǎn)移指令( 2 條) ( 2)判位變量轉(zhuǎn)移指令( 2條) 匯編指令格式 機器碼格式 操作J B bit , re l ; 0 0 10 0 000位地址 ( bi t )相對地址 ( rel )先 PC+ 3 PC , 若 ( bit ) =1 ,則 ( PC ) +r el P C若 ( bi t ) =0 ,則順序往下執(zhí)行J N B bi t,r e l ; 0 011 0 000位地址 ( bi t )相對地址 ( rel )先 PC+ 3 PC , 若 ( bit ) = 0 ,則 ( PC ) +r el P C若 ( bi t ) = 1 ,則順序往下執(zhí)行Back (3)判位變量并清 0轉(zhuǎn)移指令( 1條) 匯編指令格式 機器碼格式 操作J BC b i t, re l ; 0 001 0 00 0位地址 ( bi t )相對地址 ( rel )先 PC+ 3 PC , 若 ( bit ) =1 ,則 ( PC ) +r el PC ,0 bi t若 ( bi t ) =0 ,則順序往下執(zhí)行Back 【 例 】 已知外 RAM 2022H單元開始處有一個輸入數(shù)據(jù)緩沖區(qū) , 該緩沖區(qū)數(shù)據(jù)以回車符 CR(ASCII碼為 0DH)為結(jié)束標志 , 試編一個完整程序能把正數(shù)送入 30H( 片內(nèi) RAM) 單元開始的正數(shù)區(qū)和把負數(shù)送入40H( 片內(nèi) RAM) 單元開始的負數(shù)區(qū) 。 解:流程圖如下圖所示 , 程序如下: ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV DPTR,2022H