堆棧寄存器與數(shù)據(jù)寄存器
堆棧指針寄存器在堆棧操作中使用,PUSH和POP指令是從SP寄存器得到現(xiàn)行堆棧段的段內(nèi)偏移量,所以稱SP寄存器為堆棧指針,SP始終指向棧頂。堆棧是計(jì)算機(jī)中廣泛應(yīng)用的技術(shù),基于堆棧具有的數(shù)據(jù)進(jìn)出FIFO特性,常應(yīng)用于保存中斷斷點(diǎn)、保存子程序調(diào)用返回點(diǎn)、保存CPU現(xiàn)場(chǎng)數(shù)據(jù)等,也用于程序間傳遞參數(shù)。
ARM處理器中通常將寄存器R13作為堆棧指針(SP)。ARM處理器針對(duì)不同的模式,共有 6 個(gè)堆棧指針(SP),其中用戶模式和系統(tǒng)模式共用一個(gè)SP,每種異常模式都有各自專用的R13寄存器(SP)。它們通常指向各模式所對(duì)應(yīng)的專用堆棧,也就是ARM處理器允許用戶程序有六個(gè)不同的堆??臻g。這些堆棧指針?lè)謩e為R13、R13_svc、R13_abt、R13_und、R13_irq、R13_fiq。為了更準(zhǔn)確地描述堆棧,根據(jù)“壓?!辈僮鲿r(shí)堆棧指針的增減方向,將堆棧區(qū)分為‘遞增堆棧’(SP 向大數(shù)值方向變化)和‘遞減堆?!?SP 向小數(shù)值方向變化);又根據(jù)SP 指針指向的存儲(chǔ)單元是否含有堆棧數(shù)據(jù),又將堆棧區(qū)分為‘滿堆?!?SP 指向單元含有堆棧有效數(shù)據(jù))和‘空堆?!?SP 指向單元不含有堆棧有效數(shù)據(jù))。這樣兩兩組合共有四種堆棧方式——滿遞增、空遞增、滿遞減和空遞減。ARM處理器的堆棧操作具有非常大的靈活性,對(duì)這四種類型的堆棧都支持。ARM處理器中的R13被用作SP。當(dāng)不使用堆棧時(shí),R13 也可以用做通用數(shù)據(jù)寄存器。
內(nèi)存資料寄存器是指用于存放欲寫入存儲(chǔ)體中的數(shù)據(jù),或暫存從存儲(chǔ)體中讀出的數(shù)據(jù),準(zhǔn)備讓處理器處理的寄存器,即用來(lái)暫時(shí)存放處理器計(jì)算過(guò)程中所用到的操作數(shù)、結(jié)果和信息。數(shù)據(jù)寄存器用來(lái)暫時(shí)存放由主存儲(chǔ)器讀出的一條指令或一個(gè)數(shù)據(jù)字;反之,當(dāng)向主存存入一條指令或一個(gè)數(shù)據(jù)字時(shí),也將它們暫時(shí)存放在數(shù)據(jù)寄存器中。在單累加器結(jié)構(gòu)的運(yùn)算器中,數(shù)據(jù)寄存器還可兼作操作數(shù)寄存器 [1] 。數(shù)據(jù)寄存器訪問(wèn)速度最快,完全能與 CPU 協(xié)調(diào)工作。
內(nèi)存資料寄存器(Memory Data Register,MDR),又稱數(shù)據(jù)寄存器、緩沖寄存器,是計(jì)算機(jī)控制單元中的寄存器,寄存了將要寫入到計(jì)算機(jī)主存儲(chǔ)器(例如:RAM)的數(shù)據(jù),或由計(jì)算機(jī)主存儲(chǔ)器讀取后的數(shù)據(jù)。它就像緩沖器,持有從內(nèi)存復(fù)制的數(shù)據(jù),以準(zhǔn)備給處理器使用。內(nèi)存資料寄存器是微程序與計(jì)算機(jī)數(shù)據(jù)儲(chǔ)存(computer data storage)之間的一個(gè)微小界面的其中一半,而另一半則是內(nèi)存地址寄存器(memory address register)。
AX、BX、CX、DX可以稱為數(shù)據(jù)寄存器,這4個(gè)16位寄存器又可分別分成高8位(AH、BH、CH、DH)和低8位(AL、BL、CL、DL)。因此它們既可作為4個(gè)16位數(shù)據(jù)寄存器使用,也可作為8個(gè)8位數(shù)據(jù)寄存器使用,在編程時(shí)可存放源操作數(shù)、目的操作數(shù)或運(yùn)算結(jié)果。數(shù)據(jù)寄存器是存放操作數(shù)、運(yùn)算結(jié)果和運(yùn)算的中間結(jié)果,以減少訪問(wèn)存儲(chǔ)器的次數(shù),或者存放從存儲(chǔ)器讀取的數(shù)據(jù)以及寫入存儲(chǔ)器的數(shù)據(jù)的寄存器。AX(accumulator)累加器。作為累加器使用。是算術(shù)運(yùn)算的主要寄存器。在乘、除等指令中指定用來(lái)存放操作數(shù)。以及所有的 I/O指令都使用這一寄存器與外部設(shè)備傳送信息。BX(base)基址??梢宰鳛橥ㄓ眉拇嫫魇褂?。此外在計(jì)算機(jī)存儲(chǔ)地址時(shí),它經(jīng)常用作基址寄存器。CX(count)計(jì)數(shù)??梢宰鳛橥ㄓ眉拇嫫魇褂?。常用來(lái)保存計(jì)數(shù)值,如在循環(huán)、位移和串處理指令中作隱含計(jì)數(shù)器。DX(data)數(shù)據(jù)??梢宰鳛橥ㄓ眉拇嫫魇褂?。一般在作雙字長(zhǎng)運(yùn)算時(shí)把DX和AX組合在一起存放一個(gè)雙字長(zhǎng)數(shù),DX用來(lái)存放高位數(shù)。對(duì)于某些I/O操作,DX可用來(lái)存放I/O的端口地址。