指令系統(tǒng)和程序設(shè)計_第1頁
指令系統(tǒng)和程序設(shè)計_第2頁
指令系統(tǒng)和程序設(shè)計_第3頁
指令系統(tǒng)和程序設(shè)計_第4頁
指令系統(tǒng)和程序設(shè)計_第5頁
已閱讀5頁,還剩165頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

指令系統(tǒng)和程序設(shè)計●指令系統(tǒng):CPU所能執(zhí)行的全部指令集合§3.1指令系統(tǒng)概述一條指令是計算機中具有特定功能的操作命令●程序與程序設(shè)計按預(yù)定要求編排的指令序列稱為。編排的過程稱為機器語言二進制代碼,是機器唯一能直接識別、執(zhí)行的語言。匯編語言:指令助記符。用助記符,操作數(shù),標號編寫的程序稱為匯編語言源程序。一、匯編語言

匯編語言機器語言機器執(zhí)行●程序設(shè)計語言匯編語言高級語言(PLM;KeilCx51)翻譯匯編:完成由匯編語言到機器代碼的過程匯編的方法有兩種:自動匯編、手工匯編由機器代碼到匯編語言的過程叫反匯編匯編語言源程序機器語言

匯編程序

反匯編程序上頁下頁回目錄自動匯編:將輸入到計算機中的源程序,由機器中一個軟件將其翻譯成機器代碼的過程。這個翻譯軟件稱為匯編程序。二、匯編語言的格式[標號:]操作碼[操作數(shù)][;注釋]如:MAIN:MOVSP,#60H;設(shè)堆棧指針1、標號標號是該指令的符號地址,可根據(jù)需要設(shè)定必須以字母開始,以“

:”結(jié)束,長度不超過8個字符系統(tǒng)中的保留字符不能作標號,如:SFR名、ADD等標號可被其他語句的操作數(shù)可直接引用源程序中,一個標號只能定義一個語句,不能相重名字保持一義性上頁下頁回目錄一個匯編語句分為四個區(qū)段:2、操作碼由指令系統(tǒng)的助記符、偽指令助記符組成。操作碼指出該指令將進行何種操作3、操作數(shù):參加操作的數(shù)的本身或操作數(shù)所在的地址可為二進制數(shù)(B)、十進制數(shù)(D)、十六進制數(shù)(H)HEX:數(shù)字大于9,則數(shù)字應(yīng)以“0”開頭,如0FAH可以是操作數(shù)地址、立即數(shù)、標號、表達式如M+3目的操作數(shù)和源操作數(shù)之間用“,”分開可以是寄存器名如A、B、R0~R7、DPTR上頁下頁回目錄4、注釋以“

;”開頭,是程序員對指令操作的解釋,以幫助閱讀、理解程序的意義可有可無,建議進行程序注釋匯編時對這部分不予處理,不譯成任何機器代碼可用英語或某種簡潔的方式解釋指令上頁下頁回目錄三、偽指令偽指令僅在匯編程序中起控制作用,不產(chǎn)生可執(zhí)行目標代碼。1、起點指令ORG格式:ORG××××H功能:指定程序或數(shù)據(jù)塊的起始地址例:用法:一般出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始一個源程序可多次出現(xiàn)ORG指令ORG

0030HSTART:MOVA,#74H

┇;源程序的起始地址為0030H上頁下頁回目錄2、結(jié)束命令END格式:END功能:匯編程序結(jié)束標志附在一個源程序的結(jié)尾一個源程序只能出現(xiàn)一次END指令3、定義字節(jié)命令DB格式:功能:標號:DB

字節(jié)常數(shù)或字符定義字節(jié)的內(nèi)容,匯編程序把DB定義的字節(jié)依次存入標號開始的存儲單元用法:上頁下頁回目錄例:ORG8000HTAB:

DB45H,73,‘5’,‘A’TAB1:DB101B偽指令ORG定義了TAB的起始地址為8000H,偽指令DB定義了8000H~8003單元的內(nèi)容依次為:(8000H)=45H(8001H)=49H;73(8002H)=35H;’5’(8003H)=41H;’A’(8004H)=05H;101BTABTAB1(1)由ORG定義(2)跟在其他源程序之后上頁下頁回目錄4、定義字命令DW格式:功能:標號:DW字或字表定義若干個字(雙字節(jié))例:ORG8000HTAB:DW7234H,8AH,10(8000H)=72H(8001H)=34H(8002H)=00H(8003H)=8AH(8005H)=0AH匯編后:(8004H)=00H上頁下頁回目錄5、定義空間命令DS格式:功能:標號:DS數(shù)據(jù)或字符及表達式例:(8008H)=30H(8009H)=8AH從指定單元地址開始,由數(shù)據(jù)或字符及表達式的值來定義應(yīng)保留的單元數(shù),備用ORG8000HDS08HDB30H,8AH即:8000H~8007H單元保留備用定義空間上頁下頁回目錄6、等值命令EQU格式:字符名稱EQU數(shù)據(jù)或匯編符號功能:將一個數(shù)據(jù)或匯編符號賦予標號段規(guī)定的字符例:JIASHUEQU30HBEIJIAEQU31HHEEQU32H上頁下頁回目錄7、數(shù)據(jù)地址賦值命令DATA格式:字符名稱DATA數(shù)據(jù)或表達式功能:此命令把數(shù)據(jù)/代碼地址賦予標號段所規(guī)定的字符名稱。定義的字符名稱可先使用后定義INDEXJDATA8389HORG8000HINDEXJDATA8096HLJMPINDEXJENDORG8000HLJMP8096HEND;INDEXJ這個字符名稱的地址為8389H例:上頁下頁回目錄等價于EQU與DATA的區(qū)別(1)DATA與EQU相似,但DATA定義的字符名稱,

可先使用后定義,EQU則不能(2)EQU指令可把匯編符號賦給字符名稱,

DATA則不能(3)DATA可把表達式的值賦給字符名稱,

