什么是堆棧操作指令?交換指令的作用是什么?
堆棧操作指令
堆棧指令是FX系列中新增的基本指令,用于多重輸出電路,為編程帶來便利、在FX系列PLC中有11個(gè)存儲(chǔ)單元,它們專門用來存儲(chǔ)程序運(yùn)算的中間結(jié)果,被稱為棧存儲(chǔ)器。
堆棧是計(jì)算機(jī)中一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),由棧區(qū)和棧頂指針組成。
堆棧有兩種操作,壓棧(進(jìn)棧)和彈棧(出棧),他們均只能在棧頂進(jìn)行。
堆棧指令是FX系列中新增的基本指令,用于多重輸出電路,為編程帶來便利、在FX系列PLC中有11個(gè)存儲(chǔ)單元,它們專門用來存儲(chǔ)程序運(yùn)算的中間結(jié)果,被稱為棧存儲(chǔ)器。
指令說明:
(1)MPS(進(jìn)棧指令)。將運(yùn)算結(jié)果送入棧存儲(chǔ)器的第一段,同時(shí)將先前送入的數(shù)據(jù)依次移到棧的下一段。
(2)MRD(讀棧指令)。將棧存儲(chǔ)器的第一段數(shù)據(jù)(最后進(jìn)棧的數(shù)據(jù))讀出且該數(shù)據(jù)繼續(xù)保存在棧存儲(chǔ)器的第一段,棧內(nèi)的數(shù)據(jù)不發(fā)生移動(dòng)。
(3)MPP(出棧指令)。將棧存儲(chǔ)器的第一段數(shù)據(jù)(最后進(jìn)棧的數(shù)據(jù))讀出且該數(shù)據(jù)從棧中消失,同時(shí)將棧中其它數(shù)據(jù)依次上移。
(4)堆棧指令沒有目標(biāo)元件。
(5)MPS和MPP必須配對(duì)使用。
(6)由于棧存儲(chǔ)單元只有11個(gè),因此棧的層次最多11層。
堆棧是片內(nèi)RAM區(qū)中的一塊連續(xù)的字節(jié)存儲(chǔ)單元,遵循“先入后出、后入先出”的使用原則。堆棧操作分為“入棧”和“出?!眱煞N,入棧操作通過PUSH指令將數(shù)據(jù)放入堆棧,而出棧操作通過POP指令將數(shù)據(jù)從堆棧中取出。一般情況下,堆棧操作指令PUSH和POP應(yīng)該成對(duì)出現(xiàn),并且滿足堆?!跋热牒蟪觥⒑笕胂瘸觥钡氖褂迷瓌t。堆棧通常用于子程序和中斷服務(wù)處理程序的調(diào)用、返回操作及參數(shù)傳遞和現(xiàn)場(chǎng)保護(hù),也可以用于存放程序執(zhí)行時(shí)產(chǎn)生的臨時(shí)數(shù)據(jù)。
PUSH指令和POP指令只能進(jìn)行字節(jié)類型的數(shù)據(jù)傳送,而且指令中唯一的操作數(shù)必須采用直接尋址方式,其格式見表3-3。
堆棧操作中用到的特殊功能寄存器SP被稱為堆棧指針。堆棧操作時(shí),SP中的數(shù)被當(dāng)作片內(nèi)RAM存儲(chǔ)單元的地址。MCS-51單片機(jī)在入棧操作時(shí)SP增加、出棧時(shí)SP減小,這樣的堆棧被稱為“向上生長型”的堆棧。而入棧時(shí)SP減小、出棧時(shí)SP增大的堆棧被稱為“向下生長型”的堆棧。堆棧操作前,SP初始值所指向的片內(nèi)RAM存儲(chǔ)單元被稱為“棧底”,每次堆棧操作后,SP所指向的片內(nèi)RAM存儲(chǔ)單元被稱為“棧頂”。
【例3-25】堆棧操作指令。程序段及指令執(zhí)行時(shí)片內(nèi)RAM中的數(shù)據(jù)存放情況如下:
本例給出了指令執(zhí)行過程中片內(nèi)RAM中數(shù)據(jù)變化的情況,讀者應(yīng)將其與程序指令對(duì)照分析,并注意堆棧操作過程中SP的變化。
【例3-26】錯(cuò)誤堆棧操作指令舉例。以下4條指令均是錯(cuò)誤的。
本例指令錯(cuò)誤的原因是:在指令①和②中,A和R0都是寄存器,屬于寄存器尋址方式,而堆棧操作指令的操作數(shù)只能是直接尋址的;在指令③中,DPTR由DPH和DTL兩個(gè)特殊功能寄存器構(gòu)成,而DPTR本身不是特殊功能寄存器,不符合堆棧操作指令對(duì)操作數(shù)尋址方式的要求;在指令④中,立即數(shù)不能作堆棧操作指令的操作數(shù)。
交換指令
交換指令的功能是交換操作數(shù)的存放位置,指令語法格式見表3-4。
數(shù)據(jù)交換指令是實(shí)現(xiàn)兩個(gè)操作數(shù)據(jù)之間的位置互換的指令,這兩個(gè)操作數(shù)可以是兩個(gè)寄存器操作數(shù),或一個(gè)寄存器操作數(shù)與一個(gè)存儲(chǔ)器操作數(shù),或兩個(gè)存儲(chǔ)器操作數(shù),在多處理機(jī)中,也可以是一個(gè)寄存器操作數(shù)和一個(gè)共享存儲(chǔ)器操作數(shù)。數(shù)據(jù)交換指令實(shí)現(xiàn)了數(shù)據(jù)的雙向傳送,一條數(shù)據(jù)交換指令起到了三條數(shù)據(jù)傳送指令的作用。
【例3-27】交換指令舉例。指令如下:
在本例中,若假設(shè)指令執(zhí)行之前,(A)=0AFH、(R5)=23H、(B)=51H、(72H)=67H、(R0)=18H、(18H)=9EH,則上述6條指令執(zhí)行的結(jié)果分別如下:
①(A)=23H,(R5)=(0AFH)
②(A)=51H,(B)=(0AFH)
③(A)=67H,(72H)=(0AFH)
④(A)=9EH,((R0))=(18H)=(0AFH)
⑤(A)=0AEH,((R0))=(18H)=(9FH)
⑥(A)=0FAH