對暫存器操作的通用方法總結

2021-08-09 05:16:37 字數 994 閱讀 1956

接觸了一陣子的stm32函式庫,使用起來挺方便的,但是很少有處理器會有函式庫,大部分情況下還是要自己來對暫存器進行操作,所以還是不要生疏了對暫存器的操作。對暫存器的操作有時候要考慮對其不同的位進行先後順序不同的設定,因為這樣可能達不到預期的效果,這個不太好總結,但是對暫存器操作的方法是固定的。在這之前,首先要明白邏輯運算子(! && ||)和位運算子(<< >> ~ | ^ &)的區別,對暫存器的操作使用的是位運算子,邏輯運算子一般用於在程式中判斷邏輯中使用。

例如 定義乙個8位的暫存器(0xf0是暫存器的位址):

1)對單個的位進行賦值 

(1)將暫存器reg的第5位置「1」 

reg |= (1 << 5);

(2)將暫存器reg的第5位清零 

reg &= ~(1 << 5);

(3)將暫存器reg的第3和第5位置「1」 

reg |= (1 << 5) | (1 << 3);

(4)將暫存器reg的第3和5位清零 

reg &= ~( (1 << 5) | (1 << 3) );

該段總結如下: 

將某位置1,移位取反後使用位運算」|」 

將某位置0,移位取反後,使用位運算」&」

2)直接賦值 

(1)將暫存器reg的1、2、3、5、7位置「1」 

reg = 0x5e; 

(即給暫存器reg1賦值為1010 1110,這種方法多在初始化中使用)

(2)分別將暫存器reg的1、3、5、7位置「1」,0、2位置「0」 

u8 temp; 

tmep = reg; 

temp &= ~0x01; //等價於 temp &= ~(1<<0) 將第0位清零 

temp |= (1 << 1); 

temp &= ~(1 << 2); 

temp |= (1 << 3); 

temp |= (1 << 5); 

temp |= (1 << 7); 

reg = temp;

暫存器(通用暫存器)

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

對暫存器的操作

接觸了一陣子的stm32函式庫,使用起來挺方便的,但是很少有處理器會有函式庫,大部分情況下還是要自己來對暫存器進行操作,所以還是不要生疏了對暫存器的操作。對暫存器的操作有時候要考慮對其不同的位進行先後順序不同的設定,因為這樣可能達不到預期的效果,這個不太好總結,但是對暫存器操作的方法是固定的。在這之...

通用暫存器區四個暫存器

void int0 interrupt 0 using 1 interrupt 0 指明是外部中斷0 interrupt 1 指明是定時器中斷0 interrupt 2 指明是外部中斷1 interrupt 3 指明是定時器中斷1 interrupt 4 指明是序列口中斷 using 0 是第0組暫...