表 3-3 算術運算指令
操作碼 |
目標操作數 |
參與運算的操作數 |
說 明 |
Cy |
AC |
OV |
P |
ADD | A | Rn; direct; @Ri; # data |
不帶進位加 |
Ö |
Ö |
Ö |
Ö |
ADDC |
A |
Rn; direct; @Ri; # data |
帶進位加 |
||||
SUBB |
A |
Rn; direct; @Ri; # data |
帶借位減 |
||||
MUL |
AB |
(A)*(B) |
積在(B)(A) |
0 |
- |
Ö |
Ö |
DIV |
AB |
(A)/(B) |
商 (A) ,余數 (B) |
||||
DA |
A |
只對加法作十進制修正 |
Ö |
- |
- |
Ö |
|
INC |
A; Rn; direct; @Ri; DPTR |
加一 |
- |
- |
- |
Ö |
|
DEC |
A; Rn; direct; @Ri (無DPTR) |
減一 |
*“Ö”表示標志位根據運算結果取值,“-”表示對標志位無影響。
1. 算術運算指令的一般性說明
ê 除加1/減1指令外,一般以累加器Acc為目標,且影響標志位。
ê 沒有不帶借位減指令。用SUBB作不帶借位減運算,Cy應先清零。
ê 乘法若 積 > 255 , 則OV = 1 ; 除法若 除數 = 0 , 則OV = 1 。
ê DA A 指令只對ADD 或ADDC作十進制修正。
ê 無 DEC DPTR指令。
2. 加/減算術運算指令指令應用例
ê 將內部RAM中從30H開始存放的10個雙字節無符號整數相加,其和送(R5 R4 R3),低字節在R3。
MOV R0,#30H
MOV R2,#10
MOV R3,#0
MOV R4,#0
MOV R5,#0
LOOP:MOV A,@R0
ADD A, R3
MOV R3,A
INC R0
MOV A,@R0
ADDC A,R4
MOV R4,A
INC R0
MOV A,#0
ADDC A,R5
MOV R5,A
DJNZ R2,LOOP
ê 將內部RAM中從30H開始存放的10個4位十進制正整數(壓縮BCD碼)相加,其和送(R5 R4 R3),低字節在R3。
ê 比較A與B中的無符號數,大數存B。
MOV R2,A
CLR C ;確保C = 0
SUBB A,B
JC DONE ;若有借位,A<B,轉DONE 結束。
MOV B,R2 ;沒有借位,A>B,將大數存B。
DONE: ¼¼
3. 乘/除算術運算指令指令應用例
ê 雙字節數乘單字節數:雙字節數在(R3R4),單字節數在(R2),積送(R3R4R5)
MOV A,R2 ;
MOV B,R4 ;
MUL AB ; (R4)´(R2)
MOV R5,A ;
MOV R4,B ;
MOV A,R2 ;
MOV B,R3 ;
MUL AB ; (R3)´(R2)
ADD A,R4 ;
MOV A,#0 ;
ADDC A,B ;
MOV R3,A ;
ê 單字節二進制數轉十進制(BCD)數:二進制數在A,十進制數存入(R2R3)
MOV B,#10
DIV AB ; 除十, 余個位
MOV R3,B ; 個位存R3
MOV B,#10
DIV AB ; 再除十, 余十位
MOV R2,A ; 商為百位,存R2
MOV A,B
SWAP A ;
ADD A,R3 ; 十位與個位合并
MOV R3,A;
這些算術運算指令你應該了解了吧