EQU則不能DATA常在程序中定義數(shù)據(jù)地址EQU常在程序中定義字符數(shù)據(jù)上頁下頁回目錄8、位地址符號命令BIT格式:字符名稱BIT位地址功能:把位地址賦予一標號A1BITP1.0A2BITP2.0例:;P1.0,P2.0位地址賦予字符A1、A2,在編程時可以直接把A1、A2當(dāng)成位地址使用上頁下頁回目錄三、MCS-51指令系統(tǒng)的特點1、執(zhí)行速度快,存儲效率高MCS-51指令系統(tǒng)共有111條指令按字節(jié)分單字節(jié)指令49條雙字節(jié)指令45條三字節(jié)指令17條按周期分單周期指令64條雙周期指令45條四周期指令2條設(shè)時鐘頻率為12MHz,則指令執(zhí)行的時間分別為:1s582s404s2影響程序存儲器影響系統(tǒng)實時性上頁下頁回目錄2、指令易掌握,功能強具有豐富的位操作指令、查表指令、散轉(zhuǎn)指令乘除指令等。構(gòu)成了完整的指令系統(tǒng)3、適合于控制、智能儀表布爾處理機,可進行“位”操作。上頁下頁回目錄四、尋址方式(7種)⑴立即尋址⑵直接尋址⑶寄存器尋址⑷寄存器間接尋址⑸基址寄存器加變址寄存器間接尋址⑹相對尋址⑺位尋址上頁下頁回目錄五、MCS-51指令分類(5類)⑴數(shù)據(jù)傳送(29條)⑵算術(shù)運算(24條)⑶邏輯運算(24條)⑷控制轉(zhuǎn)移(17條)⑸布爾處理(17條)共111條指令上頁下頁回目錄介紹描述指令符號的意義—當(dāng)前選中的寄存器區(qū)的8個工作寄存器(R0~R7)RnRidirect-——8位內(nèi)部RAM單元地址00H~7FH——專用特殊功能寄存器SFR的地址80H~FFH——立即數(shù)(8位)#data#data16——立即數(shù)(16位)—當(dāng)前選中的寄存器區(qū)中可做間址寄存器的2個工作寄存器(R0、R1)i=0、1n=0~7上頁下頁回目錄addr16—16位目的地址,用于LCALL、LJMP指令

地址范圍64KBROM空間addr11—11位目的地址,用于ACALL、AJMP指令

地址范圍2KBROM空間relDPTR—數(shù)據(jù)地址指針,可做16位間址寄存器bit—內(nèi)部RAM或SFR中的直接位尋址—8位帶符號的偏移量,用于SJMP和所有的條件轉(zhuǎn)移指令中范圍-128~127上頁下頁回目錄C—位累加器(PSW.7),進位/借位標志@—間址或基址寄存器前綴,如@Ri,@A+DPTR/—位操作的前綴,表示對該位操作數(shù)取反(X)—X中的內(nèi)容((X))—由X尋址的單元中的內(nèi)容箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替@DPTR,@A+PC上頁下頁回目錄§3.2MCS-51指令的尋址方式用何種方式尋找指令的操作數(shù)或指令的執(zhí)行地址1、立即尋址尋址空間:指令形式:操作碼立即數(shù)程序存儲器指令操作數(shù)以指令形式存放在程序存儲器中.即:操作碼后面的一個字節(jié)是實際操作數(shù)立即尋址:用何種方式尋找OP#data上頁下頁回目錄指令的尋址方式:指令的尋址方式:MOVA,#30H;A#30H例1:操作碼立即數(shù)74H30HROM××MOVDPTR,#8000H;DPTR#8000H例2:操作碼立即數(shù)的高8位立即數(shù)的低8位DPHDPL80H00H90H80HROM00H上頁下頁回目錄2、直接尋址尋址空間:指令的三種形式:操作碼操作數(shù)地址在指令中直接給出操作數(shù)的真實地址操作碼后面的一個字節(jié)是實際操作數(shù)地址操作碼操作數(shù)地址立即數(shù)操作碼源操作數(shù)地址目的操作數(shù)地址內(nèi)RAM的低128字節(jié)特殊功能寄存器SFR區(qū)直接尋址直接尋址是訪問SFR的唯一方法上頁下頁回目錄00H~7FH80H~FFHCPU內(nèi)部上頁下頁回目錄MOVA,30H;A(30H)例1:操作碼操作數(shù)地址E5H30HROM××A內(nèi)RAM××30H××ANL30H,#30H;30H(30H)∧#30H例2:操作碼直接地址立即數(shù)53H30HROM30H××3、寄存器尋址尋址空間:指令的三種形式:操作碼實際操作數(shù)是當(dāng)前選定的寄存器的內(nèi)容操作碼立即數(shù)操作碼直接地址R0~R7,由RS0、RS1確定寄存器區(qū)A、B、CY(位),DPTR、ABMOVA,R3;A(R3)例1:ADDA,R3;A(A)+(R3)例2:寄存器尋址:上頁下頁回目錄4、寄存器間接尋址尋址空間:指令的三種形式:操作碼操作碼立即數(shù)操作碼直接地址內(nèi)部RAM(@R0,@R1,SP)外部RAM(@R0,@R1,@DPTR)寄存器間接尋址:指令選定的寄存器內(nèi)容就是實際的操作數(shù)地址,操作數(shù)地址由寄存器間接給出上頁下頁回目錄MOV@R0,A例1:操作碼F6HROMR030H;累加器傳送指令內(nèi)RAM××30HA××××上頁下頁回目錄MOVR0,#30H5、基址寄存器加變址寄存器間接尋址(變趾尋趾)基址寄存器加變址寄存器間接尋址:

以DPTR或PC作基址寄存器,A作變址寄存器兩者相加形成操作數(shù)地址。尋址空間:程序存儲器(@A+DPTR、@A+PC)指令形式:操作碼上頁下頁回目錄MOVDPTR,#2400HMOV A,#0FHMOVCA,@A+DPTR例:操作碼DPTR2400HA

0FH93HROM……××240FH×ד讀”PSEN“讀”MOVCA,@A+DPTR上頁下頁回目錄6、相對尋址程序存儲器,用于程序控制尋址空間:指令的三種形式:操作碼rel操作碼

直接地址rel操作碼

立即數(shù)rel相對尋址以當(dāng)前PC值為基準地址,加上指令的偏移量“rel”,結(jié)果為目標地址。rel為有符號補碼數(shù),范圍:-128~+127一般為雙字節(jié)或三字節(jié)指令上頁下頁回目錄JNZrel例:;累加器A不等零則轉(zhuǎn)移設(shè):rel=23H2025H2002H2001H2000HROM70H23H下一條指令.......操作碼(PC)=2002Hrel=23H修正后轉(zhuǎn)移目標地址D(PC)=2025HPC偏移量上頁下頁回目錄(PC)=2002HRel=23H)005202HD=7、位尋址尋址空間:片內(nèi)RAM的20H~2FH字節(jié)地址SFR中12個能被8整除的字節(jié)地址對內(nèi)部RAM、SFR的位地址空間進行訪問,稱為位尋址。位地址用于布爾指令。共221位上頁下頁回目錄尋址方式與相應(yīng)的尋址空間小結(jié):內(nèi)RAM的低128字節(jié)特殊功能寄存器SFR直接尋址direct位尋址片內(nèi)RAM20H~2FH部分SFRbit

