




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 任何一種處理器都必須經(jīng)過設(shè)計(jì)人員對(duì)其進(jìn)行以指令為基礎(chǔ)的程序設(shè)計(jì)才能夠使得處理器應(yīng)用到系統(tǒng)中,完成相應(yīng)的功能,也就是說指令系統(tǒng)是所有處理器完成任務(wù)所具備的最基本的條件,而不同機(jī)型的指令系統(tǒng)是不同的,本章主要介紹51系列單片機(jī)的尋址方式、指令格式及其功能。 在計(jì)算機(jī)指令系統(tǒng)的發(fā)展歷史中,其指令系統(tǒng)是一套控制計(jì)算機(jī)操作的編碼,稱之為機(jī)器語言,計(jì)算機(jī)只能識(shí)別和執(zhí)行機(jī)器語言的指令。為了便于人們理解記憶和使用,通常用符號(hào)來描述計(jì)算機(jī)的指令系統(tǒng),而符號(hào)指令稱之為匯編語言。各類機(jī)型計(jì)算機(jī)都有自己的匯編語言指令系統(tǒng),并且能夠?qū)R編語言進(jìn)行編譯成為機(jī)器語言指令。 51系列單片機(jī)指令系統(tǒng)包含5種功能類型的指令,7
2、種尋址方式,共有111條指令。按照指令的字長(zhǎng)劃分按照指令執(zhí)行時(shí)間劃分按指令功能劃分由于計(jì)算機(jī)只識(shí)別和執(zhí)行機(jī)器語言的特點(diǎn),所以每條指令都會(huì)對(duì)應(yīng)一個(gè)二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)就是該條指令的機(jī)器碼。 標(biāo)號(hào)標(biāo)號(hào):操作碼:操作碼目的操作數(shù)目的操作數(shù),源操作數(shù)源操作數(shù);注釋;注釋標(biāo)號(hào):表示該指令的符號(hào)地址,表示存放指令或數(shù)據(jù)的程序標(biāo)號(hào):表示該指令的符號(hào)地址,表示存放指令或數(shù)據(jù)的程序存儲(chǔ)器的單元地址,可以由字母存儲(chǔ)器的單元地址,可以由字母1-8個(gè)或數(shù)字串組成,以冒個(gè)或數(shù)字串組成,以冒號(hào)結(jié)尾;號(hào)結(jié)尾;操作碼:規(guī)定了指令所實(shí)現(xiàn)的操作功能,是指令或偽指令;操作碼:規(guī)定了指令所實(shí)現(xiàn)的操作功能,是指令或偽指令;操作數(shù):指
3、出了參加操作的數(shù)據(jù)或數(shù)據(jù)的地址,這一字段可操作數(shù):指出了參加操作的數(shù)據(jù)或數(shù)據(jù)的地址,這一字段可能有也可能沒有,若有兩個(gè)操作數(shù),一般情況操作數(shù)應(yīng)以逗能有也可能沒有,若有兩個(gè)操作數(shù),一般情況操作數(shù)應(yīng)以逗號(hào)分開;號(hào)分開;注釋:方便閱讀程序而加的解釋,可有可無。注釋:方便閱讀程序而加的解釋,可有可無。單字節(jié)指令占用程序存儲(chǔ)器的一個(gè)單元,其既包含操作碼的信息,又包含操作數(shù)的信息。這其中有兩種情況:一種是指令的功能和操作對(duì)象很明確,不需再用另一個(gè)字節(jié)來表示操作數(shù),如INC A,其機(jī)器碼為00000100B,其功能是將累加器A中的內(nèi)容進(jìn)行自加1;一種是用同一個(gè)字節(jié)的幾位分別表示操作碼和操作數(shù),不用再增加字節(jié)
4、來表示,如MOV A,R1,其機(jī)器碼為11101001B,其功能是將工作寄存器R1中的內(nèi)容送入累加器。通過指令的格式可以判斷出該條指令的字長(zhǎng)。通過指令的格式可以判斷出該條指令的字長(zhǎng)。雙字節(jié)指令占用程序存儲(chǔ)器的兩個(gè)單元,一般是用一個(gè)字節(jié)單元存放操作碼,另一個(gè)字節(jié)單元存放操作數(shù)或操作數(shù)的地址,如MOV A,#20H,其機(jī)器碼為01110100 00000010B,其功能是將20H立即數(shù)送入累加器。三字節(jié)指令占用程序存儲(chǔ)器的三個(gè)單元,一般是用一個(gè)字節(jié)單元存放操作碼,另兩個(gè)字節(jié)單元存放操作數(shù)或地址,如MOV 50H,#45H,其機(jī)器碼為01110101 00000101 01000101B,其功能是將
5、立即數(shù)45H送入片內(nèi)數(shù)據(jù)存儲(chǔ)器50H單元。Rn 工作寄存器R0R7,n=07;Direct 8位直接地址,存放數(shù)據(jù)的片內(nèi)數(shù)據(jù)存儲(chǔ)器的地址;Ri 間接地址,只能選中寄存器區(qū)中可做地址寄存器的2個(gè)寄存器R0和R1,i=0,1;#data 立即數(shù),一個(gè)十進(jìn)制最大值為255的8位二進(jìn)制或2位十六進(jìn)制數(shù);#data16 立即數(shù),一個(gè)十進(jìn)制最大值為65535的8位二進(jìn)制或2位十六進(jìn)制數(shù);addr16 16位目標(biāo)地址,片外數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器以及外部芯片的地址,用于LCALL和LJMP指令中;在指令中經(jīng)常會(huì)看到一些在操作數(shù)中使用的符號(hào),這些符號(hào)在指令中經(jīng)常會(huì)看到一些在操作數(shù)中使用的符號(hào),這些符號(hào)定義如下:
6、定義如下:addr11 11位目標(biāo)地址,片內(nèi)數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器的地址,用于ACALL和AJMP指令中;rel 相關(guān)地址,8位帶符號(hào)偏移量,一般是程序存儲(chǔ)器字節(jié)地址,通常在跳轉(zhuǎn)類指令中使用,其對(duì)應(yīng)的十進(jìn)制范圍為-128+127;bit 位地址,針對(duì)片內(nèi)數(shù)據(jù)存儲(chǔ)器中的可位尋址的位使用;DPTR 數(shù)據(jù)指針,可用做16位的地址寄存器;(X) X指寄存器或十六進(jìn)制數(shù),則(X)為指向以X寄存器中的內(nèi)容為目標(biāo)地址的單元或以十六進(jìn)制數(shù)據(jù)為目標(biāo)地址的單元; 數(shù)據(jù)傳送的方向,將左邊的內(nèi)容送入右邊;A 累加器;ACC 直接尋址方式的累加器;B 寄存器B;C 進(jìn)位標(biāo)志位,是布爾處理機(jī)的累加器,也稱為位累加器。注:
7、如果符號(hào)為目的操作數(shù)在一般情況下表示對(duì)某個(gè)注:如果符號(hào)為目的操作數(shù)在一般情況下表示對(duì)某個(gè)具體單元或寄存器中的內(nèi)容進(jìn)行修改或其它操作,如具體單元或寄存器中的內(nèi)容進(jìn)行修改或其它操作,如果符號(hào)為源操作數(shù)一般情況表示對(duì)某個(gè)具體數(shù)或具體果符號(hào)為源操作數(shù)一般情況表示對(duì)某個(gè)具體數(shù)或具體單元(或寄存器)中的內(nèi)容進(jìn)行傳送、判斷等操作,單元(或寄存器)中的內(nèi)容進(jìn)行傳送、判斷等操作,而不進(jìn)行修改,目的操作數(shù)不能為立即數(shù)。而不進(jìn)行修改,目的操作數(shù)不能為立即數(shù)。 偽指令也稱為匯編指令,但是大多數(shù)的偽指令在匯編時(shí)不產(chǎn)生機(jī)器碼,僅僅用來記憶匯編過程進(jìn)行某種控制或?qū)Ψ?hào)和標(biāo)號(hào)進(jìn)行賦值,所以其不屬于指令系統(tǒng)中的指令,常用的偽指
8、令有8條。1、ORG addr16 定位偽指令ORG偽指令出現(xiàn)在程序塊或數(shù)據(jù)塊的開始,用來指明語句后面的目標(biāo)程序或數(shù)據(jù)塊存放的起始地址。在一個(gè)源文件中可多次使用ORG,規(guī)定不同的程序段的起始地址,但順序要從小到大定義,并且不能重疊。例如: ORG 0000H LJMP MAIN ;上電轉(zhuǎn)向主程序 ORG 0023H ;串行口中斷入口地址 LJMP SERVE1 ;轉(zhuǎn)中斷服務(wù)程序 ORG 0100H ;主程序MAIN: MOV A,#20H ;將立即數(shù)20H送入累加器上述指令中,指令LJMP MAIN在程序存器的0000H單元,指令LJMP SERVE1程序存器的0023H單元,指令MOV A,
9、#45H在程序存儲(chǔ)器的0100H單元。格式:標(biāo)號(hào):DB 字節(jié)數(shù)據(jù)項(xiàng)表數(shù)據(jù)項(xiàng)表從標(biāo)號(hào)制定的地址連續(xù)存放,可以是十進(jìn)制數(shù)、十六進(jìn)制數(shù)、由單引號(hào)括起來的字符串,每個(gè)字符串元素為一個(gè)ASCII碼,各項(xiàng)數(shù)據(jù)用逗號(hào)分開。例如: ORG 1000H ; SEG1:DB 53H,“2” ; SEG2:DB DAY ;注:項(xiàng)表中的數(shù)取值范圍為00H-FFH,字符串長(zhǎng)度小于80則(1000H)=53H (1001H)=32H(1002H)=44H (1003H)=41H(1004H)=59H格式:標(biāo)號(hào):DW 雙字節(jié)數(shù)據(jù)項(xiàng)表,類似于DB,只是DB用于定義數(shù)據(jù)表,DW用于定義16位字。項(xiàng)或項(xiàng)表指所定義的一個(gè)字(兩個(gè)字
10、節(jié))或用逗號(hào)分開的字節(jié)串。每個(gè)字的低8位字節(jié)先放置,高8位字節(jié)后放置,低字節(jié)放置在低地址,高字節(jié)放置在高地址。例如 ORG 1000HTAB:DW 53H,“2” 結(jié)果為:(1000H)=53H ,(1001H)=00H ,(1002H)=32H ,(1003H)=00H格式:標(biāo)號(hào):DS 表達(dá)式用于保留待放存放的一定數(shù)量的存儲(chǔ)單元,定義應(yīng)保留的存儲(chǔ)單元數(shù)。該指令的功能是有標(biāo)號(hào)指定單元開始,定義一個(gè)存儲(chǔ)區(qū)以備源程序使用,存儲(chǔ)區(qū)內(nèi)預(yù)留的存儲(chǔ)單元個(gè)數(shù)由表達(dá)式的值決定。例: ORG 3000H SEG:DS 08H ; DB 30H ; (3008H)=30H注意:對(duì)MCS-51單片機(jī)來說,DB、DW
11、、DS偽指令只能對(duì)程序存儲(chǔ)器使用,不能對(duì)數(shù)據(jù)存儲(chǔ)器使用。表示從3000H單元開始,連續(xù)預(yù)留8個(gè)存儲(chǔ)單元格式:名字 EQU 表達(dá)式 或者 名字 = 表達(dá)式用于給一個(gè)表達(dá)式的值或一個(gè)字符串起個(gè)名字。程序中,該名字可以用作程序地址、數(shù)據(jù)地址或立即數(shù)使用,但必須是以字母開頭的字母數(shù)字串,且名字必須唯一;表達(dá)式可以是8位或16位數(shù)據(jù)。例如:START EQU 100H PORT = 2301H ORG START MOV DPTR,#PORT在程序中PORT就是2301H。格式: 名字 DATA 直接字節(jié)地址該偽指令是給一個(gè)8位內(nèi)部RAM單元起一個(gè)名字,相當(dāng)于定義一個(gè)變量,一個(gè)單元可以有很多名字。如:
12、ERR DATA 32H MOV ERR,#23H在程序中ERR就是32H。格式:字符名 BIT 位地址用于定義某特定位的標(biāo)號(hào)。項(xiàng)指的是所定義的位。經(jīng)定義后,便可用指令中最左面的標(biāo)號(hào)來代替BIT項(xiàng)所指出的位。例如:MN BIT P1.7經(jīng)BIT 偽指令定以后,可以在指令中用MN來代替位地址P1.7。 該偽指令指出源程序到此結(jié)束,其后的程序語句不予處理。尋址方式是對(duì)操作數(shù)而言的,就是指的尋找操作數(shù)的地址,如何找到這個(gè)地址就是尋址方式。在MCS-51系列單片機(jī)中共有7種尋址方式:寄存器尋址、直接尋址、寄存器間接尋址、立即尋址、變址尋址、相對(duì)尋址、位尋址。寄存器尋址方式就是操作數(shù)存儲(chǔ)在寄存器中,即指
13、令的操作數(shù)為某個(gè)寄存器??蓪ぶ返募拇嫫鳛椋篟0R7、累加器A、暫存寄存器B、數(shù)據(jù)指針DPTR等。值得注意的是,在尋址工作寄存器時(shí),指令本身只能說明工作寄存器組內(nèi)的某一個(gè)寄存器,由PSW的D4和D3兩位來指明其所在的工作寄存器組號(hào)。例如,指令中標(biāo)有操作數(shù)R3,且此時(shí)PSW.4,PSW.3兩位的內(nèi)容分別為“0”和“1”,則說明尋址1組工作寄存器的R3寄存器,即片內(nèi)數(shù)據(jù)存儲(chǔ)器的0BH單元。 例如:MOV A,R0表示把工作寄存器R0的內(nèi)容傳給累加器A。若執(zhí)行指令前,A=35H,R0=6FH,則執(zhí)行該指令后,A=6F,R0的內(nèi)容不變。 直接尋址就是直接在指令中指定操作數(shù)的地址,即操作數(shù)為內(nèi)部RAM單元
14、的地址??梢宰鳛橹苯訉ぶ返钠瑑?nèi)RAM空間是低128字節(jié)和SFR,直接尋址方式的尋址范圍僅限于內(nèi)部數(shù)據(jù)存儲(chǔ)器。這里需要注意三個(gè)問題,一是:如果操作數(shù)是A,則是寄存器尋址,如果是ACC,則是直接尋址,雖然二者都是指一個(gè)存儲(chǔ)空間;二是:對(duì)于特殊功能寄存器SFR和位地址空間,這是唯一的尋址方式,三是:對(duì)于片外的數(shù)據(jù)存儲(chǔ)器地址空間不能使用直接尋址。例如:MOV A,3AH 代表的意思就是將地址為3AH的存儲(chǔ)單元中數(shù)據(jù)取出來傳送給累加器。 寄存器間接尋址就是通過寄存器指定數(shù)據(jù)存儲(chǔ)單元的地址,然后對(duì)該字節(jié)單元地址中的數(shù)據(jù)進(jìn)行操作。即寄存器中存儲(chǔ)的是地址,操作數(shù)為某個(gè)工作寄存器Ri(i=0,1)或者DPTR。
15、以R0或R1為地址寄存器時(shí),可以尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器地址空間00H-FFH范圍內(nèi)的256個(gè)字節(jié)單元,以及片外數(shù)據(jù)存儲(chǔ)器地址空間的256個(gè)字節(jié)單元;以16位寄存器DPTR作為間接尋址寄存器時(shí),可尋址片外存儲(chǔ)器的64K地址空間。采用用寄存器間接尋址方式時(shí)應(yīng)在寄存器前加上(at表示“在”)符號(hào)。(注:加表示地址)例如:MOVX A,DPTR表示把以DPTR的內(nèi)容為地址的外部數(shù)據(jù)存儲(chǔ)器單元的內(nèi)容傳給累加器A。若執(zhí)行指令前A=20H,DPTR=2000H,外部數(shù)據(jù)存儲(chǔ)器2000H地址單元的內(nèi)容為79H,則執(zhí)行指令后A=79H。對(duì)52系列單片機(jī),內(nèi)部數(shù)據(jù)存儲(chǔ)器的80H0FFH地址單元與特殊功能寄存器的地址重
16、疊,訪問這些單元時(shí)只能使用寄存器間接尋址方式。立即尋址就是直接給出操作數(shù)。取指令時(shí),即可由程序存儲(chǔ)器中直接取得操作數(shù)據(jù)。51單片機(jī)中除了一條指令(MOV DPTR,#data16)是16位長(zhǎng)的立即數(shù)外,其余都是8位的立即數(shù)。例如:MOV A,30H;無論執(zhí)行之前A中的內(nèi)容是多少,則執(zhí)行后A=30H。值得注意的一點(diǎn)是:在立即數(shù)尋址中立即數(shù)前面必須要加上一個(gè)“#”號(hào),“#”表示其后面內(nèi)容為立即數(shù)而不是一個(gè)字節(jié)單元地址。變址尋址是以某個(gè)寄存器的內(nèi)容為基礎(chǔ),然后在這個(gè)基礎(chǔ)上再加上地址偏移量,形成真正的操作數(shù)地址。需要特別指出的是用來作為基礎(chǔ)的寄存器可以是PC或是DPTR,地址偏移量存儲(chǔ)在累加器A中,二
17、者內(nèi)容之和即為操作數(shù)據(jù)的真實(shí)地址或程序轉(zhuǎn)移的目的地址。該尋址方式的特征是操作數(shù)為A+DPTR或者A+PC,對(duì)于數(shù)據(jù)傳送時(shí)其處理數(shù)據(jù)都是從程序存儲(chǔ)器中取出來的,常用來做查表。 MOV A,#01H ;A01HMOV DPTR,#1010H ;DPTR1010HMOVC A,A+DPTR ;A(A H)1010H:DB 02H,05H,06H 程序執(zhí)行時(shí)將立即數(shù)01H送入累加器A,然后將表格的首地址送入數(shù)據(jù)指針DPTR,再將DPTR內(nèi)存儲(chǔ)的地址和A里面的偏移量相加最后根據(jù)得到的地址來查找相應(yīng)的存儲(chǔ)單元,并且將其內(nèi)容送入累加器A,結(jié)果A=05H。例如: 相對(duì)尋址主要是針對(duì)跳轉(zhuǎn)指令而言的。以程序寄存器
18、PC作為基址寄存器,指令中給出相對(duì)偏移量(rel),而實(shí)際目標(biāo)地址為PC的當(dāng)前內(nèi)容與偏移量之和。也就是說跳轉(zhuǎn)去的目標(biāo)指令的地址是正在執(zhí)行的指令地址加上偏移量。相對(duì)偏移量是一個(gè)帶符號(hào)的8位2進(jìn)制數(shù)(以補(bǔ)碼形式表示)。其轉(zhuǎn)移范圍為:以PC當(dāng)前值為基點(diǎn),相對(duì)轉(zhuǎn)移在+127128個(gè)字節(jié)單元之間。相對(duì)尋址方式只適合對(duì)程序存儲(chǔ)器的訪問。 例如:在地址1068H處有一條相對(duì)轉(zhuǎn)移指令:1068H SJMP 30H ; PC PC2rel指令為雙字節(jié)指令。PC的當(dāng)前值1068H2106AH,把它與偏移量30H相加,就形成了程序轉(zhuǎn)移的目標(biāo)地址109AH(向后跳轉(zhuǎn))。51單片機(jī)有獨(dú)立的位處理器,對(duì)尋址的位進(jìn)行處理。
19、位尋址方式類似直接尋址方式,是對(duì)片內(nèi)RAM的位尋址區(qū)和某些特殊功能寄存器中可位尋址的單元而進(jìn)行的位操作。與直接尋址方式的區(qū)別在于直接尋址訪問的操作數(shù)是8位字長(zhǎng),而位尋址方式訪問的操作數(shù)是1位字長(zhǎng)。例如: CLR 92H SETB P1.2 第一條指令時(shí)將位地址92H清零,該地址在片內(nèi)低128空間中的可位尋址區(qū)域;第二條指令是將P1.2位或P1.2引腳置1。數(shù)據(jù)傳送操作是一種最基本最重要的操作之一。數(shù)據(jù)傳送是否靈活、快速,對(duì)程序的編寫和執(zhí)行速度產(chǎn)生很大影響。MCS-51的數(shù)據(jù)傳送操作可以在累加器A、工作寄存器R0R7、內(nèi)部數(shù)據(jù)存儲(chǔ)器、外部數(shù)據(jù)存儲(chǔ)器之間進(jìn)行。數(shù)據(jù)傳送類指令相當(dāng)于C語言中的賦值語句
20、,主要用于數(shù)據(jù)的傳送、保存以及交換。3.3.1數(shù)據(jù)傳送類指令(數(shù)據(jù)傳送類指令(28條)條)格式:MOV 目的操作數(shù),源操作數(shù)其中目的操作數(shù)不能采用立即尋址的方式。 (1)立即數(shù)傳送指令(4條) 立即數(shù)送累加器A和內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū): MOV A,#data ;A#data,將data數(shù)送入累加器A,立即尋址方式 MOV direct,#data ;(direct)#data,將data數(shù)送入direct單元 MOV Rn,#data ;Rn#data,將data數(shù)送入Rn寄存器,n=07 MOV Ri,#data ;(Ri)#data, data數(shù)送入以Ri(i=0,1)中的內(nèi)容為字節(jié)地址的單元中
21、,即Ri表示一個(gè)字節(jié)地址(2)內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(Rn、片內(nèi)RAM、SFR)與(累加器)A之間數(shù)據(jù)傳送(6條)MOV A,direct ;A(direct),將direct單元中的數(shù)送入累加器A,直接尋址方式MOV direct,A ;(direct)A,將累加器A中的數(shù)送direct單元,寄存器尋址方式MOV Rn,A ;RnA,將累加器A中的數(shù)送入Rn寄存器,直接尋址方式MOV A,Rn ;ARn,將Rn寄存器中的數(shù)送累加器A,n=07,寄存器尋址方式MOV A ,Ri ;A(Ri)將以Ri(i=0,1)中的內(nèi)容為字節(jié)地址的單元中的數(shù)據(jù)存入累加器A中,寄存器間接尋址方式MOV Ri ,A ;(
22、Ri)A將累加器A中數(shù)送入以Ri(i=0,1)中的內(nèi)容為字節(jié)地址的單元中(3)內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)之間數(shù)據(jù)傳送(5條)MOV direct2,direct1;(direct2)(direct1),將direct1單元中數(shù)送入direct2單元,直接尋址方式MOV direct,Rn ;(direct)Rn,將Rn寄存器中的數(shù)送入direct單元,n=07,寄存器尋址方式MOV Rn,direct ;Rn(direct),將direct單元中的數(shù)送入Rn寄存器,n=07,直接尋址方式MOV direct,Ri ;(direct)(Ri),將以Ri(i=0,1)中的內(nèi)容為字節(jié)地址的單元中的數(shù)送入dire
23、ct單元中,寄存器間接尋址方式MOV Ri,direct ;(Ri)(direct),將direct單元中的數(shù)送入以Ri(i=0,1)中的內(nèi)容為字節(jié)地址的單元中,直接尋址方式例:設(shè)(30H)40H,(40H)10H, P10CAH,試判斷下列程序執(zhí)行后的結(jié)果。MOV R0, #30H ;R0#30HMOV A, R0 ;R0指向30H單元,即A(30H),A40HMOV R1, A ;R1A,R140HMOV B, R1 ;B(40H),B10HMOV R1, P1 ;(R1)P1,(40H)0CAHMOV P2, P1 ;P2P1,P20CAH結(jié)果是:A40H,B10H,(40H)0CAH,
24、P20CAHMOV DPTR ,data16;DPTR#data16,將16位data數(shù)送入DPTR數(shù)據(jù)指針,立即數(shù)尋址方式例:MOV DPTR, #2200H ;DPTR #2200H指令的執(zhí)行結(jié)果是:DPTR2200H,其中,DPH22H,DPL00H。(1)字節(jié)交換指令(3條)XCH A,direct ;A(direct),將累加器A中的內(nèi)容和direct單元中的內(nèi)容交換,直接尋址方式XCH A,Rn ;ARn,將累加器A中的內(nèi)容和Rn寄存器中的內(nèi)容交換, n=07,寄存器尋址方式XCH A,Ri ;A(Ri),將累加器中的內(nèi)容和以Ri(i=0,1)中的內(nèi)容為字節(jié)地 址的單元中內(nèi)容交換,
25、寄存器間接尋址方式它表示將A內(nèi)的數(shù)據(jù)和Rn中的數(shù)據(jù)交換,其中指令中目的操作數(shù)只能使用累加器A,源操作數(shù)可以是直接尋址、寄存器尋址、寄存器間接尋址例:設(shè)(A)80H,(R7)=08H。執(zhí)行指令: XCH A,R7 ;AR7 結(jié)果:(A)=08H,(R7)=80H(2)半字節(jié)交換(低4位交換)(1條)XCHD A,Ri ;A30(Ri)30,將累加器A中的內(nèi)容的低四位和以Ri(i=0,1) 中的內(nèi)容為字節(jié)地址的單元中內(nèi)容的低四位交換,各自的高4位不變,寄存器間接尋址方式。例:設(shè)A=15H,R0=30H,(30H)34H。執(zhí)行指令 XCHD A,R0 ;A30(R0)30結(jié)果:A=14H,(30H)
26、=35HMCS-51內(nèi)部RAM中可以設(shè)定一個(gè)后進(jìn)先出(LIFO)的堆棧,在特殊功能寄存器中有一個(gè)堆棧指針SP,指出棧頂?shù)奈恢?,在指令系統(tǒng)中有兩條用于數(shù)據(jù)傳送的棧操作指令。(1)進(jìn)棧指令PUSH direct ;SP1SP,(direct)(SP);先將堆棧指針加1,然后將direct單元中的內(nèi)容送入堆棧指針?biāo)赶虻膯卧苯訉ぶ愤@條指令的功能是首先將棧指針SP+1SP,然后,把直接地址direct單元的內(nèi)容送到當(dāng)前棧指針SP所指的內(nèi)部RAM單元中,其操作數(shù)必需為直接方式,如果將累加器A的內(nèi)容壓入堆棧則必需寫成ACC,不能夠以寄存器尋址方式執(zhí)行。例:設(shè)SP60H,ACC30H,B=70H。執(zhí)行下
27、列指令: PUSH ACC ;SP1,61HSP,ACC(61H) PUSH B ;SP1,62HSP,B(62H) 結(jié)果:(61H)30H,(62H)70H,SP62H(2)退棧指令 POP direct ;(SP)(direct),SP-1SP;先將堆棧指針?biāo)赶虻膯卧械膬?nèi)容送入direct單元,再將堆棧指針減1,直接尋址 這條指令的功能是將棧指針SP所指的內(nèi)部RAM單元中的內(nèi)容送入指令中的直接地址單元,然后,棧指針寄存器SP-1SP,SP指針繼續(xù)指向當(dāng)前棧頂。例:設(shè)SP62H,(62H)=70H,(61H)=30H。執(zhí)行下述指令:POP DPH ;(62H)DPH,SP-1SPPOP
28、DPL ;(61H)DPL,SP-1SP結(jié)果是:DRTR=7030H,SP=60H外部RAM中數(shù)據(jù)與累加器A之間傳送是通過間接尋址的方式來實(shí)現(xiàn)的。MOVX A ,DPTR ;A(DPTR),將片外指向(DPTR)單元中的數(shù)據(jù)送入累加器A,寄存器間接尋址方式MOVX A,Ri ;A(Ri),將片外指向(Ri)(i=0,1)單元中的數(shù)據(jù)送入累加器A,寄存器間接尋址方式MOVX DPTR,A ;(DPTR)A,將累加器A中的數(shù)據(jù)送入片外指向(DPTR)單元,寄存器間接尋址方式MOVX Ri,A ;(Ri)A,將累加器A中的數(shù)據(jù)送入片外指向(Ri)(i=0,1)單元,寄存器間接尋址方式其中需要注意的幾
29、點(diǎn)是:(1)地址寄存器只能使用DPTR和Ri。(2)與外部RAM傳送數(shù)據(jù)只能通過累加器A來實(shí)現(xiàn)。(3)與外部RAM傳送數(shù)據(jù)時(shí)使用MOVX指令。程序存儲(chǔ)器數(shù)據(jù)傳送指令必須使用MOVC,并且只能通過累加器A來實(shí)現(xiàn)。主要是對(duì)存放于程序存儲(chǔ)器中的數(shù)據(jù)表格進(jìn)行查找傳送。MOVC A,A+PC ;PCPC1 ,A(APC),先將PC+1得到當(dāng)前PC值,然后將累加器A中的內(nèi)容和當(dāng)前PC值相加,將此結(jié)果看作一個(gè)單元,并將該單元中的內(nèi)容送入累加器A中,變址尋址MOVC A,A+DPTR ;A(ADPTR),將累加器中的內(nèi)容和指向DPTR單元中的內(nèi)容相加,將此結(jié)果看作一個(gè)單元,并將該單元中的內(nèi)容送入累加器中,變址
30、尋址 由于程序存儲(chǔ)器只能讀不能寫,因此程序存儲(chǔ)器的數(shù)據(jù)傳送都是單向的。例:用數(shù)據(jù)傳送指令實(shí)現(xiàn)下列要求的數(shù)據(jù)傳送。將片內(nèi)RAM 60H單元內(nèi)容送外部RAM 1030H單元;方法1: MOV P2, #10H;片外高字節(jié)地址10H MOV R0, #30H;片外低字節(jié)地址30H MOV A, 60H MOVX R0, A 方法2: MOV DPTR, #1030H ;片外字節(jié)地址1030H MOV A, 60H MOVX DPTR, A將ROM 1000H單元內(nèi)容送內(nèi)部RAM 70H單元。 MOV A, #00H MOV DPTR, #1000H MOVC A, A+DPTR MOV 70H, A
31、2、移位指令(5條) MCS- 51的移位指令只能對(duì)累加器A進(jìn)行移位,即其操作數(shù)只能是累加器A,均是寄存器尋址方式。RL A;循環(huán)左移 這條指令的功能是累加器ACC的內(nèi)容向左環(huán)移1位,D7位循環(huán)移入位D0位。不影響標(biāo)志。RR A;循環(huán)右移 功能是將累加器A的內(nèi)容依次向右循環(huán)移動(dòng)1位。對(duì)累加器A進(jìn)行的循環(huán)右移,可實(shí)現(xiàn)對(duì)A中無符號(hào)數(shù)的除2運(yùn)算。RLC A;帶進(jìn)位循環(huán)左移 這條指令的功能是將累加器ACC內(nèi)容和進(jìn)位標(biāo)志一起向左環(huán)移1位,ACC.7移入進(jìn)位位CY,CY移入ACC.0,不影響其他標(biāo)志。RRC A;帶進(jìn)位循環(huán)右移 這條指令的功能是累加器ACC的內(nèi)容和進(jìn)位標(biāo)志CY一起向右環(huán)移1位,ACC.0進(jìn)
32、入CY,CY移入ACC.7。SWAP A ;A30A47,將A中的高低四位互換,寄存器尋址方式例:執(zhí)行前CY=1,執(zhí)行下列指令后,A中的內(nèi)容和CY的值如何變化。MOV A, #12H ;A12H,CY=0RL A ;A24H,CY=0RLC A ;A49H,CY由1變?yōu)?RR A ;AA4H,CY=0RRC A ;A52H,CY=0SWAP A ;A=25H2、邏輯與、或、異或(18條) 匯編語言的邏輯運(yùn)算都是按位進(jìn)行的。邏輯與運(yùn)算邏輯與運(yùn)算用符號(hào)“”表示(6條)。 ANL A ,Rn ;AARn ANL A,#data ;AAdata ANL A,direct ;AA(direct) ANL
33、 A,Ri ;AA(Ri) ANL direct,A ;(direct)(direct)A ANL direct,#data ;(direct)(direct) data其中前4條指令運(yùn)算結(jié)果存放在累加器 A中,后2條指令的運(yùn)算結(jié)果則存放在直接尋址的地址單元中。在程序設(shè)計(jì)中,邏輯與指令主要用于對(duì)目的操作數(shù)中的某些位進(jìn)行屏蔽(清0)。方法是將需屏蔽的為與“0”相與,其余位與“1”相與即可。例:分析下列兩條指令的執(zhí)行結(jié)果。(1)ANL 30H, #0FH 指令執(zhí)行后,將30H單元的高4位屏蔽(即清0),只保留了低4位??捎糜趯?9的ASCII碼轉(zhuǎn)換為BCD碼。設(shè)(30H)35H,執(zhí)行指令后變?yōu)椋?
34、0H)05H。(2)ANL A, #80H 指令執(zhí)行后,只保留了最高位,而其余各位均被屏蔽掉??捎糜趯?duì)累加器A中的帶符號(hào)數(shù)的正負(fù)判斷。若A中為負(fù)數(shù),則執(zhí)行該指令后A00H;若A中為正數(shù),則結(jié)果為A00H。邏輯或運(yùn)算邏輯或運(yùn)算指令用符號(hào)“”表示(6條): ORL A ,Rn ;AARn ORL A,#data ;AAdata ORL A,direct ;AA(direct) ORL A,Ri ;AA(Ri) ORL direct,A ;(direct)direct(A) ORL direct,#data ;(direct)direct data 其中前 4條指令的操作結(jié)果存放在A中,后2條指令的
35、操作結(jié)果存放在直接尋址的地址單元中。邏輯或指令可對(duì)目的操作數(shù)的某些位進(jìn)行置位。方法是將需置位的位與“1”相或,其余位與“0”相或即可,常用于組合數(shù)據(jù)。例:設(shè)(A)07H,(R0)=07DH。執(zhí)行指令: ORL A,R0 00000111 )01111101 01111111結(jié)果:(A)=7FH邏輯異或運(yùn)算邏輯或運(yùn)算指令用符號(hào)“”表示(6條):XRL A ,Rn ;AARn XRL A,#data ;AAdataXRL A,direct ;AA(direct) XRL A,Ri ;AA(Ri)XRL direct,A ;(direct)(direct)A XRL direct,#data ;(d
36、irect)(direct)data 前4條指令操作結(jié)果存放在累加器A中,后2條指令的操作結(jié)果存放在直接尋址的地址單元中。邏輯異或指令可用于對(duì)目的操作數(shù)的某些位取反,而其余位不變。方法是將要取反的這些位和“1”異或,其余位則和“0”異或即可。例:分析下列程序的執(zhí)行結(jié)果。MOV A, #77H;A77HXRL A, #0FFH ;A77HFFH88HANL A, #0FH;A88H 0FH08HMOV P1, #64H;P164HANL P1, #0F0H;P164H F0H60HORL A, P1 ; A08H 60H68H注:由于邏輯操作與、或、異或指令是按位操作的,應(yīng)用這三種邏輯指令可對(duì)常
37、用來對(duì)字節(jié)中的某些位進(jìn)行清零、置1、取反等。 ANL:對(duì)于要保留的位用1與,清零的位用“0”與 ORL:對(duì)于要保留的位用0或,置1的位用“1”或 XRL:對(duì)于要保留的位用“0”異或,取反的位用“1”異或 在算術(shù)運(yùn)算指令中,四則運(yùn)算指令影響狀態(tài)標(biāo)志寄存器PSW,加1減1指令不影響PSW。在算術(shù)運(yùn)算和邏輯運(yùn)算指令中,累加器A是一個(gè)特別重要的8位寄存器,CPU對(duì)它具有其他寄存器所沒有的操作指令,下面將介紹的加、減、乘、除指令都必須是以A作為目的操作數(shù)的。ADD A,#data ;AAdata,累加器A中內(nèi)容和立即數(shù)data相加,并把結(jié)果送入累加器A中,結(jié)果會(huì)影響PSWADD A,direct ;AA
38、(direct),累加器A中內(nèi)容和direct地址中的內(nèi)容相加, 并把結(jié)果送入累加A中,結(jié)果會(huì)影響PSWADD A,Ri ;AA(Ri),累加器A中內(nèi)容和(Ri)(i=0,1)中的內(nèi)容相加,并把結(jié)果送入累加A中,結(jié)果會(huì)影響PSWADD A,Rn ;AARn,累加器A中內(nèi)容和寄存器Rn(n=07)中內(nèi)容相加,并把結(jié)果送入累加器A中,結(jié)果會(huì)影響PSWADDC A,#data ;AAdata+CY,累加器A中內(nèi)容和立即數(shù)data以及進(jìn)位標(biāo)志位CY相加,并把結(jié)果送入累加器A中,結(jié)果會(huì)影響PSWADDC A,direct ;AA(direct)+CY,累加器A中內(nèi)容和direct地址中的內(nèi)容以及進(jìn)位標(biāo)志
39、位CY相加,并把結(jié)果送入累加A中,結(jié)果會(huì)影響PSWADDC A,Ri ;AA(Ri)+CY,累加器A中內(nèi)容和(Ri)(i=0,1)中的內(nèi)容以及進(jìn)位標(biāo)志位CY相加,并把結(jié)果送入累加A中,結(jié)果會(huì)影響PSWADDC A,Rn ;AARn+CY,累加器A中內(nèi)容和寄存器Rn(n=07)中內(nèi)容以及進(jìn)位標(biāo)志位CY相加,并把結(jié)果送入累加器A中,結(jié)果會(huì)影響PSWSUBB A,#data ;AA-data-CY,累加器A中內(nèi)容減去立即數(shù)data以及進(jìn)位標(biāo)志位CY,并把結(jié)果送入累加器A中,結(jié)果會(huì)影響PSWSUBB A,direct ;AA-(direct)-CY,累加器A中內(nèi)容減去direct地址中的內(nèi)容以及進(jìn)位標(biāo)
40、志位CY相加,并把結(jié)果送入累加A中,結(jié)果會(huì)影響PSWSUBB A,Ri ;AA-(Ri)-CY,累加器A中內(nèi)容減去(Ri)(i=0,1)中的內(nèi)容以及進(jìn)位標(biāo)志位CY,并把結(jié)果送入累加A中,結(jié)果會(huì)影響PSWSUBB A,Rn ;AA-Rn-CY,累加器A中內(nèi)容減去寄存器Rn(n=07)中內(nèi)容以及進(jìn)位標(biāo)志位CY,并把結(jié)果送入累加器A中,結(jié)果會(huì)影響PSW格式:MUL AB ;BAAB,累加器A中內(nèi)容和暫存寄存器B中的內(nèi)容相乘,結(jié)果的低8位送入累加器A,高8位送入暫存寄存器B,直接尋址方式若乘積大于255(FFH)OV置1,否則清0,進(jìn)位標(biāo)志CY總是清0。例: 設(shè)A=50H,B=0A0H。執(zhí)行指令: M
41、UL AB 結(jié)果:B=32H,A=00H,即積為3200H。格式:DIV AB ;A商,B余AB,將累加器A中的內(nèi)容除以暫存寄存器B中的內(nèi)容,運(yùn)算結(jié)果的商送入累加器A,余數(shù)送入暫存寄存器B,直接尋址方式 如果原來B中的內(nèi)容為0即除數(shù)為零,則結(jié)果A和B中內(nèi)容不定,并將溢出標(biāo)志OV置1。在任何情況下,CY都清0。 例:設(shè)A=0FBH,B=12H。執(zhí)行指令: DIV AB結(jié)果:A=0DH,B=11H,CY=0,OV=0自加1INC A ;AA1,將累加器A中的內(nèi)容加1并送入累加器A,寄存器尋址方式INC direct ;(direct)(direct)1,將direct單元中的內(nèi)容加1并送回到dir
42、ect單元,直接尋址方式INC Ri ;(Ri)(Ri)1,將Ri(i=0,1)指向的單元中的內(nèi)容加1并送 回Ri指向的單元,寄存器間接尋址方式INC Rn ;RnRn1,將寄存器Rn中的內(nèi)容加1并送回寄存器Rn中,寄存器尋址方式INC DPTR ;DPTRDPTR1,將數(shù)據(jù)指針寄存器中內(nèi)容加1并送回?cái)?shù)據(jù)指針寄存器中,寄存器尋址方式自減1DEC A ;AA-1,將累加器A中的內(nèi)容減1并送入累加器A,寄存器尋址方式DEC direct ;(direct)(direct)-1,將direct單元中的內(nèi)容減1并送回到direct單元,直接尋址方式DEC Ri ;(Ri)(Ri)-1,將Ri(i=0,
43、1)指向的單元中的內(nèi)容減1并送回Ri指向的單元,寄存器間接尋址方式DEC Rn ;RnRn-1,將寄存器Rn中的內(nèi)容減1并送回寄存器Rn中,寄存器尋址方式DA A 這條指令用于對(duì)累加器A中兩個(gè)壓縮型的BCD數(shù)相加所獲得的8位結(jié)果進(jìn)行調(diào)整,使結(jié)果和也調(diào)整為兩位BCD碼的數(shù)。 由于ADD、ADDC指令本身只能實(shí)現(xiàn)二進(jìn)制加法,用DA指令緊跟在加法指令后,就可實(shí)現(xiàn)十進(jìn)制數(shù)相加或相減。即只對(duì)加法結(jié)果調(diào)整,必須跟在ADD、ADDC指令之后才能使用。位操作就是所謂的位處理,就是以位(bit)為單位進(jìn)行的運(yùn)算和操作。位變量也稱為布爾變量或開關(guān)變量,位操作指令是布爾處理器的軟件資源。1、位傳送指令(2條)位傳送
44、操作就是可尋址位與累加位CY之間的相互傳送(2條):MOV bit,C ;Cbit,將進(jìn)位標(biāo)志位送入某一個(gè)位地址中,位尋址方式MOV C,bit ;bitC,將某一個(gè)位地址中的內(nèi)容送入進(jìn)位標(biāo)志位中,位尋址方式主要用于兩個(gè)可位尋址之間的數(shù)據(jù)傳送。由于沒有2個(gè)可尋址位之間的傳送指令,因此它們之間無法實(shí)現(xiàn)直接傳送。使用這2條指令以CY作中介來實(shí)現(xiàn)。這些指令對(duì)CY及可尋址位進(jìn)行置位(置“1”)或復(fù)位(清“0”)操作:SETB C ;1CYSET bit ;1bitCLR C ;0CYCLR bit ;0 bit 該類指令是以位的狀態(tài)作為判斷條件實(shí)現(xiàn)程序轉(zhuǎn)移,相當(dāng)于C語言的if判斷,對(duì)這些指令說明如下:
45、以CY狀態(tài)為條件的轉(zhuǎn)移指令 JC rel ;若CY=1,則PC PC+ 2 + rel,即跳轉(zhuǎn) ;若CY1,則PC PC+ 2,即順序執(zhí)行程序 JNC rel ;若CY=0,則PC PC+ 2 + rel,即跳轉(zhuǎn) ;若CY0,則PC PC+ 2,即順序執(zhí)行程序例:設(shè)計(jì)子程序功能為比較片內(nèi)RAM的50H和51H單元中兩個(gè)8位無符號(hào)數(shù)的大小,把大數(shù)存入60H單元。若兩數(shù)相等,則把標(biāo)志位70H置1。子程序?yàn)椋?BIJIAO:MOV A, 50H CJNE A, 51H, LOOP SETB 70H RET LOOP: JC LOOP1 MOV 60H, A RET LOOP1:MOV 60H, 51
46、H RET以位狀態(tài)為條件的轉(zhuǎn)移指令JB bit,rel ;bit為控制轉(zhuǎn)移位 ;若bit=1,則PC PC+ 3 + rel,即跳轉(zhuǎn) ;若bit1,則PC PC+ 3,即順序執(zhí)行程序JNB bit,rel ;bit為控制轉(zhuǎn)移位 ;若bit=0,則PC PC+ 3+ rel ,即跳轉(zhuǎn) ;若bit0,則PC PC+ 3,即順序執(zhí)行程序JBC bit,rel ;bit為控制轉(zhuǎn)移位,并使該位清“0” ;若bit=1,則PC PC+ 3 + rel,0bit,即跳轉(zhuǎn),且將bit置“0” ;若bit1,則PC PC+ 3,即順序執(zhí)行程序這3條指令都是三字節(jié)指令,因此,如果狀態(tài)滿足,則程序轉(zhuǎn)移: PCPC+
47、3+rel;否則程序順序執(zhí)行:PCPC+3。例:在片內(nèi)RAM30H單元中存有一個(gè)帶符號(hào)數(shù),試判斷該數(shù)的正負(fù)性,若為正數(shù),將6EH位清0;若為負(fù)數(shù),將6EH位置1。設(shè)計(jì)子程序。PANDUAN:MOV A, 30H ;30H單元中的數(shù)送A JB ACC.7, LOOP ;符號(hào)位等于1,是負(fù)數(shù),轉(zhuǎn)移 CLR 6EH ;符號(hào)位等于0,是正數(shù),清標(biāo)志位 RET ;返回 LOOP: SETB 6EH ;標(biāo)志位置1 RET ;返回 匯編語言共有兩類轉(zhuǎn)移:無條件轉(zhuǎn)移和有條件轉(zhuǎn)移。另外,本小節(jié)還要介紹子程序調(diào)用及返回指令。1、無條件轉(zhuǎn)移指令不規(guī)定條件的程序轉(zhuǎn)移稱之為無條件轉(zhuǎn)移(4條)(1)長(zhǎng)轉(zhuǎn)移指令 LJMP
48、addr16 ;PC addr16,跳轉(zhuǎn)到一個(gè)16位的程序存儲(chǔ)器單元指令執(zhí)行后把16位地址(addrl6)送PC,從而實(shí)現(xiàn)程序轉(zhuǎn)移。轉(zhuǎn)移范圍達(dá)64KB。長(zhǎng)轉(zhuǎn)移指令是三字節(jié)指令,依次是操作碼、高8位地址、低8位地址。例:LJMP 1000H ;程序轉(zhuǎn)向1000H地址處執(zhí)行LJMP ABD ;程序轉(zhuǎn)向ABD地址處執(zhí)行(2)絕對(duì)轉(zhuǎn)移指令(短轉(zhuǎn)移指令)AJMP addr11 ;PCPC+2,然后PC100 addr11;把11位目標(biāo)地址裝入PC的低11位,形成新的PC值,即目的地址,轉(zhuǎn)去執(zhí)行程序 這是2K字節(jié)范圍內(nèi)的無條件轉(zhuǎn)跳指令,程序轉(zhuǎn)移到指定的地址。該指令在運(yùn)行時(shí)先將PC+2,然后通過把PC的高5
49、位和指令第一字節(jié)高三位以及指令第二字節(jié)相連而得到程序轉(zhuǎn)跳的目的地址并送入PC,因此目標(biāo)地址必須與它下面的指令存放地址在同一個(gè)2K區(qū)域內(nèi)。(3)短轉(zhuǎn)移指令(相對(duì)轉(zhuǎn)移指令)SJMP rel ;PCPC+2,然后PCPC+relSJMP相對(duì)尋址方式轉(zhuǎn)移指令,其中rel為相對(duì)偏移量,轉(zhuǎn)移的范圍是-127128,如rel為正數(shù)則向前轉(zhuǎn)移,rel為負(fù)數(shù)則向后轉(zhuǎn)移。此外,在匯編語言程序中,為等待中斷或程序結(jié)束。常有使程序“原地踏步”的需要,對(duì)此可使用SJMP指令完成: HERE:SJMP HERE或HERE:SJMP $($代表PC的當(dāng)前值)。例:KRD: SJMP PKRD如果KRD標(biāo)號(hào)值為0100H,即
50、SJMP這條指令的機(jī)器碼存放于0100H和0101H這兩個(gè)單元中;標(biāo)號(hào)PKRD值為0123H,即轉(zhuǎn)跳的目標(biāo)地址為0123H,則指令機(jī)器碼的第二個(gè)字節(jié)rel(相對(duì)偏移量)應(yīng)為: rel0123H0102H21H所謂條件轉(zhuǎn)移就是程序轉(zhuǎn)移是有條件的。執(zhí)行條件轉(zhuǎn)移指令時(shí),如指令中規(guī)定的條件滿足,則進(jìn)行程序轉(zhuǎn)移,否則程序順序執(zhí)行,相當(dāng)于C語言中的ifgo to語句。 (1)累加器判零轉(zhuǎn)移指令(2條) JZ rel ;若A= 0,則PCPC+2+rel,跳轉(zhuǎn)執(zhí)行 ;若A0,則PCPC+2,順序執(zhí)行 JNZ rel ;若A0,則PC PC+2+rel,跳轉(zhuǎn)執(zhí)行 ;若A= 0,則PC PC+2,順序執(zhí)行這兩條
51、指令都是二字節(jié)指令,是以累加器A中內(nèi)容是否為0為判斷條件的相對(duì)轉(zhuǎn)移指令,以rel為偏移量,均是相對(duì)尋址方式。例:將片內(nèi)RAM的40H單元開始的數(shù)據(jù)塊傳送到片外RAM的1000H開始的單元中,當(dāng)遇到傳送的數(shù)據(jù)為0,則停止傳送。STRART: MOV R0, #40H;片內(nèi)RAM數(shù)據(jù)塊首地址 MOV DPTR, #1000H;片外RAM數(shù)據(jù)塊首地址 LOOP: MOV A, R0;取數(shù) JZ ABD;等于零,結(jié)束 MOVX DPTR,A;不為零,送數(shù) INC R0;地址指針加1 INC DPTR;地址指針加1 SJMP LOOP;轉(zhuǎn)LOOP,繼續(xù)取數(shù) ABD: SJMP ABD ;踏步 END(2
52、)數(shù)值比較轉(zhuǎn)移指令(4條) 數(shù)值比較轉(zhuǎn)移指令把兩個(gè)操作數(shù)進(jìn)行比較,將比較結(jié)果作為條件來控制程序轉(zhuǎn)移。CJNE A,#data,rel ;若A=data,則PCPC+3,即順序執(zhí)行 ;若Adata,則PCPC+3+rel,即跳轉(zhuǎn),且改變CY值 ;若A=data,則CY=0,若Adata,則CY=1CJNE A,direct,rel ;若A=(direct),則PCPC+3,即順序執(zhí)行 ;若A(direct),則PCPC+3+rel,即跳轉(zhuǎn),且改變CY值 ;若A=(direct),則CY=0,若A(direct),則CY=1CJNE Rn,#data,rel ;若data=Rn,則PCPC+3,即順序執(zhí)行 ;若dataRn,則PCPC+3+rel,即跳轉(zhuǎn),且改變CY值 ;若data=Rn,則CY=0,若dataRn,則CY=1CJNE Ri,direct,rel ;若(Ri)=(direct),則PCPC+3,即順序執(zhí)行 若(Ri)(direct),則PCPC+3+rel,即跳轉(zhuǎn),且改變CY值 ;若(Ri)=(direct),則CY=0,若(Ri)(direct),則CY=1三字節(jié)指令例:執(zhí)行下列程序后將根據(jù)A的內(nèi)容大于60H、等于60H、小于60H三種情況作不同的處理。 CJNE A,#60H,NEQ ;A不等于60H轉(zhuǎn)移EQ: ;A60H處理程序
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024成人肥胖食養(yǎng)指南
- 2025年大學(xué)試題(醫(yī)學(xué))-中藥化學(xué)歷年參考題庫含答案解析(5套典型考題)
- 2025年國(guó)家開放大學(xué)(電大)-計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)(網(wǎng)絡(luò)管理)??茪v年參考題庫含答案解析(5套典型考題)
- 2020年-2022年北京初二(下)期末道德與法治試卷匯編:尊重自由平等
- 2025年衛(wèi)生知識(shí)健康教育知識(shí)競(jìng)賽-精神衛(wèi)生知識(shí)競(jìng)賽歷年參考題庫含答案解析(5套典型考題)
- 2025年醫(yī)藥衛(wèi)生考試-醫(yī)療保險(xiǎn)醫(yī)保醫(yī)師考試歷年參考題庫含答案解析(5套典型題)
- 2025年醫(yī)學(xué)繼續(xù)教育-藥學(xué)繼續(xù)教育歷年參考題庫含答案解析(5套典型考題)
- 2025年企業(yè)文化企業(yè)建設(shè)知識(shí)競(jìng)賽-鐵道部THDS技術(shù)理論知識(shí)競(jìng)賽歷年參考題庫含答案解析(5套典型考題)
- 2025年企業(yè)培訓(xùn)師考試-助理企業(yè)培訓(xùn)師(三級(jí))歷年參考題庫含答案解析(5套典型考題)
- 2025年專業(yè)技術(shù)人員繼續(xù)教育公需科目-科技與創(chuàng)新繼續(xù)教育歷年參考題庫含答案解析(5套典型考題)
- 天津2024年初中學(xué)業(yè)水平考試英語中考試卷真題(含答案詳解)
- 臺(tái)球合伙合同協(xié)議書
- 2025鹽城市東臺(tái)市東臺(tái)鎮(zhèn)社區(qū)工作者考試真題
- 成人重癥患者人工氣道濕化護(hù)理專家共識(shí)
- uom無人機(jī)考試試題及答案
- 2025年小學(xué)語文畢業(yè)升學(xué)考試全真模擬卷(語文綜合運(yùn)用能力提升版)試卷
- 國(guó)企銀行考試試題及答案
- 康復(fù)治療質(zhì)量控制-全面剖析
- 登革熱及手足口病的護(hù)理
- 《波司登企業(yè)成本鏈管理問題優(yōu)化淺析》10000字【論文】
- 全面?zhèn)淇寂阍\師考試試題及答案
評(píng)論
0/150
提交評(píng)論