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