寄存器R0~R7,A,BCY,DPTR片內(nèi)寄存器間址@R0,@R1,SP

@R0,@R1,@DPTR片內(nèi)RAM、片外RAM與I/O口立即數(shù)#data

程序存儲器程序存儲器基址加變址@A+DPTR,@A+PC程序存儲器相對尋址PC+rel利用的變量

使用的空間方式§3.3MCS-51指令系統(tǒng)介紹MCS-51系統(tǒng)指令系統(tǒng)共111條,按操作功能分類:⑴數(shù)據(jù)傳送類⑵算術(shù)運算類⑶邏輯運算類⑷控制轉(zhuǎn)移類⑸布爾處理類上頁下頁回目錄111條基本指令衍生出255種指令代碼00H~0FFH(0A5H沒有定義)例如:MOVA,Rn(n:0~7)對應(yīng)指令代碼:E8H~EFH學(xué)習(xí)指令要點:1、掌握指令操作;2、掌握指令的尋址方式;3、掌握指令對程序狀態(tài)字(PSW)的影響;4、合理使用指令。一、數(shù)據(jù)傳送類(29條)用到的指令助記符有5種:片內(nèi)傳送MOV片外傳送MOVX查表傳送MOVC累加器交換XCH、XCHD、SWAP堆棧操作PUSH、POP上頁下頁回目錄一般的操作是把源操作數(shù)傳送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)修改為源操作數(shù)。數(shù)據(jù)傳送指令不影響PSW各位(奇偶位除外),只有堆棧操作可直接修改PSW。1、MOV類傳送指令格式:MOV〈目的字節(jié)〉〈源字節(jié)〉功能:把源字節(jié)內(nèi)容送目的字節(jié),源字節(jié)內(nèi)容不變以累加器A為目的字節(jié)的傳送:⑴立即數(shù)送累加器MOVA,#data74H立即數(shù)

機器碼;立即數(shù)#data送累加器A

雙字節(jié)指令,機器碼的第一字節(jié)為74H,第二字節(jié)為立即數(shù)上頁下頁回目錄⑵寄存器內(nèi)容送累加器MOVA,Rn(n=0~7)工作寄存器組的選擇由狀態(tài)字中的RS0、RS1確定⑶內(nèi)部RAM或SFR內(nèi)容送累加器MOVA,direct;Rn的內(nèi)容送累加器A;以direct為地址的單元的內(nèi)容送累加器A上頁下頁回目錄例:MOVR0,#30HMOVA,R0 例: MOV30H,#55HMOVA,30H⑷內(nèi)部RAM內(nèi)容送累加器MOVA,@Ri(i=0、1)如:MOV30H,#88HMOVR0,#30HMOVA,@R0;以Ri內(nèi)容為地址單元中的數(shù)送累加器A以Rn為目的字節(jié)的傳送:⑸立即數(shù)送寄存器MOVRn,#data(n=0~7);立即數(shù)#data送累加器Rn上頁下頁回目錄如:MOVR0,#67H;

MOVR7,#0F0H⑹累加器內(nèi)容送寄存器RnMOVRn,A(n=0~7);累加器A的內(nèi)容送Rn⑺內(nèi)部RAM或SFR內(nèi)容送寄存器RnMOVRn,direct(n=0~7)如:MOVR1,30H;

MOVR2,60H;以direct為地址的單元的內(nèi)容送寄存器Rn上頁下頁回目錄如:MOVR0,A; MOVR5,A⑻立即數(shù)送內(nèi)部RAM或SFRMOVdirect,#data;立即數(shù)#data送以direct為地址的單元如:MOV30H,#45;(30H)45⑼累加器內(nèi)容送內(nèi)部RAM或SFRMOVdirect,A;累加器送以direct為地址的單元如:MOV45H,A;(45H)A直接地址為目的字節(jié)的傳送:⑽寄存器內(nèi)容送內(nèi)部RAM或SFRMOVdirect,Rn(n=0~7);寄存器Rn內(nèi)容送以direct為地址的單元如:MOV56H,R6;56H(R6)⑾內(nèi)部RAM或SFR之間直接傳送MOVdirect1,direct2;內(nèi)部RAM或SFR任意兩個單元之間傳送數(shù)據(jù)例:MOV30H,31H;30H(31H)上頁下頁回目錄⑿內(nèi)部RAM數(shù)據(jù)送內(nèi)部RAM或SFRMOVdirect,@Ri(i=0、1)例:MOV20H,@R0;20H((R0));以Ri內(nèi)容為地址單元中的數(shù)送內(nèi)RAM或SFR⒀立即數(shù)送內(nèi)部RAMMOV@Ri,#data(i=0、1);立即數(shù)#data送以Ri內(nèi)容為地址的單元例:MOV@R1,#30;(R1)#30上頁下頁回目錄⒁累加器內(nèi)容送內(nèi)部RAMMOV@Ri,A(i=0、1);累加器內(nèi)容送以Ri內(nèi)容為地址的單元例:MOV@R0,A;(R0)A⒂內(nèi)部RAM或SFR數(shù)據(jù)送內(nèi)RAMMOV@Ri,direct(i=0、1)例:MOV@R1,56H;(R1)(56);以direct為地址的單元內(nèi)容送Ri內(nèi)容為地址的單元上頁下頁回目錄⒃16位立即數(shù)傳送指令MOVDPTR,#data16;16位立即數(shù)送DPTR中,設(shè)置地址指針。例:MOVDPTR,#3000H

;DPH#30H

;DPL#00H上頁下頁回目錄MOV類傳送指令小結(jié)MOVA,#data立即數(shù)送累加器MOVA,Rn寄存器內(nèi)容送累加器MOVA,direct直接地址內(nèi)容送累加器MOVA,@Ri內(nèi)部RAM內(nèi)容送累加器MOVRn,#data立即數(shù)送寄存器MOVRn,A累加器內(nèi)容送寄存器RnMOVRn,direct直接地址內(nèi)容送寄存器Rn指令助記符說明字節(jié)2121212上頁下頁回目錄MOV片內(nèi)傳送指令機器周期數(shù)1111111P364~367

