1. 程式人生 > >51微控制器PSW之CY與OV的聯絡與區別

51微控制器PSW之CY與OV的聯絡與區別

1.先從計算機儲存的機制說起:

直接說有符號數,先說一個位元組的的補碼錶示範圍為-2^7~(2^7-1),即-128~127。

當X>0時,X[原碼]=[反碼]=[補碼]

當X=0時,存在[+0]和[-0]兩種表示形式,[+0]原=0000 000,[+0]反=0000 0000,[+0]補=0000 0000

[-0]原=1000 000,[-0]反=1111 111,[-0]補=0000 0000

當X<0時:

a.負數的原碼:最高位D7為1,剩餘D6~D1為其絕對值二進位制表示。 例如:-1的原碼為1000 0001;

b.負數的反碼:最高位D7仍保留為1,剩餘D6~D1為其絕對值二進位制按位取反。例如:-1的反碼為1111 1110;

c.負數的補碼:補碼為對應反碼加1。例如:-1的補碼為1

111 1111。

有符號數在計算機中是以補碼形式存在的。

數值 原碼 反碼 補碼
-1 1000 0001 1111 1110 1111 1111
-2 1000 0010 1111 1101 1111 1110
…… …… …… ……
-128 1000 0000

總結:當X<0時,X[補碼]=256-|X|=255--|X|+1=1111 1111--|X|+1=X[反碼]+1,256為一個位元組的模的大小,為2^8。

原碼錶示範圍:最小值:1111 1111=-127,最大值為0111 1111為+127,故範圍為-127~(+127),其中包括[+0]原和[-0]原,共2^8個數;

反碼錶示範圍:最小值:1000 0000=-127,最大值為0

111 1111為+127,故範圍為-127~(+127),其中包括[+0]反和[-0]反,共2^8個數

補碼錶示範圍:最小值按理來說應該是1000 0001=-127,但因為[+0]補=[-0]補=0000 0000,從-127~+127共255個數,少一個數怎麼辦呢?-1的補碼是確定無異的,為1111  1111-128作為一個位元組所能表示的有符號數的最小值,應是1111  1111(-1)一直減1得到的,所以-128的補碼為1000 0000。

2.結合51微控制器,重點對程式狀態字PSW之中的CY和OV位進行分析

51微控制器之PSW位

位地址

D7

D6

D5

D4

D3

D2

D1

D0

位符號

CY

AC

F0

RS1

RS0

OV

-

P

PSW作為一個8位的特殊功能暫存器,記錄了當前有關CPU狀態的各種資訊,分為兩類:一類是當前指令執行結果的狀態資訊,如CY/AC/OV/P;另一類是存放控制資訊,如RS1/RS0/F0。先介紹除了CY+OV之外的標誌位:

AC(PSW.7)輔助進位標誌:當進行加法或減法操作而產生低四位向高四位進位或者借位時,AC將被硬體置位(AC=1),否則清零(AC=0),AC主要用於二-十進位制加法調整;

F0(PSW.5)使用者標誌位:是使用者自定義的一個標誌位,可以用軟體置位或者清零,常用來控制程式的流向;

RS1、RS0(PSW.4、PSW.3)工作暫存器選擇控制標誌:可以軟體置1或者清零來確定工作暫存器區;

P(PSW.0)奇偶標誌位:每個指令週期都由硬體來置位或者清零,以表示累加器A中1的位數的奇偶數。如果位數為奇數,則P=1,如果值為1的個數為偶數,則P=0.  

下面重點介紹