1. 程式人生 > >51微控制器ADD,ADDC與SUBB指令詳細分析

51微控制器ADD,ADDC與SUBB指令詳細分析

ADD與ADDC 加法指令:
例如:執行0xfefe+0x0003

由於微控制器只能處理8位資料加減法 具體操作如下:

/////////////////////////////低八位加法//////////////////////////////////

mov r0,#0xfe ;0xfefe先將低八位給r0暫存器
mov r1,#0x03:0x0003先將低八位給r1暫存器
mov a,r0
ADD  a,r1
MOV r2, Ar2存放計算結果低八位

執行ADD加法指令後  A暫存器中的值為資料低八位相加得0x01,cy進位標誌位為1。

/////////////////////////////高八位減法//////////////////////////////////

mov r0,#0xfe ;0xfefe先將高八位給r0暫存器
mov r1,#0x00:0x0003先將高八位給r1暫存器
mov a,r0
ADDC a,r1
MOV r3, a   ;r3存放計算結果高八位
執行ADDC加法指令後  A暫存器中的值為資料高八位相加得0xfe在加上低八相加後向高八位的進位 也就是進位標誌位中的 1,最後結果a暫存器為0xff。
注意:當加上CY位後 CY標誌位清零


減法指令SUBB 加法指令:
例如:執行0xfe9f-0x00af
由於微控制器只能處理8位資料加減法 具體操作如下:
/////////////////////////////低八位減法//////////////////////////////////
mov r0,#0x9f ;0xfe9f先將低八位給r0暫存器
CLR Cy;由於減法指令只有一個 所以低八位做減法運算先將借位標誌位Cy清零
mov r1,#0xaf:0x00af先將低八位給r1暫存器
mov a,r0
subb  a,r1
MOV r2, a  ;儲存低八位減法所得結果
當a減r1資料時候,由於a暫存器中的值比r1暫存器中值小 所以向高位借一位 就把借位標誌位Cy置1 ,結果為0xf0
/////////////////////////////高八位減法//////////////////////////////////
mov r0,#0xfe ;0xfe9f先將低八位給r0暫存器
mov r1,#0x00:0x00af先將低八位給r1暫存器
mov a,r0
subb  a,r1
MOV r3, a;儲存高八位減法所得結果
當a減r1資料時候,由於0xfe9f低八位做減法向高八位借一位,所以高八位做減法時候  r0暫存器中0xfe減掉借走的一位,也就是 借位標誌位Cy。也就是r0暫存器中的資料減去cy標誌位後在減r1暫存器的值0x00所得結果a為0xfd
注意:當減掉CY位後 CY標誌位清零