MOV類傳送指令小結(jié)MOVdirect1,direct2內(nèi)RAM或SFR之間直接傳送MOVdirect,@Ri內(nèi)RAM數(shù)據(jù)送內(nèi)RAM或SFRMOVdirect,#data立即數(shù)送內(nèi)部RAM或SFRMOVdirect,A累加器內(nèi)容送內(nèi)RAM或SFRMOVdirect,Rn寄存器內(nèi)容送內(nèi)RAM或SFR指令助記符說明字節(jié)32232MOV@Ri,#data立即數(shù)送內(nèi)RAMMOV@Ri,A累加器內(nèi)容送內(nèi)RAMMOV@Ri,direct內(nèi)RAM數(shù)據(jù)送內(nèi)RAM或SFRMOVDPTR,#data1616位立即數(shù)傳送指令2123上頁下頁回目錄MOV片內(nèi)傳送指令@RidirectRn#dataACC傳送指令在片內(nèi)數(shù)據(jù)存儲器中傳送操作例:將片內(nèi)RAM30H單元的內(nèi)容傳送到片內(nèi)RAM

地址為78H的單元。MOV78H,30H例:將片內(nèi)RAM地址為30H、31H單元的內(nèi)容傳送到片內(nèi)RAM地址為80H、81H單元中。MOVR0,#80HMOV@R0,30HMOV R0,#81HMOV@R0,31H例:將片內(nèi)RAM地址為80H、81H單元的內(nèi)容傳送到片內(nèi)RAM地址為90H、91H單元中。MOVR0,#81HMOVA,@R0MOV R1,#91HMOV@R1,AMOVR0,#80H;指向源地址MOVA,@R0;取出數(shù)據(jù)MOV R1,#90H;指向目的地址MOV@R1,A;進行數(shù)據(jù)傳送屬于簡單程序的設(shè)計,其特點:既無分支,又無循環(huán),按照順序執(zhí)行可完成一定的基本功能,是編寫復(fù)雜程序的基礎(chǔ)高128字節(jié)存儲器的數(shù)據(jù)傳送,采用間接尋址方式2、MOVX類傳送指令累加器A與外部RAM傳送數(shù)據(jù)用MOVX⑴外部RAM內(nèi)容送累加器AMOVXA,@Ri(i=0、1)例:MOVP2,#30HMOVR0,#00HMOVXA,@R0 ;以Ri內(nèi)容為外部RAM地址的單元中的數(shù)送A,外部數(shù)據(jù)存儲器讀指令。高8位地址由P2給出。⑵累加器內(nèi)容送外RAMMOVX@Ri,A(i=0、1);累加器內(nèi)容送以Ri內(nèi)容為地址的外部RAM單元,外部數(shù)據(jù)存儲器寫指令。上頁下頁回目錄⑶外部RAM送累加器A:讀外部RAM單元內(nèi)容MOVXA,@DPTR;以DPTR內(nèi)容為地址的外部RAM單元中的數(shù)送A⑷累加器內(nèi)容送外RAM:寫數(shù)據(jù)到外部RAM單元MOVX@DPTR,A;累加器內(nèi)容送以DPTR內(nèi)容為地址的外部RAM單元例:將3000H內(nèi)容送入3100H中

MOVDPTR,#3000HMOVXA,@DPTRMOVDPTR,#3100HMOVX@DPTR,AMOVX類傳送指令小結(jié)

指令助記符說明字節(jié)1111MOVXA,@Ri外部RAM內(nèi)容送累加器AMOVX@Ri,A累加器內(nèi)容送外RAMMOVXA,@DPTR外部RAM單元內(nèi)容送累加器AMOVX@DPTR,A累加器內(nèi)容送外RAM單元MOVX片外傳送指令例:將片外RAM120H單元的內(nèi)容傳送到片外RAM

地址為0078H的單元。MOVDPTR,#0120HMOVXA,@DPTRMOVX@DPTR,A;外部RAM送累加器A;累加器內(nèi)容送外RAM上頁下頁回目錄MOVDPTR,#0078H3、MOVC類傳送指令MOVC為程序存儲器傳送指令,均為基址加變址寄存器尋址。MOVCA,@A+DPTR

;以DPTR作基址寄存器,A作變址寄存器,兩者;相加形成16位ROM地址,將該單元內(nèi)容讀入A⑴以DPTR作基址加變址尋址上頁下頁回目錄長查表指令MOVCA,@A+PC83H機器碼⑵以PC作基址加變址尋址

;取指后PC增“1”,以當(dāng)前PC作基址,A作變址,兩者;相加形成16位ROM地址,將該單元內(nèi)容讀入A上頁下頁回目錄短查表指令MOVC類傳送指令小結(jié)指令助記符說明字節(jié)11MOVCA,@A+DPTRMOVCA,@A+PC以DPTR作基址加變址尋址以PC作基址加變址尋址上頁下頁回目錄 MOVDPTR,#PFTAB MOVA,#03H MOVCA,@A+DPTR SJMP$例:根據(jù)累加器A中的數(shù)(0~9),查找對應(yīng)的平方值。PFTAB:DB0,1,4,9,16,25DB36,49,64,81;數(shù)0-9的平方表

ENDORG0000HLJMPMAINORG0030HMAIN:MOVSP,#60HDPTR2000HA

03H09HMOVCA,@A+DPTR93HROM……00H2000H01H04H09H2001H2002H2003H…;設(shè)(A)=03H,查“3”的平方ALU上頁下頁回目錄4、XCH、XCHD、SWAP類傳送指令⑴寄存器內(nèi)容與累加器內(nèi)容交換XCHA,Rn(n=0~7);(A)(Rn)⑵內(nèi)部RAM或SFR內(nèi)容與累加器內(nèi)容交換XCHA,direct(n=0~7);(A)(direct)上頁下頁回目錄⑶內(nèi)RAM內(nèi)容與累加器內(nèi)容交換XCHA,@Ri(i=0,1);(A)((Ri))⑷內(nèi)部RAM內(nèi)容低4位與累加器低4位內(nèi)容交換XCHDA,@Ri(i=0,1);(A3~0)((Ri)3~0)上頁下頁回目錄A(Ri)⑸累加器A高4位與低4位交換SWAPA;(A3~0)(A7~4)單字節(jié)指令上頁下頁回目錄A例:MOVA,#56HSWAPA

交換類傳送指令小結(jié)指令助記符說明字節(jié)12111XCHA,RnXCHA,direct寄存器內(nèi)容與累加器內(nèi)容交換直接地址內(nèi)容與累加器內(nèi)容交換XCHA,@RiXCHDA,@Ri內(nèi)RAM內(nèi)容與累加器內(nèi)容交換內(nèi)RAM內(nèi)容低4位與累加器低4位交換SWAPA累加器A高4位與低4位交換上頁下頁回目錄5、堆棧操作指令⑴進棧指令PUSHdirect第1步:SP自動增“1”,(SP)(SP)

