版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
§3.1指令系統(tǒng)概述§3.2MCS-51指令的尋址方式§3.3MCS-51指令系統(tǒng)介紹下頁/sundae_meng●
一臺計算機所能執(zhí)行的全部的指令集合§3.1指令系統(tǒng)概述指令是計算機中具有特定功能的操作命令●程序與程序設(shè)計按預(yù)定要求編排的指令序列稱為程序。編排的過程稱為程序設(shè)計●指令系統(tǒng)設(shè)計一種CPU,一般從設(shè)計指令系統(tǒng)開始因而,一種機器的指令系統(tǒng)是機器本身固有的決定了機器的性能用戶無法改變,必須繼承、學習、掌握、應(yīng)用上頁下頁回目錄/sundae_meng機器語言:二進制代碼,是機器唯一能直接識別、執(zhí)行的語言。匯編語言:為了記憶和閱讀方便,制造商對指令系統(tǒng)每一條指令,都給出了指令助記符。用助記符,操作數(shù),標號編寫的程序稱為匯編語言源程序。一、匯編語言匯編語言必須翻譯成機器語言才能被機器執(zhí)行●程序設(shè)計語言匯編語言:高級語言:符號語言:上頁下頁回目錄如P55,圖3-1所示。全是機器碼/sundae_meng完成由匯編語言到機器代碼的過程叫匯編匯編的方法有兩種:自動匯編、手工匯編由機器代碼到匯編語言的過程叫反匯編匯編語言源程序機器語言(二進制代碼)
匯編
反匯編上頁下頁回目錄MCS-51交叉匯編/sundae_meng二、匯編語言的格式[
標號:]
操作碼[操作數(shù)]
[;注釋]其中除操作碼部分是必須的,括號內(nèi)的區(qū)段是任選項。1、標號標號是該指令的符號地址,可根據(jù)需要設(shè)定必須以字母開始,以“
:”結(jié)束,長度不超過8個字符系統(tǒng)中的保留字符不能作標號,如:SFR名、ADD等標號可被其他語句的操作數(shù)直接引用源程序中,一個標號只能定義一個語句,不能相重名字保持一義性上頁下頁回目錄一個匯編語句分為四個區(qū)段操作碼操作碼操作碼/sundae_meng2、操作碼由指令系統(tǒng)的助記符、偽指令助記符組成。操作碼是每一句匯編語言所必須的操作碼和操作數(shù)之間用空格分開3、操作數(shù)可為二進制數(shù)(B),十進制數(shù)(D),十六進制數(shù)(H)數(shù)字大于9,則數(shù)字應(yīng)以“0”開頭,如:#0AFH可以是操作數(shù)地址、立即數(shù)、標號、表達式如M+3目的操作數(shù)和源操作數(shù)之間用“,”分開可以是寄存器名如A、B、R、DPTRM標號被定義過的上頁下頁回目錄BinaryDecimalHexadecimal指出該語句的操作性質(zhì)/sundae_meng4、注釋以“
;”開頭,是程序員對指令操作的解釋,以幫助閱讀、理解程序的意義可有可無匯編時對這部分不予處理,不譯成任何機器代碼可用英語或某種簡潔的方式解釋指令,或打印程序清單上頁下頁回目錄/sundae_meng三、偽指令偽指令僅在匯編過程中起控制作用不產(chǎn)生可執(zhí)行目標代碼,又稱為軟指令1、起點指令ORG格式:ORG××××H功能:給程序起始地址或數(shù)據(jù)塊的起始地址賦值例:用法:一般出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始一個源程序可多次出現(xiàn)ORG指令ORG
8000HSTART:MOVA,#74H
┇;源程序的起始地址為8000H上頁下頁回目錄首地址首地址/sundae_meng2、結(jié)束命令END格式:END功能:匯編程序結(jié)束標志附在一個源程序的結(jié)尾一個源程序只能出現(xiàn)一次END指令3、定義字節(jié)命令DB格式:功能:標號:DB
字節(jié)常數(shù)或字符串(8位)定義字節(jié)的內(nèi)容,匯編程序把DB定義的字節(jié)依次存入標號開始的存儲單元用法:有定義的內(nèi)存單元地址項或項表上頁下頁回目錄/sundae_meng例:ORG8000HTAB:
DB45H,73,‘5’,‘A’TAB1:DB101B偽指令ORG定義了數(shù)據(jù)塊TAB的起始地址為8000H偽指令DB定義了8000H~8003單元的內(nèi)容依次為:(8000H)=45H(8001H)=49H(8002H)=35H(8003H)=41H(8004H)=05HTABTAB1(1)由ORG定義(2)跟在其他源程序之后上頁下頁回目錄/sundae_meng4、定義字命令DW格式:功能:標號:DW字或字表定義若干個字(雙字節(jié))例:ORG8000HTAB:DW7234H,8AH,10(8000H)=72H(8001H)=34H(8002H)=00H(8003H)=8AH(8005H)=0AH匯編后:(8004H)=00H上頁下頁回目錄按順序存放!/sundae_meng5、定義空間命令DS格式:功能:標號:DS數(shù)據(jù)或字符及表達式例:(8008H)=30H(8009H)=8AH從指定單元地址開始,由數(shù)據(jù)或字符及表達式的值來定義應(yīng)保留的單元數(shù),備用ORG8000HDS08HDB30H,8AH即:8000H~8007H單元保留備用定義空間上頁下頁回目錄/sundae_meng6、等值命令EQU格式:字符名稱EQU數(shù)據(jù)或匯編符號功能:將一個數(shù)據(jù)或匯編符號賦予標號段規(guī)定的字符名稱例:ORG8000HAAEQUR6MOV
A,AA;AA與R6等值;A(R6)上頁下頁回目錄/sundae_meng例:A10EQU10DELYEQU07EBHMOVA,A10LCALLDELY;A10=10;DELY=07EBH;轉(zhuǎn)向入口地址07EBH使用EQU指令,須先賦值后使用,不能反之上頁下頁回目錄/sundae_meng7、數(shù)據(jù)地址賦值等值命令DATA格式:字符名稱DATA數(shù)據(jù)或表達式功能:此命令把數(shù)據(jù)/代碼地址賦予標號段所規(guī)定的字符名稱。定義的字符名稱可先使用后定義INDEXJDATA8389HORG8000HINDEXJDATA8096HLJMPINDEXJENDORG8000HLJMP8096HEND;INDEXJ這個字符名稱的地址為8389H例:上頁下頁回目錄等價于/sundae_mengEQU與DATA的區(qū)別(1)DATA與EQU相似,但DATA定義的字符名稱,
可先使用后定義,EQU則不能(2)EQU指令可把匯編符號賦給字符名稱,
DATA則不能(3)DATA可把表達式的值賦給字符名稱,
EQU則不能DATA常在程序中定義數(shù)據(jù)地址EQU常在程序中定義字符數(shù)據(jù)上頁下頁回目錄/sundae_meng8、位地址符號命令BIT格式:字符名稱BIT位地址功能:把位地址賦予標號段的字符名稱A1BITP1.0A2BITP2.0例:;P1.0,P2.0賦予位地址字符名稱
A1、A2,在編程時可以直接把
A1、A2當成位地址使用上頁下頁回目錄/sundae_meng匯編程序的操作分兩次掃描(匯編)第一次掃描(匯編)檢查語法結(jié)構(gòu),對源程序中的符號、表達式、標號進行定義,處理偽指令,建立符號表上頁下頁回目錄顯示ERROR,并提示行號顯示ERROR,并提示行號修改!修改!第二次掃描(匯編)匯編成目標代碼和匯編程序清單可執(zhí)行的代碼(機器碼)/sundae_meng三、MCS-51指令系統(tǒng)的特點1、執(zhí)行速度快,存儲效率高MCS-51指令系統(tǒng)共有111條指令按字節(jié)分單字節(jié)指令49條雙字節(jié)指令45條三字節(jié)指令17條按周期分單周期指令64條雙周期指令45條四周期指令2條設(shè)時鐘頻率為12MHz,則指令執(zhí)行的時間分別為:1
s
58
2
s
40
4
s
2
占居空間占居時間時空上頁下頁回目錄/sundae_meng硬件由221位構(gòu)成2、指令易掌握,功能強具有豐富的位操作指令、查表指令、散轉(zhuǎn)指令乘除指令等。構(gòu)成了完整的指令系統(tǒng)3、適合于控制、智能儀表布爾處理機布爾運算器ALU布爾累加器CY(PSW.7)布爾RAM區(qū)共128位布爾I/O口P0~P3口每位都可做布爾I/O口
布爾指令子集17條布爾指令上頁下頁回目錄/sundae_meng四、尋址方式(7種)⑴立即尋址⑵直接尋址⑶寄存器尋址⑷寄存器間接尋址⑸基址寄存器加變址寄存器間接尋址⑹相對尋址⑺位尋址上頁下頁回目錄/sundae_meng五、MCS-51指令分類(5類)⑴數(shù)據(jù)傳送(29條)⑵算術(shù)運算(24條)⑶邏輯運算(24條)⑷控制轉(zhuǎn)移(17條)⑸布爾處理(17條)共111條指令上頁下頁回目錄/sundae_meng介紹描述指令符號的意義—當前選中寄存器區(qū)的8個工作寄存器(R0~R7)RnRidirect-——8位內(nèi)部RAM單元地址00H~7FH——專用特殊功能寄存器SFR的地址80H~FFH——立即數(shù)(8位)#data#data16——立即數(shù)(16位)—當前選中寄存器區(qū)中可做間址寄存器的2個工作寄存器(R0、R1)n=0~7i=0、1上頁下頁回目錄P61/sundae_mengaddr16—16位目的地址,用于LCALL、LJMP指令
地址范圍64KBROM空間addr11—11位目的地址,用于ACALL、AJMP指令
地址范圍2KBROM空間relDPTR—數(shù)據(jù)地址指針,可做16位間址寄存器bit—內(nèi)RAM或SFR中的直接位尋址—8位帶符號的偏移量,用于SJMP和所有的條件轉(zhuǎn)移指令中范圍-128~127上頁下頁回目錄/sundae_mengA—累加器B—專用寄存器,用于MUL和DIV指令C—位累加器(PSW.7),進位/借位標志@—間址或基址寄存器前綴如@Ri,@A+DPTR/—位操作的前綴,表示對該位操作數(shù)取反(X)—X中的內(nèi)容((X))—由X尋址的單元中的內(nèi)容箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替@DPTR,@A+PC上頁下頁回目錄/sundae_meng§3.2MCS-51指令的尋址方式用何種方式尋找指令的操作數(shù)或指令的執(zhí)行地址1、立即尋址尋址空間:指令形式:操作碼立即數(shù)程序存儲器指令的操作數(shù)存放在程序存儲器中操作數(shù)緊跟操作碼OP后面立即尋址:在哪里?用何種方式尋找OP#dataImmediateAddressing上頁下頁回目錄指令的尋址方式:指令的尋址方式:/sundae_mengMOVA,#30H;A#30H例1:操作碼立即數(shù)PCPCPC74H30HROM××A30HMOVDPTR,#8000H;DPTR#8000H例2:操作碼PCPCPC立即數(shù)的高8位立即數(shù)的低8位DPHDPLPC80H00H90H80HROM00H
上頁下頁回目錄/sundae_meng2、直接尋址尋址空間:指令的三種形式:操作碼操作數(shù)地址在指令中直接給出操作數(shù)的真實地址操作碼后面緊跟一個實際操作數(shù)地址操作碼操作數(shù)地址立即數(shù)操作碼源操作數(shù)地址目的操作數(shù)地址內(nèi)RAM的低128字節(jié)特殊功能寄存器SFR區(qū)直接尋址直接尋址是訪問SFR的唯一方法DirectAddressing上頁下頁回目錄00H~7FH80H~FFHCPU內(nèi)部直接間接/sundae_meng“與”上頁下頁回目錄MOVA,30H;A(30H)例1:操作碼操作數(shù)地址PCPCPCE5H30HROM××A內(nèi)RAM××30H××ANL30H,#30H;30H(30H)∧#30H
例2:操作碼PCPCPC直接地址立即數(shù)PC53H30HROM30H××內(nèi)RAM××30H××ALU“結(jié)果”/sundae_meng3、寄存器尋址尋址空間:指令的三種形式:操作碼當前選定的寄存器內(nèi)容就是實際操作數(shù)操作碼立即數(shù)操作碼直接地址R0~R7,由RS0、RS1確定寄存器區(qū)/4A、B、CY(位),DPTR、ABMOVA,R3;A(R3)
例1:ADDA,R3;A(A)+(R3)例2:寄存器尋址:RegisterAddressing操作數(shù)隱含操作數(shù)顯然隱含尋址上頁下頁回目錄/sundae_meng4、寄存器間接尋址尋址空間:指令的三種形式:操作碼操作碼立即數(shù)操作碼直接地址內(nèi)部RAM(@R0,@R1,SP)外部RAM(@R0,@R1,@DPTR)寄存器間接尋址:指令選定的寄存器內(nèi)容就是實際的操作數(shù)地址RegisterIndirectAddressing上頁下頁回目錄/sundae_mengMOV@R0,A例1:操作碼PCPCF6HROMR030H;累加器傳送指令內(nèi)RAM××30HA××××MOVXA,@DPTR例2:操作碼PCPCE0HROMDPTR2000H外RAM××2000HA×××ד讀”RD“讀”上頁下頁回目錄/sundae_meng5、基址寄存器加變址寄存器間接尋址基址寄存器加變址寄存器間接尋址:
以DPTR或PC作基址寄存器,A作變址寄存器兩者相加形成操作數(shù)地址。尋址空間:程序存儲器(@A+DPTR、@A+PC)指令形式:操作碼上頁下頁回目錄/sundae_mengMOVCA,@A+DPTR例:操作碼PCPCDPTR2400HA
0FH93HROM……××240FH設(shè)(A)=0FH(DPTR)=2400H××ALU“讀”PSEN“讀”MOVCA,@A+DPTR上頁下頁回目錄/sundae_meng6、相對尋址程序存儲器尋址空間:指令的三種形式:操作碼rel操作碼
直接地址rel操作碼
立即數(shù)rel相對尋址以當前PC值為基準地址,加上指令的偏移量“rel”,結(jié)果為目標地址。rel為有符號補碼數(shù),范圍:-128~+127一般為雙字節(jié)或三字節(jié)指令RelativeAddressing上頁下頁回目錄尋址指令執(zhí)行地址目標地址/sundae_mengJNZrel例:;累加器A不等零則轉(zhuǎn)移設(shè):rel=23H2025H2002H2001H2000HROM70H23H下一條指令.......操作碼PCPCPC(PC)=2002Hrel=23H修正后轉(zhuǎn)移目標地址D(PC)=2025HPCALU偏移量上頁下頁回目錄(PC)=2002HRel=23H)005202HD=/sundae_meng2025H2112H2111H2110HROMDFHF2H下一條指令.......操作碼PCPCPC(PC)=2112Hrel=F2H修正后轉(zhuǎn)移目標地址D(PC)=2104HALU偏移量上頁下頁回目錄例:DJNZR7,rel;(R7)–1不為“0”則轉(zhuǎn)PC2104H指令(PC)=2112HRel=F2H)FF4012HD=/sundae_meng7、位尋址尋址空間:片內(nèi)RAM的20H~2FH字節(jié)地址位地址:00H~7FH請參看圖2-15
共128位SFR中12個能被8整除的字節(jié)地址位地址請參看圖2-16
共93位BitAddressing
以訪問觸發(fā)器的方式,對內(nèi)部RAM、SFR的位地址空間進行訪問,稱為位尋址。位地址用于布爾指令。共221位上頁下頁回目錄請參看
P43專為布爾指令設(shè)計/sundae_meng尋址方式與相應(yīng)的尋址空間小結(jié):寄存器R0~R7,A,BCY,DPTR片內(nèi)內(nèi)RAM的低128字節(jié)特殊功能寄存器SFR直接尋址direct寄存器間址@R0,@R1,SP
@R0,@R1,@DPTR片內(nèi)RAM、片外RAM與I/O口立即數(shù)#data
程序存儲器程序存儲器基址加變址@A+DPTR,@A+PC程序存儲器相對尋址PC+rel位尋址片內(nèi)RAM20H~2FH部分SFRbit利用的變量
使用的空間方式上頁下頁回目錄P67/sundae_meng3.3指令系統(tǒng)3.3.0指令分類按指令的功能,MCS-51指令系統(tǒng)可分為下列5類:(1)數(shù)據(jù)傳送;(29條)(2)算術(shù)運算;(24條)(3)邏輯運算;(24條)(4)位操作;(17條)(5)控制轉(zhuǎn)移。(17條)/sundae_meng3.3.1數(shù)據(jù)傳送類指令(29條)圖3–1MCS-51傳送指令示意圖/sundae_meng表3-2數(shù)據(jù)傳送類指令一覽表/sundae_meng表3-2數(shù)據(jù)傳送類指令一覽表/sundae_meng1.數(shù)據(jù)傳送到累加器A的指令
MOVA,RnMOVA,directMOVA,@RiMOVA,#data
這組指令的功能是:把源操作數(shù)的內(nèi)容送入累加器A。例如:MOVA,#10H,該指令執(zhí)行時將立即數(shù)10H送入累加器A中。注意:數(shù)據(jù)傳送指令一般不影響狀態(tài)標志位(PSW:CY,AC,RS1,RS0,OV,P),但累加器A中’1’的個數(shù)影響P位。/sundae_meng2.數(shù)據(jù)傳送到工作寄存器Rn的指令
MOVRn,AMOVRn,directMOVRn,#data
這組指令的功能是:把源操作數(shù)的內(nèi)容送入當前工作寄存器區(qū)的R0~R7中的某一個寄存器。指令中Rn在內(nèi)部數(shù)據(jù)存儲器中的地址由當前的工作寄存器區(qū)選擇位RS1、RS0確定,可以是00H~07H、08H~0FH、10H~17H、18H~1FH。例如:MOVR0,A,若當前RS1、RS0設(shè)置為00(即工作寄存器0區(qū)),執(zhí)行該指令時,將累加器A中的數(shù)據(jù)傳送至工作寄存器R0(內(nèi)部RAM00H)單元中。/sundae_meng3.數(shù)據(jù)傳送到內(nèi)部RAM單元或特殊功能寄存器SFR的指令
MOVdirect,AMOVdirect,RnMOVdirect,direct;功能較強;如:mov02h,03h。但MOVR2,R3在WAVE6000中通不過(mov02h,03h可以)
MOVdirect,@RiMOVdirect,#data;如:MOVSP,#30H
MOV@Ri,AMOV@Ri,directMOV@Ri,#dataMOVDPTR,#data16/sundae_meng比較:8086匯編:MOV[1000H],33H;MOV[1000H],[2000H]
都是不合法的指令。MCS-51匯編:MOV00H,#30H;MOV32H,39H
都是正確的。/sundae_meng例3-3設(shè)(70H)=60H,(60H)=20H,P1口為輸入口,P1口當前的狀態(tài)為AAH。分析下面程序的結(jié)果。
MOVR0,#70HMOVA,@R0MOVR1,AMOVB,@R1MOV@R0,P1/sundae_meng4.累加器A與外部數(shù)據(jù)存儲器之間的傳送指令
MOVXA,@DPTR;讀
MOVXA,@Ri;讀
MOVX@DPTR,A;寫
MOVX@Ri,A;寫
注:與外部存儲器(數(shù)據(jù)或程序)或I/O口進行數(shù)據(jù)傳送時,必須經(jīng)過累加器A
;當訪問外部RAM時,只能使用R0、R1及DPTR作為地址指針。/sundae_meng例:將片外RAM120H單元的內(nèi)容傳送到片外RAM
地址為78H的單元。MOVDPTR,#0120HMOVXA,@DPTRMOVR0,#78HMOVX@R0,A例:將片內(nèi)RAM12H單元的內(nèi)容傳送到片內(nèi)RAM
地址為78H的單元。MOV78H,12H;外部RAM送累加器A;累加器內(nèi)容送外RAM/sundae_meng5.堆棧操作指令
PUSHdirectPOPdirect
在MCS-51單片機的內(nèi)部RAM中,可以設(shè)定一個先進后出的區(qū)域,稱其為堆棧。在特殊功能寄存器中有一個堆棧指針SP,它指出棧頂?shù)奈恢?。進棧指令的功能是:首先將堆棧指針SP的內(nèi)容加1,然后將直接地址所指出的內(nèi)容送入SP指出的內(nèi)部RAM單元;出棧指令的功能是:將SP所指出的內(nèi)部RAM單元的內(nèi)容送入由直接地址所指出的字節(jié)單元,接著將堆棧指針SP的內(nèi)容減1。/sundae_meng
例如:進入中斷服務(wù)子程序時,把程序狀態(tài)寄存器PSW、累加器A、數(shù)據(jù)指針DPTR進棧保護。設(shè)當前SP為60H。則程序段
PUSHPSWPUSHACCPUSHDPLPUSHDPH執(zhí)行后,SP內(nèi)容修改為64H,而61H、62H、63H、64H單元中依次棧入PSW、A、DPL、DPH的內(nèi)容。當中斷服務(wù)程序結(jié)束之前,如下程序段(SP保持64H不變)/sundae_mengPOPDPHPOPDPLPOPACCPOPPSW執(zhí)行之后,SP內(nèi)容修改為60H,而64H、63H、62H、61H單元中的內(nèi)容依次彈出到DPH、DPL、A、PSW中。
MCS-51提供一個向上升(“向上生長”)的堆棧,因此SP設(shè)置初值時要充分考慮堆棧的深度,要留出適當?shù)膯卧臻g,滿足堆棧的使用。/sundae_meng6.程序存儲器內(nèi)容送累加器
MOVCA,@A+PC(PC~固定)
MOVCA,@A+DPTR(DPTR~可變)這是兩條很有用的查表指令,可用來查找存放在外部程序存儲器中的常數(shù)表格。第一條指令是以PC作為基址寄存器,A的內(nèi)容作為無符號數(shù)和PC的內(nèi)容(下一條指令的起始地址)相加后得到一個16位的地址,并將該地址指出的程序存儲器單元的內(nèi)容送到累加器A。這條指令的優(yōu)點是不改變特殊功能寄存器和PC的狀態(tài),只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。缺點是表格只能放在該條查表指令后面的256個單元之中,表格的大小受到限制,而且表格只能被一段程序所利用。只讀!/sundae_meng
第二條指令是以DPTR作為基址寄存器,累加器A的內(nèi)容作為無符號數(shù)與DPTR內(nèi)容相加,得到一個16位的地址,并把該地址指出的程序存儲器單元的內(nèi)容送到累加器A。這條指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址無關(guān),因此,表格的大小和位置可以在64KB程序存儲器中任意安排,并且一個表格可以為各個程序塊所共用。/sundae_meng例題設(shè)從程序存儲器的TABLE開始存放0~9的平方值,設(shè)A中存放0~9間的某數(shù)。分析程序:MOVDPTR,#TABLE
MOVCA,@A+DPTR
;改用MOVCA,@A+PC指令行不行?為什么?XCHA,@R0(占1B空間)RET(占1B空間)TABLE:DB0,1,4,9,16,25,36,49,64,81/sundae_meng
7.字節(jié)交換指令
XCHA,RnXCHA,@RiXCHA,directXCHDA,@Ri;A0~3@Ri0~3SWAPA;A0~3A4~7
前三條指令是將累加器A的內(nèi)容和源操作數(shù)內(nèi)容相互交換;后兩條指令是半字節(jié)交換指令,最后一條指令是將累加器A的高4位與低4位之間進行交換,而另外一條指令是將累加器A的低4位內(nèi)容和(Ri)所指出的內(nèi)部RAM單元的低4位內(nèi)容相互交換。源、目的操作數(shù)進行字節(jié)交換/sundae_meng例題例:
(A)=80H,(R7)=97H執(zhí)行:XCHA,R7結(jié)果:(A)=97H,(R7)=80H例:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。
XCH60H,61H←對嗎?例:(R0)=60H,(60H)=3EH,(A)=59H執(zhí)行:XCHDA,@R0結(jié)果:(A)=5EH
(60H)=39H/sundae_meng應(yīng)用舉例1MOVP1,#0FEH;11111110B可以使P1.0上的發(fā)光二極管點亮MOVP1,#0F0H;11110000B可以使P1口上的上面4個發(fā)光二極管點亮P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.75v/sundae_meng8段數(shù)碼管顯示P1.0aP1.1bP1.2cP1.3dP1.4eP1.5fP1.6gP1.7dp5vMOVP1,#00H;顯示8.MOVP1,#0F8H;顯示7MOVP1,#88H;顯示A/sundae_meng應(yīng)用舉例2
一個引腳的高低電平,可以通過“光電耦合器”控制繼電器,從而以“弱電”控制“強電”。/sundae_meng3.3.2算術(shù)運算類指令(24條)(除個別INC、DEC指令只影響P位外,其它指令一般都影響標志位。)表3-4算術(shù)運算指令/sundae_meng表3-4算術(shù)運算指令/sundae_meng表3.3影響標志位的指令注:×表示對該標志位會產(chǎn)生影響,0或1表法對該標志位置0或1/sundae_meng表3.3影響標志位的指令/sundae_meng一、加法指令1.普通加法指令
ADDA,Rn;A(Rn)+(A)ADDA,directADDA,@RiADDA,#data注意:判斷無符號數(shù)的運算結(jié)果是否正確看CY位;判斷帶符號數(shù)的運算結(jié)果是否正確看OV位。/sundae_meng例如:+120和
+100之和為220,顯然大于127,相加時01111000120(補碼,78H)01100100100(補碼,64H)11011100220+符號位(最高位)由0變1,兩個正數(shù)相加結(jié)果變負,實際上它是和數(shù)的最高位,符號位移入了進位標志,此時位6有進位而位7無進位,置位溢出標志OV,結(jié)果溢出。CY=0,DF=1,故OV=1溢出!/sundae_meng
同樣,-120和-100相加,結(jié)果應(yīng)為-220,顯然小于-128,相加時10001000-120的補碼10011100-100的補碼+100100100-220的補碼
符號位由1變?yōu)?,兩個負數(shù)相加結(jié)果變?yōu)檎龜?shù),這是因為符號位移入進位標志,位6無進位而位7有進位,置位溢出標志OV,由此可判斷結(jié)果溢出。CY=1,DF=0,故OV=1溢出!/sundae_meng2.帶進位加法指令
ADDCA,Rn;A(Rn)+(A)+(C)YADDCA,directADDCA,@RiADDCA,#data
這組指令的功能與普通加法指令類似,唯一的不同之處是,在執(zhí)行加法時,還要將上一次進位標志Cy的內(nèi)容也一起加進去,對于標志位的影響也與普通加法指令相同。/sundae_meng
3.增量指令(除INCA影響P位外,其它不影響任何標志)
INCAINCRnINCdirectINC@RiINCDPTR
最后一條指令是對16位的數(shù)據(jù)指針寄存器DPTR執(zhí)行加1操作,指令執(zhí)行時,先對低8位指針DPL的內(nèi)容加1,當產(chǎn)生溢出時就對高8位指針DPH加1,但不影響任何標志。/sundae_meng4.十進制調(diào)整指令
DAA
這條指令對累加器A參與的BCD碼加法運算所獲得的8位結(jié)果進行十進制調(diào)整,使累加器A中的內(nèi)容調(diào)整為二位壓縮型BCD碼的數(shù)。使用時必須注意,它只能跟在加法指令之后,不能對減法指令的結(jié)果進行調(diào)整,且其結(jié)果不影響溢出標志位。
執(zhí)行該指令時,判斷A中的低4位是否大于9和輔助進位標志AC是否為“1”,若兩者有一個條件滿足,則低4位加6操作;同樣,A中的高4位大于9或進位標志Cy為“1”兩者有一個條件滿足時,高4位加6操作。例如:有兩個BCD數(shù)36與45相加,結(jié)果應(yīng)為BCD碼81,程序如下:/sundae_mengMOVA,#36HADDA,#45HDAA
這段程序中,第一條指令將立即數(shù)36H(BCD碼36)送入累加器A;第二條指令進行如下加法:00110110360100010145011110117B0000011006++1000000181得結(jié)果7BH;第三條指令對累加器A進行十進制調(diào)整,低4位(為0BH)大于9,因此要加6,得調(diào)整的BCD碼81。/sundae_meng
二、減法指令
1.帶進位減法指令
SUBBA,Rn;A(A)-(Rn)-(cy)SUBBA,directSUBBA,@RiSUBBA,#data
這組指令的功能是:將累加器A的內(nèi)容與第二操作數(shù)及進位標志相減,結(jié)果送回到累加器A中。在執(zhí)行減法過程中,如果位7(D7)有借位,則進位標志Cy置“1”,否則清“0”;如果位3(D3)有借位,則輔助進位標志AC置“1”,否則清“0”;如位6有借位而位7沒有借位,或位7有借位而位6沒有借位,則溢出標志OV置“1”,否則清“0”。若要進行不帶借位的減法操作,則必須先將Cy清“0”。/sundae_meng例3-12雙字節(jié)無符號數(shù)減法,被減數(shù)分別在31H,30H中,減數(shù)分別在41H,40H單元中,差存于31H,30H單元中.CLRCMOVA,30HSUBBA,40HMOV30H,AMOVA,31HSUBBA,41HMOV31H,A/sundae_meng
2.減1指令
(除DECA影響P位外,其它不影響任何標志)DECADECRnDECdirectDEC@Ri
注:沒有專門的DECDPTR指令,要實現(xiàn)其功能可編程實現(xiàn)。/sundae_meng三.乘法指令(Multiplication)
MULAB;(A)×(B)低8位→A
高8位→B
A、B中都是無符號整數(shù)如果積大于255,OV=1,否則OV=0;進位標志總是清零Cy=0。注意P91的例3-13中的:ADDCA,#0指令的用法。/sundae_meng四.除法指令(Division)DIVAB;(A)÷(B)商→A
余數(shù)→BA、B中都是無符號整數(shù)如果除數(shù)B為“0”,OV=1,否則OV=0;進位標志總是清零Cy=0。/sundae_meng3.3.3邏輯運算指令除帶進位的循環(huán)指令RRC、RLC對標志位有影響外,其它指令不影響標志位。
/sundae_meng/sundae_meng1.簡單邏輯操作指令
CLRA;A←“0”CPLA;A←ASWAPA;A0~3A4~7例:(A)=3AH,CPLA,(A)=0C5H00111010B→11000101B
(A)=3AH,SWAPA,(A)=0A3H注:指令SWAP,也可看成一個4位循環(huán)移位指令,不影響標志位。/sundae_meng2.
循環(huán)指令(1)、左循環(huán)指令(RotateAccumulatorLeft)
RLA;左移1位例(A)=6CH=01101100BRLA(A)=11011000B=0D8Ha7←a0
C/sundae_meng(2)、帶進位左循環(huán)指令(RotateAccumulatorLeftthroughCarryflag)
RLCA;左移1位,對標志位CY有影響例(A)=6CH=01101100B,(C)=1RLCA(A)=11011001B=0D9H,(C)=0a7←a0
C/sundae_meng
(3)、右循環(huán)指令(RotateAccumulatorRight)
RRA;右移1位例(A)=6CH=01101100BRRA(A)=00110110B=36Ha7a0
C/sundae_meng(4)、帶進位右循環(huán)指令(RotateARightwithC)RRCA;右移1位,對標志位CY有影響例(A)=6CH=01101100B,(C)=1RRCA(A)=10110110B=0B6H,(C)=0a7a0
C
這組指令除了帶進位標志位的移位指令外,其它都不影響Cy,AC,OV等標志。/sundae_meng3.
邏輯與指令A(yù)NLA,RnANLA,directANLA,#dataANLA,@RiANLdirect,AANLdirect,#data∧--“與”,“有0即0,全1為1”00000111∧)1111110100000101B=05HX∧0=0;X∧1=XX∧X=X/sundae_meng4.
邏輯或指令ORLA,RnORLA,directORLA,#dataORLA,@RiORLdirect,AORLdirect,#data∨--“或”,“有1即1,全0為0”00000110∨)0110110101101111B=6FHX∨0=X;X∨1=1X∨X=X/sundae_meng5.邏輯異或指令XRLA,RnXRLA,directXRLA,#dataXRLA,@RiXRLdirect,AXRLdirect,#data
--“異或”,“相異為1,相同為0”00000110
)0110110101101011B=6BHX⊕0=XX⊕1=XX⊕X=0/sundae_meng例(A)=01××××××B,×表示隨機狀態(tài),為1或0,執(zhí)行下述一組指令執(zhí)行后A的值如何?XRLA,#0C0H ;將累加器A的內(nèi)容D7、D6取反01××××××
ORLA,#03H ;將累加器A的內(nèi)容D1、D0置111000000
(C0H)
ANLA,#0E7H ;將累加器A的內(nèi)容D4、D3清010××××××
00000011
(03H)
10××××1111100111(E7H)
10×00×11
解:執(zhí)行上述指令后,(A)=10×00×11B。習題1:如何將累加器A中的數(shù)據(jù)高4位清0,低位不變?
習題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?1、ANLA,#0FH2、XRLR2,#10101010B/sundae_meng3.3.4控制轉(zhuǎn)移指令(17條)單片機有一定的智能作用,主要是控制轉(zhuǎn)移類指令的功勞。由于該類指令用于控制程序的走向,所以其作用必然是在程序存貯器的空間內(nèi)。/sundae_meng表3-7控制轉(zhuǎn)移指令/sundae_meng一、無條件轉(zhuǎn)移指令1.(絕對)短跳轉(zhuǎn)指令(2字節(jié)指令)AJMPaddr11
;PC←addr11,跳轉(zhuǎn)范圍2k
(211=2K)這是2KB范圍內(nèi)的無條件跳轉(zhuǎn)指令,執(zhí)行該指令時,先將PC+2(因該指令是2個字節(jié)的指令),然后將addr11送入PC10~PC0,而PC15~PC11保持不變。這樣得到跳轉(zhuǎn)的目的地址。需要注意的是,目標地址與AJMP后面一條指令的第一個字節(jié)必須在同一個2KB區(qū)域的存儲器區(qū)內(nèi)。例:判斷下列指令是否正確?(1)、地址指令
0345HAJMP0123H(2)、2567HAJMP29ABH(1).(PC+2)=0347H二進制碼為:0000001101000111B0123H二進制碼為:0000000100100011B(2).(PC+2)=2569H二進制碼為:0010010101101001B29ABH二進制碼為:0010100110101011B解:/sundae_meng2.長跳轉(zhuǎn)指令(3字節(jié)指令)
LJMPaddr16;PC←addr16,跳轉(zhuǎn)范圍64k
執(zhí)行該指令時,將16位目標地址addr16
裝入PC,程序無條件轉(zhuǎn)向指定的目標地址。轉(zhuǎn)移的目標地址可以在64KB程序存儲器地址空間的任何地方,不影響任何標志。3.散轉(zhuǎn)指令(間接跳轉(zhuǎn)指令)(1字節(jié)指令)
JMP@A+DPTR;PC←((A)+(DPTR))
執(zhí)行該指令時,把累加器A中的8位無符號數(shù)與數(shù)據(jù)指針中的16位數(shù)相加,結(jié)果作為下條指令的地址送入PC,不改變累加器A和數(shù)據(jù)指針DPTR的內(nèi)容,也不影響標志。利用這條指令能實現(xiàn)程序的散轉(zhuǎn)。/sundae_meng4.相對轉(zhuǎn)移指令(與轉(zhuǎn)移指令所在的位置有關(guān))(2字節(jié)指令)
SJMPrel;PC←(PC)+2,PC←(PC)+rel
執(zhí)行該指令時,先將PC+2,再把指令中帶符號的偏移量加到PC上,得到跳轉(zhuǎn)的目標地址送入PC。rel--機器碼的相對偏移量,為8位補碼,轉(zhuǎn)移范圍:前128~后127字節(jié)。
rel=(目的地址-轉(zhuǎn)移指令地址-轉(zhuǎn)移指令字節(jié)數(shù))補=(目的地址-PC當前值)補。注:編程時,可用標號代替轉(zhuǎn)移目的地址,rel交給編譯程序計算,注意轉(zhuǎn)移范圍。例(1):
SJMPNEXT(或AJMPNEXT,SJMPNEXT)
…NEXT:…例(2):原地踏步指令的指令:
HERE:SJMPHERE常寫成:SJMP$;($~地址計算器的值,為正在匯編的指令的地址)/sundae_meng
二、條件轉(zhuǎn)移指令
JZrel;(A)=0轉(zhuǎn)移
JNZrel;(A)≠0轉(zhuǎn)移這類指令是依據(jù)累加器A的內(nèi)容是否為0的條件轉(zhuǎn)移指令。條件滿足時轉(zhuǎn)移(相當于一條相對轉(zhuǎn)移指令),條件不滿足時則順序執(zhí)行下面一條指令。轉(zhuǎn)移的目標地址在以下一條指令的起始地址為中心的256
個字節(jié)范圍之內(nèi)(-128~+127)。當條件滿足時,PC←(PC)+N+rel,其中(PC)為該條件轉(zhuǎn)移指令的第一個字節(jié)的地址,N為該轉(zhuǎn)移指令的字節(jié)數(shù)(長度),本轉(zhuǎn)移指令N=2。注:編程時,可用標號代替轉(zhuǎn)移目的地址。
如:JZLOOP/sundae_meng
三、比較轉(zhuǎn)移指令在MCS-51中沒有專門的比較指令,但提供了下面4條比較不相等轉(zhuǎn)移指令:CJNEA,direct,relCJNEA,#data,rel;(A)=#data,繼續(xù),C←0(A)>#data,轉(zhuǎn),C←0(A)<#data,轉(zhuǎn),C←1
特點:(A)只有<#data時,C←1CJNERn,#data,relCJNE@Ri,#data,rel
這組指令的功能是:比較前面兩個操作數(shù)的大小,如果它們的值不相等則轉(zhuǎn)移。轉(zhuǎn)移地址的計算方法與上述兩條指令相同。如果第一個操作數(shù)(無符號整數(shù))小于第二個操作數(shù),則進位標志Cy置“1”,否則清“0”,但不影響任何操作數(shù)的內(nèi)容。如:CJNEA,#78H,LOOP
做減法運算注意:該指令本質(zhì)上是做減法運算,但不影響原來操作數(shù)的值。/sundae_meng
四、減1不為0轉(zhuǎn)移指令DJNZRn,relDJNZdirect,rel;運行后對原來的操作數(shù)有影響。這兩條指令把源操作數(shù)減1,結(jié)果回送到源操作數(shù)中去,如果結(jié)果不為0則轉(zhuǎn)移(轉(zhuǎn)移地址的計算方法同前)。例:延時子程序
delay:MOVR7,#03H;1T
delay0:MOVR6,#19H;1T
delay1:DJNZR6,delay1;2T
DJNZR7,delay0;2TRET;2T
/sundae_meng
地址機器碼源程序注釋
ORG0000H
;整個程序起始地址0000020030LJMPMAIN;跳向主程序
ORG0030H
;主程序起始地址0030C3MAIN:CLRC;MAIN為程序標號0031E6LOOP:MOVA,@R0003237ADDCA,@R1003308INCR00034D9FBDJNZR1,LOOP;相對轉(zhuǎn)移00368002SJMPNEXT00387803MOVR0,#03H003A18NEXT:DECR0003B80FESJMP$;HERE:SJMPHERE
END;結(jié)束標記偏移量的計算/sundae_meng
五、調(diào)用及返回指令(保護斷點與恢復(fù),自動完成)
在程序設(shè)計中,通常把具有一定功能的公用程序段編制成子程序,當主程序需要使用子程序時用調(diào)用指令,而在子程序的最后安排一條子程序返回指令,以便執(zhí)行完子程序后能返回主程序繼續(xù)執(zhí)行。
子程序調(diào)用指令(LCALL、ACALL)一定在主程序中,子程序返回指令RET一定在子程序中。/sundae_meng1.絕對調(diào)用指令(保護斷點,2字節(jié)指令)
ACALLaddr11
這是一條2KB范圍內(nèi)的子程序調(diào)用指令。所用的子程序的入口地址必須與ACALL下面一條指令的第一個字節(jié)在同一個2KB區(qū)域的存儲器區(qū)內(nèi)。(PC)(PC)+2(SP)(SP)+1((SP))(PC0~7)(SP)(SP)+1((SP))(PC8~15)(PC)addr0~10(PC11~15)保持不變低8位先入,高8位后入/sundae_meng
2.長調(diào)用指令
LCALLaddr16
(3字節(jié)指令)
這條指令無條件調(diào)用位于16位地址addr16的子程序。執(zhí)行該指令時,先將PC+3以獲得下一條指令的首地址,并把它壓入堆棧(先低字節(jié)后高字節(jié)),SP內(nèi)容加2,然后將16位地址放入PC中,轉(zhuǎn)去執(zhí)行以該地址為入口的程序。LCALL指令可以調(diào)用64KB范圍內(nèi)任何地方的子程序。指令執(zhí)行后不影響任何標志。低8位先入,高8位后入/sundae_meng3.子程序返回指令(恢復(fù)斷點)
RET
這條指令的功能是:恢復(fù)斷點,將調(diào)用子程序時壓入堆棧的下一條指令的首地址取出送入PC,使程序返回主程序繼續(xù)執(zhí)行。
4.中斷返回指令
RETI;這條指令的功能與RET指令相似,不同的是它還要清除MCS-51單片機中斷響應(yīng)時所置位的優(yōu)先級狀態(tài)觸發(fā)器。
5.NOP~空操作指令:不進行任何操作,占用1個機器周期,然后繼續(xù)執(zhí)行下一條指令。(PC8~15
)((SP))(SP)(SP)-1(PC0~7)((SP))(SP)(SP)-1
高8位先出,低8位后出/sundae_meng例題設(shè)執(zhí)行前(SP)=52H。
…0312H1278PRC:ACALLSUB10314H7489MOVA,#89H…0645HF590SUB1:MOVP1,A…RET(1)、執(zhí)行指令PRC:ACALLSUB1的結(jié)果為:(53H)=14H,(54H)=03H,(PC)=0645H,程序由0645H開始執(zhí)行。(2)、執(zhí)行指令RET后:(SP)=52H,(PC)=0314H。程序返回0314H處開始執(zhí)行。/sundae_meng3.3.5位操
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年國際關(guān)系與現(xiàn)代外交政策知識考察試題及答案解析
- 中學第二學期學校德育處工作行事歷及德育工作總結(jié)
- 2025年數(shù)字化轉(zhuǎn)型與企業(yè)創(chuàng)新測試題及答案
- 2025年房地產(chǎn)經(jīng)紀人資格考試考題及答案
- 醫(yī)院人員緊急替代應(yīng)急預(yù)案
- 礦井防塵工技能培訓考試題庫及答案
- 2025年班組三級安全安全教育考試試題及答案
- 建設(shè)工程施工合同糾紛要素式起訴狀模板高清無水印下載
- 化驗員求職面試技巧總結(jié)
- 2026年智慧城市建設(shè)培訓
- 工作照片拍攝培訓課件
- 2025年海南三亞市吉陽區(qū)教育系統(tǒng)公開招聘編制教師122人(第1號)筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2026年孝昌縣供水有限公司公開招聘正式員工備考題庫參考答案詳解
- 托管學校合作合同協(xié)議
- 產(chǎn)品銷售團隊外包協(xié)議書
- 2025年醫(yī)保局支部書記述職報告
- 汽車充電站安全知識培訓課件
- 世說新語課件
- 全體教師大會上副校長講話:點醒了全校200多名教師!毀掉教學質(zhì)量的不是學生是這7個環(huán)節(jié)
- 民航招飛pat測試題目及答案
- T-CDLDSA 09-2025 健身龍舞彩帶龍 龍舞華夏推廣套路技術(shù)規(guī)范
評論
0/150
提交評論