8051小筆記---什麼是PSW
PSW的英文全名叫做(Program Status Word)
中文翻成"程式狀態字組"
他是一個2Bytes(8bits)大小的資料
在記憶體位置D0到D7
從英文全名我們可以推斷它紀錄著程式狀態
接下來我們詳細的講述PSW
PSW內的各項旗標(Flags)
總共有七種不同的功能
(Register bank select功能的旗標有兩個)
分別如以下:
Carry flag
AC
F0
Register bank select
Overflow flag
Reserved bit
Parity bit
各項旗標的功能介紹
Carry flag
他的符號為 : CY
記憶體位址在 : D7H
顧名思義就是記錄著程式的進位(Carry)
當今天我們的程式8bits裝著#FDH的資料
如果我們對這個資料加上#05H
這時資料會變為#02H
Carry flag被設為1
以此類推,減法也有這個機制
如果我們對#02H這個資料減#05H
資料會變為#FDH
Carry flag被設為1
AC
他的符號為 : AC
記憶體位址在 : D6H
他的英文全名為Auxiliary Carry flag
顧名思義,其功能也跟進位有關
而具體來說,他在BCD(Binary-coded Decimal)的進位非常有幫助
因為他檢測的進位並不是最高位元(左邊第一個)
而是兩個Byte的中間(三和四bit)
就如以下這樣 :
#9BH + #0CH
1001,1011 + 0000,1100 = 1010,0111經過上面的加法操作
唯一的進位發生在三和四bit間
所以AC被設為1、CY保持0
F0
他的符號為 :F0
記憶體位址在 : D5H
他的英文全名為Flag 0
沒什麼特別的功能
可以供程式設計師自行運用
Register bank select
他的符號為 :RS1、RS0
記憶體位址在 : D4H、D3H
這兩個bits的作用是選擇Register bank
並且可以知道總共有四種數值的組合
分別對應到四個不同的Register bank
(關於Register bank我之後會再寫一篇文章)
不同Register bank的最大好處是可以減少記憶體stack堆疊的次數
像是 : interrupt就會很頻繁的stack堆疊,直接轉換Register bank是一個簡潔的好辦法
Overflow flag
他的符號為 : OV
記憶體位址在 : D2H
他的功能也是可以從名字上看出來
當今天運算操作導致"有號數"數值太大
也就是進位影響到符號位(sign bit)
他就會被設為1
基本上他的概念等同於Carry flag
最大的差別就是適用有號數還是無號數
Reserved bit
他的符號為 : (沒有)
記憶體位址在 : D1H
他就是一個什麼功能都沒有的空白區域
Parity bit
他的符號為 : P
記憶體位址在 : D0H
他的功用如同名字
會在每一個時脈檢查Acc值的奇偶性
Acc為奇數時,P = 1
反之,Acc為偶數時,P = 0
他最大功用是對接收與輸出信號做奇偶檢查
留言
張貼留言