+1第2步:direct地址單元的內(nèi)容壓入SP指向的單元⑵出棧指令POPdirect第2步:SP自動減“1”,(SP)(SP)

-1第1步、SP指向的單元內(nèi)容彈出到以direct為地址的單元中上頁下頁回目錄SPSP例:堆棧操作設(shè)(A)=55H,(B)=3FH’建立堆?!瘔喝氩僮鳌瘡棾霾僮?/p>

60H61H62H63H64H55H3FHSPMOVSP,#60HPUSHAPUSHBPOPPSWSP

結(jié)果:PSW的內(nèi)容3FH,SP的內(nèi)容為61H上頁下頁回目錄PSW3FH二、算術(shù)運算類(24條)用到的指令助記符有8種:加法指令A(yù)DD帶進位加法指令:ADDC帶進位的減法指令:SUBB增1指令:INC減1指令:DEC乘除指令MUL除法指令:DIV十進制加法調(diào)整指令:DA算術(shù)運算類指令執(zhí)行結(jié)果影響標志位:CY、AC、OV上頁下頁回目錄1、不帶進位加ADD⑴累加器內(nèi)容加立即數(shù)ADDA,#data;A(A)+#data⑵累加器內(nèi)容加寄存器內(nèi)容ADDA,Rn(n=0~7);A(A)+(Rn)上頁下頁回目錄例:計算12H+34H:

MOVA,#12HADDA,#34H例:MOVA,#12HMOVR0,#34HADDA,R0⑶累加器內(nèi)容加內(nèi)部RAM內(nèi)容ADDA,@Ri(i=0,1);A(A)+((Ri))⑷累加器內(nèi)容加內(nèi)部RAM內(nèi)容或SFRADDA,direct;A(A)+(direct)上頁下頁回目錄ADD類指令小結(jié)指令助記符說明字節(jié)2112ADDA,#dataADDA,Rn立即數(shù)加到累加器寄存器內(nèi)容加到累加器ADDA,@RiADDA,direct內(nèi)RAM內(nèi)容加到累加器直接地址內(nèi)容加到累加器上頁下頁回目錄2、帶進位加ADDC⑴累加器內(nèi)容加立即數(shù)加進位位ADDCA,#data;A(A)+#data+CY⑵累加器內(nèi)容加寄存器內(nèi)容加進位位ADDCA,Rn(n=0~7);A(A)+(Rn)+CY上頁下頁回目錄⑶累加器內(nèi)容加內(nèi)RAM內(nèi)容加進位位ADDCA,@Ri(i=0,1);A(A)+((Ri))+CY⑷累加器內(nèi)容加內(nèi)RAM內(nèi)容或SFR加進位位ADDCA,direct;A(A)+(direct)+CY上頁下頁回目錄指令符助記說明字節(jié)2112ADDCA,#dataADDCA,Rn立即數(shù)和進位加到累加器寄存器內(nèi)容和進位加到累加器ADDCA,@RiADDCA,direct內(nèi)RAM內(nèi)容和進位加到累加器直接地址內(nèi)容和進位加到累加器ADDC類指令小結(jié)上頁下頁回目錄3、增量INC⑴累加器內(nèi)容加“1”INCA;A(A)+1⑵寄存器內(nèi)容加“1”INCRn;A(Rn)+1上頁下頁回目錄⑶內(nèi)RAM或SFR內(nèi)容加“1”INCdirect;(Ri)((Ri))+1⑷內(nèi)RAM內(nèi)容加“1”INC@Ri;direct(direct)+1上頁下頁回目錄⑸數(shù)據(jù)指針DPTR內(nèi)容加“1”INCDPTR;DPTR(DPTR)+1INC指令中除INCA指令影響P標志位,其余指令不影響任何標志位上頁下頁回目錄INC類指令小結(jié)指令助記符說明字節(jié)1121INCAINCRn累加器內(nèi)容加“1”寄存器內(nèi)容加“1INCdirect內(nèi)部RAM或SFR內(nèi)容加“1INC@Ri內(nèi)部RAM內(nèi)容加“1INCDPTR數(shù)據(jù)指針DPTR內(nèi)容加“11上頁下頁回目錄注意:ADDA,#1;INCA;ADDCA,#1 區(qū)別 4、十進制調(diào)整指令DAA;對累加器A,作BCD碼加法后進行“過9補6”調(diào)整若[(A3~0)>9]∨[AC=1]

則(A3~0)(A3~0)+06H若[(A7~4)>9]∨[CY=1]則(A7~4)(A7~4)+60H注意:DA指令不能對BCD碼減法的結(jié)果進行調(diào)整上頁下頁回目錄5、減法指令SUBB⑴累加器減立即數(shù)和借位標志SUBBA,#data⑵累加器減寄存器內(nèi)容和借位標志SUBBA,Rn(n=0~7);A(A)-#data-CY;A(A)-(Rn)-CY上頁下頁回目錄⑶累加器減RAM內(nèi)容和借位標志SUBBA,@Ri(i=0,1)⑷累加器內(nèi)容減內(nèi)RAM內(nèi)容或SFR和借位標志SUBBA,direct;A(A)-((Ri))-CY;A(A)-(direct)-CY上頁下頁回目錄SUBB類指令小結(jié)指令助記符說明字節(jié)2112SUBBA,#dataSUBBA,RnSUBBA,@RiSUBBA,direct累加器減立即數(shù)和借位累加器減寄存器內(nèi)容和借位累加器減RAM內(nèi)容和借位累加器減直接地址內(nèi)容和借位上頁下頁回目錄雙字節(jié)求補設(shè):兩個字節(jié)原碼數(shù)存在R1、R0中求補后結(jié)果,存在R3、R2中。例4-3:P122上頁下頁回目錄

程序:

CLRC

CLRA

SUBBA,R0

MOVR2,ACLRASUBBA,R1

