暫存器數值轉換

2021-10-25 14:59:43 字數 3833 閱讀 4320

暫存器的位值被重新定義後,怎麼計算暫存器的值?

1、微控制器的有些資料通常需要儲存在暫存器中,它們是以0或1的方式存在的。

上圖是乙個24位的暫存器,msb最高位是bit23,lsb最低位是bit0。

當bit23:0=0xffffff時,它對應的十進位制數值為:

2、有時為了表示某種資料,有的資料會對暫存器的位值進行重新定義。見下圖:

上圖中,0.0 ≤暫存器的值域< 1.0

當bit23:0=0xffffff時,它對應的十進位制數值為:

//返回數值: 0.0<= 浮點數值 < 1.0

//dat=0x800000,

則返回2^(-1)

//dat=0x400000,

則返回2^(-2)

//dat=0x200000,

則返回2^(-3)

//dat=0x100000,

則返回2^(-4)

//dat=0x080000,

則返回2^(-5)

//dat=0x040000,

則返回2^(-6)

//dat=0x020000,

則返回2^(-7)

//dat=0x010000,

則返回2^(-8)

//dat=0x008000,

則返回2^(-9)

//dat=0x004000,

則返回2^(-10)

//dat=0x002000,

則返回2^(-11)

//dat=0x001000,

則返回2^(-12)

//dat=0x000800,

則返回2^(-13)

//dat=0x000400,

則返回2^(-14)

//dat=0x000200,

則返回2^(-15)

//dat=0x000100,

則返回2^(-16)

//dat=0x000080,

則返回2^(-17)

//dat=0x000040,

則返回2^(-18)

//dat=0x000020,

則返回2^(-19)

//dat=0x000010,

則返回2^(-20)

//dat=0x000008,

則返回2^(-21)

//dat=0x000004,

則返回2^(-22)

//dat=0x000002,

則返回2^(-23)

//dat=0x000001,

則返回2^(-24)

//dat=0x000000,

則返回0 //

函式功能:它和(float)dat/0x1000000是等價的

float value_commutation(u32 dat)

return tmpfloatdata;

}3、負數是以補碼儲存的,下面的暫存器被定義如下:

msb最高位為符號位

當msb=1時,該暫存器表示的是乙個負數,負數是以補碼儲存的;負數的補碼減1,就得到反碼,再將反碼除了最高位msb外,其餘各位取反,就得到負數的原碼。

當msb=0時,該暫存器表示的是乙個正數;

-1.0 ≤ 暫存器的值 < 1.0

1) 當bit23:0=0xffffff時,它對應的十進位制數值是乙個負數,因此

反碼為:0xffffff-1=0xfffffe

原碼為:(~0xfffffe)|0x800000=0x000001|0x800000=0x800001

2) 當bit23:0=0x800000時,它對應的十進位制數值是乙個負數,因此

反碼為:0x800000-1=0x7fffff

原碼為:(~0x7fffff) |0x800000=0x800000|0x800000 =-0x800000=-1

負數補碼的最高位為1,其餘各位為0,表示該負數最小,因此這裡為-1;

3) 當bit23:0=0x800001時,它對應的十進位制數值是乙個負數,因此

反碼為:0x800001-1=0x800000

原碼為:(~0x800000)|0x800000=0x7fffff|0x800000 =-0x7fffff

//返回數值: -1.0<= 浮點數值 < 1.0

//dat=0x800000,

則返回-2^(0)

//dat=0x400000,

則返回2^(-1)

//dat=0x200000,

則返回2^(-2)

//dat=0x100000,

則返回2^(-3)

//dat=0x080000,

則返回2^(-4)

//dat=0x040000,

則返回2^(-5)

//dat=0x020000,

則返回2^(-6)

//dat=0x010000,

則返回2^(-7)

//dat=0x008000,

則返回2^(-8)

//dat=0x004000,

則返回2^(-9)

//dat=0x002000,

則返回2^(-10)

//dat=0x001000,

則返回2^(-11)

//dat=0x000800,

則返回2^(-12)

//dat=0x000400,

則返回2^(-13)

//dat=0x000200,

則返回2^(-14)

//dat=0x000100,

則返回2^(-15)

//dat=0x000080,

則返回2^(-16)

//dat=0x000040,

則返回2^(-17)

//dat=0x000020,

則返回2^(-18)

//dat=0x000010,

則返回2^(-19)

//dat=0x000008,

則返回2^(-20)

//dat=0x000004,

則返回2^(-21)

//dat=0x000002,

則返回2^(-22)

//dat=0x000001,

則返回2^(-23)

//dat=0x000000,

則返回0 //

函式功能:它和(float)dat/0x800000在功能上是等價的

float value_commutation1(u32 dat)

if(dat==0x800000) tmpfloatdata=1.0;

else tmpfloatdata=0.0;

//計算負數原碼結束

for(i = 0;i<23;i++)

tmpfloatdata = tmpfloatdata*flag;//新增正負號

return tmpfloatdata;

}

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...

CS 暫存器 和 IP 暫存器

下面將要介紹的是一組非常非常重要的暫存器,即 cs ip cs ip 兩個暫存器指示了 cpu 當前將要讀取的指令的位址,其中cs 為 段暫存器,而ip 為指令指標暫存器。什麼叫做指示了 cpu 當前將要讀取的指令呢?在 8086 cpu 中,為什麼 cpu 會自動的執行指令呢?這些指令肯定是存放在...