6502寄存器1.累加寄存器A
本文引用地址:http://m.butianyuan.cn/article/201611/320816.htm 這是個8位寄存器,既然是8位,那么說明該寄存器中只能存儲一個(00-FF)之間的立即數(shù).它與算術(shù)邏輯運算單元一起完成各種算術(shù)邏輯運算,它既可存放操作前的初始數(shù)據(jù),也可存放操作結(jié)果,所以稱為累加器.
在6502匯編中,這個寄存器應(yīng)該算是用的最多的
大家也不要管那么多,只要知道有這個寄存器,該寄存器可以存放一個00-FF之間的立即數(shù)就可以了.
2.變址寄存器X
也是8位寄存器,它在編程中常被當作一個計數(shù)器來使用.它可以由指令控制而被置成一個常數(shù),并能方便的用加1,減1,比較操作來修改和測試其內(nèi)容,以使得程序能夠方便靈活的處理數(shù)據(jù)塊,表格等問題.
3.變址寄存器Y
用法和變址寄存器X一樣,只不過在有些情況下,比如程序中要同時處理兩個以上的數(shù)據(jù)塊時,一個變址寄存器顯得不夠,所以6502中有兩個用于變址的寄存器X和Y.
4.程序計數(shù)器PC
它是6502中唯一的16位寄存器,PC是用來存放指令地址碼的寄存器,由于程序的執(zhí)行一般為順序執(zhí)行方式,每取出一個指令字節(jié)后PC即自動加1,為取下一個指令字節(jié)做好準備,所以程序計數(shù)器PC中的內(nèi)容往往是指向下一個指令字節(jié)地址,但在執(zhí)行轉(zhuǎn)移指令時,PC中將被放進要轉(zhuǎn)移的目標地址.
5.堆棧指針S
它是用來指示堆棧棧頂位置的寄存器,由于6502規(guī)定堆棧設(shè)在第1頁存儲器中,所以堆棧指針S也是8位寄存器只用來指出堆棧位置的低8位地址.S具有數(shù)據(jù)進棧時自動減1,出棧時自動加1的功能.
6.標志寄存器P
這也是8位的寄存器,但是只用了其中的7位,第5位空著不用.
每條指令在執(zhí)行之后往往會發(fā)生進位溢出,結(jié)果為0,或是結(jié)果為負數(shù)(大于7F的數(shù)叫負數(shù))的情況.指令執(zhí)行完后常常要保留這些情況作為條件分支的依據(jù),標志寄存器P就是為了適應(yīng)這需要而設(shè)計的,在寄存器P中有以下7個標志位,不過我這里只介紹其中的5位
76543210
NV BDIZC
C--進位標志.指令執(zhí)行完畢后的最高進位狀態(tài),若最高位有進位則使C=1,若最高位無進位則使C=0
N--零標志.指令執(zhí)行完畢后結(jié)果為0,那么Z=1;否則Z=0.
I--中斷標志.此位置0表示允許中斷,置1表示禁止中斷,但非屏蔽中斷不受次約束
V--溢出標志.指令執(zhí)行后若產(chǎn)生溢出,則次標志位被置1
N--負數(shù)標志.指令執(zhí)行完畢后,若結(jié)果最高位為1,則該位置1
下面我們舉例來說明:
例:兩個正數(shù)61,4A相加
01100001
+01001010
----------
=10101011
兩個正數(shù)相加,為什么結(jié)果變?yōu)樨摂?shù)呢?這是也61+4A=AB,超過了八位寄存器所能表示的最大正數(shù)7F,而產(chǎn)生了溢出,那么這時V=1,結(jié)果不是0,那么Z=0,結(jié)果最高位為1,那么N=1,結(jié)果最高位沒有進位,那么C=0
標志位常常在執(zhí)行條件轉(zhuǎn)移指令時做為條件判斷的依據(jù).這在后面的指令系統(tǒng)中會講到.
評論