ORG0000HMOVR3,ASJMP$END;CY0;A0;低字節(jié)求補;送R2;A清零;高字節(jié)求補;送R3R0R1原碼-)R2R300H00H存在借位雙字節(jié)求補設(shè):兩個字節(jié)原碼數(shù)存在R1、R0中求補后結(jié)果,存在R3、R2中。例4-3:P1226、減量DEC⑴累加器內(nèi)容減“1”DECA;A(A)-1⑵寄存器內(nèi)容減“1DECRn;Rn(Rn)-1上頁下頁回目錄⑶內(nèi)RAM或SFR內(nèi)容減“1DECdirect;(Ri)((Ri))-1⑷內(nèi)RAM內(nèi)容減“1DEC@Ri;direct(direct)-1上頁下頁回目錄DEC類指令小結(jié)指令助記符說明字節(jié)1121DECADECRn累加器內(nèi)容減“1”寄存器內(nèi)容減“1”DECdirect內(nèi)RAM或SFR內(nèi)容減“1”DEC@Ri內(nèi)RAM內(nèi)容減“1”上頁下頁回目錄7、MULMULABDIVAB;執(zhí)行(A)×(B)(BA)的操作CY=08、DIV;執(zhí)行(A)/(B)后,商A余BCY=0上頁下頁回目錄MOVA,20HMOVB,#10HDIVAB

MOVA,BADD

A,#30HMOV22H,AADDA,#30HMOV21H,AORG0000H

SJMP$

END例4-2:將一個字節(jié)內(nèi)的壓縮BCD碼拆開并變成ASCII碼,存入兩個RAM單元。BCD碼放在內(nèi)部RAM的20H,轉(zhuǎn)換后高半字節(jié)放到21H,低字節(jié)放22H。采用除10H取余法將兩個BCD數(shù)拆開BCDHBCDL三、邏輯運算類(24條)用到的指令助記符有9種:包括與、或、異或、清除、求反、移位等操作ANL、ORL、XRL、CLR、CPL、RL、RLC、RR、RRC上頁下頁回目錄1、邏輯與ANL(6條)⑴累加器內(nèi)容邏輯與立即數(shù)ANLA,#data;A(A)∧#data⑵累加器內(nèi)容邏輯與寄存器內(nèi)容ANLA,Rn(n=0~7);A(A)∧(Rn)上頁下頁回目錄⑶累加器內(nèi)容邏輯與內(nèi)RAM內(nèi)容ANLA,@Ri(i=0,1);A(A)∧((Ri))⑷累加器內(nèi)容邏輯與內(nèi)RAM內(nèi)容或SFRANLA,direct;A(A)∧(direct)上頁下頁回目錄⑸累加器內(nèi)容邏輯與內(nèi)RAM或SFRANLdirect,A;direct(direct)∧A⑹立即數(shù)邏輯與RAM或SFRANLdirect,#data;direct(direct)∧#data上頁下頁回目錄ANL類傳送指令小結(jié)ANLA,#data立即數(shù)邏輯與累加器ANLA,Rn寄存器內(nèi)容邏輯與累加器ANLA,direct直接地址內(nèi)容邏輯與累加器ANLA,@Ri內(nèi)RAM內(nèi)容邏輯與累加器指令助記符說明字節(jié)2121ANLdirect,AANLdirect,#data累加器邏輯與內(nèi)RAM或SFR立即數(shù)邏輯與RAM或SFR23上頁下頁回目錄2、邏輯或ORL(6條)⑴累加器內(nèi)容邏輯或立即數(shù)ORLA,#data;A(A)∨#data⑵累加器內(nèi)容邏輯或寄存器內(nèi)容ORLA,Rn(n=0~7);A(A)∨(Rn)上頁下頁回目錄⑶累加器內(nèi)容邏輯或內(nèi)RAM內(nèi)容ORLA,@Ri(i=0,1);A(A)∨((Ri))⑷累加器內(nèi)容邏輯或內(nèi)RAM內(nèi)容或SFRORLA,direct;A(A)∨(direct)上頁下頁回目錄⑸累加器內(nèi)容邏輯或內(nèi)RAM或SFRORLdirect,A;direct(direct)∨(A)⑹立即數(shù)邏輯或RAM或SFRORLdirect,#data;direct(direct)∨#data上頁下頁回目錄ORL類傳送指令小結(jié)ORLA,#data立即數(shù)邏輯或累加器ORLA,Rn寄存器內(nèi)容邏輯或累加器ORLA,direct直接地址內(nèi)容邏輯或累加器ORLA,@Ri內(nèi)RAM內(nèi)容邏輯或累加器指令符號說明字節(jié)2121ORLdirect,AORLdirect,#data累加器邏輯或內(nèi)RAM或SFR立即數(shù)邏輯或RAM或SFR23上頁下頁回目錄3、邏輯異或XRL(6條)⑴累加器內(nèi)容邏輯異或立即數(shù)XRLA,#data⑵累加器內(nèi)容邏輯異或寄存器內(nèi)容XRLA,Rn(n=0~7);A(A)#data○+;A(A)(Rn)○+上頁下頁回目錄⑶累加器內(nèi)容邏輯異或內(nèi)RAM內(nèi)容XRLA,@Ri(i=0,1)⑷累加器內(nèi)容邏輯異或內(nèi)RAM內(nèi)容或SFRXRLA,direct;A(A)((Ri))○+;A(A)(direct)○+上頁下頁回目錄⑸累加器內(nèi)容邏輯異或內(nèi)RAM或SFRXRLdirect,A⑹立即數(shù)邏輯異或RAM或SFRXRLdirect,#data;direct(direct)(A)○+;direct(direct)#data○+上頁下頁回目錄XRL類傳送指令小結(jié)XRLA,#data立即數(shù)邏輯異或累加器XRLA,Rn寄存器內(nèi)容邏輯異或累加器XRLA,direct直接地址內(nèi)容邏輯異或累加器XRLA,@Ri內(nèi)部RAM內(nèi)容邏輯異或累加器指令助記符說明字節(jié)2121XRLdirect,AXRLdirect,#data累加器邏輯異或內(nèi)部RAM或SFR立即數(shù)邏輯異或RAM或SFR23上頁下頁回目錄例:根據(jù)累加器中4~0的狀態(tài)修改P1端口位4~0的狀態(tài)ANLA,#00011111BANLP1,#11100000BORLP1,A;A屏蔽前3位,保留后5位;A的后5位是“1”,使P1口相應(yīng)位置“1”,P1前3位不變;P1屏蔽后5位,保留前3位上頁下頁回目錄僅修改了P1

口的后5位“讀”—“修改”—“寫”4累加器清除與求反指令(2條)⑴累加器A清零CLRA;A00H⑵累加器A按位取反CPLA;A(A)上頁下頁回目錄4移位指令(4條)⑴累加器內(nèi)容循環(huán)左移一位RLAA7A0⑵累加器內(nèi)容連同進位標志循環(huán)左移一位A7A0RLCACY上頁下頁回目錄⑶累加器內(nèi)容循環(huán)右移一位RRAA7A0⑷累加器內(nèi)容連同進位標志循環(huán)右移一位A7A0RRCACY上頁下頁回目錄

移位指令小結(jié)指令助記符說明字節(jié)1111RLARLCARRARRCA累加器循環(huán)左移累加器連同進位循環(huán)左移累加器循環(huán)右移累加器連同進位循環(huán)右移11CLRACPLA累加器A清零累加器A按位取反

累加器清除與求反指令小結(jié)上頁下頁回目錄例:設(shè)(A)=5AH、CY=1RLARLCARRARRCA;(A)=B4H;(A)=2DH;(A)=B5H;(A)=ADH0101101001011010010110101CY010110101CY010100上頁下頁回目錄四、控制轉(zhuǎn)移指令(17條)控制轉(zhuǎn)移指令共有17條:無條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令子程序的調(diào)用返回等上頁下頁回目錄1、無條件轉(zhuǎn)移指令⑴長轉(zhuǎn)移LJMPaddr16;PCaddr16addr15~802H

機器碼addr7~0⑵絕對轉(zhuǎn)移AJMPaddr11;PC10~0A10~0

,PC15~11不變AJMP將程序存儲器分為32個區(qū),由PC15~11決定,每個區(qū)2KB,分8頁,由A10A9A8決定。只能在區(qū)內(nèi)跳轉(zhuǎn)。;PC(PC)+2轉(zhuǎn)移范圍2KB轉(zhuǎn)移范圍64KB上頁下頁回目錄A7

~A0A10A9A800001PC15~PC11PC10PC9PC8PC7~

PC0…...在2區(qū)形成11位目標地址.........AJMP0區(qū)1區(qū)31區(qū)0000H07FFH0800H0FFFH1000H17FFHF800HFFFFH...1000H17FFH保持高5位地址以確定某區(qū)00010例如AJMPadd11

在2區(qū)的執(zhí)行過程2區(qū)2KB范圍內(nèi)頁內(nèi)地址頁地址操作碼00001⑶短轉(zhuǎn)移SJMPrel

;PC(PC)+rel指令中的rel是8位帶符號補碼,范圍-128~+127。

;PC(PC)+2上頁下頁回目錄⑷間接長轉(zhuǎn)移JMP@A+DPTR;PC(A)+(DPTR);和送給了PC,控制程序轉(zhuǎn)移到目的地址。上頁下頁回目錄

無條件轉(zhuǎn)移指令小結(jié)指令助記符說明字節(jié)3221長轉(zhuǎn)移LJMPaddr16絕對轉(zhuǎn)移AJMPaddr11短轉(zhuǎn)移SJMPrel間接長轉(zhuǎn)移JMP@A+DPTR上頁下頁回目錄(散轉(zhuǎn)指令)4.3.3分支程序設(shè)計根據(jù)前面程序運行結(jié)果,可以有N種選擇,并轉(zhuǎn)向其中任一處程序。例4-10128路分支程序:根據(jù)R3值轉(zhuǎn)向128個目的地址。編程方法:順序程序

MOVA,R3CJNEA,#00H,FZ1AJMPFZ00FZ1:CJNEA,#01H,FZ2AJMPFZ01FZ2:CJNEA,#02H,FZ3AJMPFZ02FZ3:….. 煩瑣,程序太長。如作10000個分支程序…….JMP128: MOVA,R3 CLRC SUBBA,#128 JNC ERROR MOV A,R3 RLA MOVDPTR,#PRGTAL JMP @A+DPTRPRGTAL: AJMP ROUT00 AJMP ROUT01 ……. AJMPROUT7F ;入口條件檢查;分支跳轉(zhuǎn);AJMP指令占2字節(jié)例4-10:P127128分支程序設(shè)計。使用JMP@A+DPTR指令實現(xiàn)之。分支程序應(yīng)用場所:1、鍵盤按鍵處理程序根據(jù)所按功能鍵轉(zhuǎn)到相應(yīng)的功能子程序2、通信協(xié)議處理程序例:某鍵盤如下:通信編號設(shè)置采樣時間設(shè)置+-確認MOV A,BCLR CSUBB A,#3JC FOUNRETFOUN:MOVA,B RL AADD A,B MOV DPTR,#KEYF JMP @A+DPTRKEYF:LJMPTONGXIN LJMPBIANHAOLJMPCAIYANG ;鍵編號則順序執(zhí)行2、條件轉(zhuǎn)移指令⑴累加器為零則轉(zhuǎn)移JZrel;若(A)=0,PC(PC)+2+rel;若(A)≠0,則PC(PC)+2JNZrel;若(A)≠0,PC(PC)+2+rel;若(A)=0,則PC(PC)+2⑵累加器不為零則轉(zhuǎn)移上頁下頁回目錄則轉(zhuǎn)移則順序執(zhí)行則轉(zhuǎn)移例:何時轉(zhuǎn)LABEL1、何時轉(zhuǎn)LABEL2?MOVA,R0CPLAJZLABEL1INC AJZLABEL2。。。。⑶累加器與立即數(shù)不等則轉(zhuǎn)移CJNEA,#data,rel;若(A)=#data,則PC(PC)+3,CY0;若(A)>#data,PC(PC)+3+rel,CY0;若(A)<#data,PC(PC)+3+rel,CY1⑷寄存器與立即數(shù)不等則轉(zhuǎn)移CJNERn,#data,rel;若(Rn)=#data,則PC(PC)+3,CY0;若(Rn)>#data,PC(PC)+3+rel,CY0;若(Rn)<#data,PC(PC)+3+rel,CY1上頁下頁回目錄順序轉(zhuǎn)移轉(zhuǎn)移順序⑹累加器與內(nèi)RAM或SFR不等則轉(zhuǎn)移CJNEA,direct,rel;若(A)=(direct),則PC(PC)+3,CY0;若(A)>(direct),PC(PC)+3+rel,CY0;若(A)<(direct),PC(PC)+3+rel,CY1⑸內(nèi)RAM與立即數(shù)不等則轉(zhuǎn)移CJNE@Ri,#data,rel;若((Ri))=#data,則PC(PC)+3,CY0;若((Ri))>#data,PC(PC)+3+rel,CY0;若((Ri))<#data,PC(PC)+3+rel,CY1上頁下頁回目錄順序轉(zhuǎn)移轉(zhuǎn)移順序⑺寄存器減“1”不等零則轉(zhuǎn)移DJNZRn,rel(n=0~7)DJNZdirect,rel⑻內(nèi)RAM或SFR減“1”不為零則轉(zhuǎn)移;若(Rn)≠0,PC(PC)+2+rel;若(Rn)=0,則PC(PC)+2;Rn(Rn)-1;若(direct)≠0,PC(PC)+2+rel;若(direct)=0,則PC(PC)+2;direct(direct)-1上頁下頁回目錄順序轉(zhuǎn)移轉(zhuǎn)移順序例:閱讀子程序,分析功能FULL0:MOVR7,#100 CLRA MOVDPTR,#2000HFUL0:MOVX@DPTR,A INC DPTR DJNZR7,FUL0 RET上頁下頁回目錄

條件轉(zhuǎn)移類指令小結(jié)指令助記符說明字節(jié)223323JZrelJNZrelCJNEA,#data,relCJNERn,#data,relDJNZRn,relDJNZdirect,rel累加器A為零則轉(zhuǎn)移累加器A不為零則轉(zhuǎn)移累加器A與立即數(shù)不等則轉(zhuǎn)移寄存器與立即數(shù)不等則轉(zhuǎn)移寄存器減“1”不等零則轉(zhuǎn)移內(nèi)RAM或SFR減“1”不為零則轉(zhuǎn)移CJNEA,direct,relCJNE@Ri,#data,rel間接RAM與立即數(shù)不等則轉(zhuǎn)移累加器A與直接內(nèi)RAM不等則轉(zhuǎn)移33利用比較轉(zhuǎn)移指令CJNE、減1不為“0”轉(zhuǎn)移指令DJNZ等實現(xiàn)循環(huán)程序設(shè)計。例4-13:在內(nèi)部RAM30H~4FH

連續(xù)32個單元中存放了單字節(jié)無符號數(shù),求32個無符號數(shù)之和,并存入內(nèi)部RAM51H,50H中。程序的流程圖如下:上頁下頁回目錄流程圖:31→R7#0→R3(30H)→A#31H→R0CY=0?ENDSTART

(R7)-1=0?51H←(R3)50H←(A)YN(A)+((R0))→A(R0+1)→R0(R3)+1→R3上頁下頁回目錄NY

程序:;R7作循環(huán)次數(shù)計數(shù)器;R3作和數(shù)高字節(jié)寄存器;取被加數(shù);R0作加數(shù)地址指針;CY=0,和<256,則轉(zhuǎn);作加法;CY=1,加到高字節(jié);修改R0指針;未完,重復(fù)加;存和數(shù)初始化部分循環(huán)體部分結(jié)束部分

ORG0000HSTART:MOVR7,#31MOVR3,#0MOVA,30HMOVR0,#31HLOOP:ADDA,@R0JNCNEXTINCR3NEXT:INCR0DJNZR7,LOOPMOV51H,R3MOV50H,ASJMP$END上頁下頁回目錄循環(huán)執(zhí)行直到R7=0循環(huán)控制3、子程序調(diào)用及返回指令⑴長調(diào)用LCALLaddr16;PCaddr16addr15~812H

機器碼addr7~0;PC(PC)+3;SP(SP)+1,(SP)PC7~0;SP(SP)+1,(SP)PC15~8;在調(diào)用子程序之前,保護斷點地址上頁下頁回目錄⑵絕對調(diào)用ACALLaddr11;PC(PC)+2;SP(SP)+1,(SP)PC7~0;SP(SP)+1,(SP)PC15~8;在調(diào)用子程序之前,保護斷點地址A10A9A810001A7

~A0機器碼;PC10~0A10~0上頁下頁回目錄⑶子程序返回RET;PC15~8((SP)),SP(SP)

-1⑷中斷返回RETI上頁下頁回目錄;PC7~0((SP)),SP(SP)

-1;PC15~8((SP)),SP(SP)

-1;PC7~0((SP)),SP(SP)

-1“0”觸發(fā)器優(yōu)先級狀態(tài)4、空操作NOP;PC(PC)+1上頁下頁回目錄

子程序調(diào)用及返回指令小結(jié)指令助記符說明字節(jié)32111LCALLaddr16長調(diào)用絕對調(diào)用ACALLaddr11子程序返回RET中斷返回RETI空操作NOP上頁下頁回目錄主程序:...LCALLDELY...子程序:不需主程序提供入口參數(shù),從子程序開始到子程序返回,大約為20ms例4-23調(diào)用延時子程序DELYDELY:MOVR7,#100DLY0:MOVR6,#98NOPDLY1:DJNZR6,DLY1DJNZR7,DLY0RET子程序開始的標號子程序返回指令調(diào)用子程序上頁下頁回目錄98×2=196μs1μs1μs設(shè):主頻為12MHZ2μs(196+2+2)×100+3=20003μs=20.003ms2μs1μs+3利用軟件延時,使P1.0接口上的發(fā)光二極管每隔0.5秒閃爍一次.1、硬件設(shè)計2、軟件設(shè)計子程序調(diào)用的現(xiàn)場保護

現(xiàn)場保護:

如果子程序使用的寄存器與主程序使用的寄存器有沖突,在轉(zhuǎn)入子程序前,特別是進行中斷服務(wù)子程序時,要進行現(xiàn)場保護。保護內(nèi)容:內(nèi)部RAM內(nèi)容, 各工作寄存器內(nèi)容,主程序正在使用累加器A、BDPTRPSW保護方式:將要保護的單元壓入堆棧。還可以用RS1RS0來選擇其他通用寄存器組,以便保護主程序現(xiàn)場。上頁下頁回目錄例如:某子程序的現(xiàn)場保護BCDCB:PUSHACCPUSHPSWPUSHDPLPUSHDPH...POPDPHPOPDPLPOPPSWPOPACCRET推入與彈出應(yīng)按照“先進后出”,或“后進先出”的順序;;保護現(xiàn)場;;子程序功能語句;;恢復(fù)現(xiàn)場;;;上頁下頁回目錄五、布爾處理類指令(17條)指令中位地址的助記符有多種表達方式:直接地址方式:如0D5H點操作符方式:如PSW.5位名稱方式:如F0

用戶定義名方式:如用偽指令BITUSRFLGBITF0經(jīng)定義后,可用USRFLG代替F0上頁下頁回目錄1、布爾傳送類⑴直接尋址位送進位標志MOVC,bit;CY(bit)⑵進位標志送直接尋址位MOVbit,C;bit(CY)上頁下頁回目錄2、布爾狀態(tài)控制指令⑴清進位標志CLRC;CY

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論