#コマンドシステム
命令フォーマット
一般命令による指令手段オペコードと命令のオペランド二つの部分の
指示説明記号
- A:アキュムレータAを表し、ACCはアキュムレータAのアドレスを表します。
- Rn(n = 0〜7):現在選択されている作業レジスタグループ内のレジスタR0〜R7の1つ。
- Ri(i = 0、1):現在選択されている作業レジスタグループにR0またはR1を登録します。
- @:間接アドレッシングまたはインデックス付きアドレッシングプレフィックス。
- data:8ビットのイミディエイトデータ。
- data16:16ビットのイミディエイトデータ。
- direct:オンチップの下位128 RAMユニットアドレスとSFRアドレス。
- addr11:11ビットの宛先アドレス。
- addr16:16ビットの宛先アドレス。
- rel:128から+127の範囲の、1バイトの補数で表されるアドレスオフセット。
- bit:ビットアドレス空間のアドレス指定可能なビットのアドレス。
- (X):Xアドレスユニットまたはレジスタの内容を示します。
- ((X)):Xユニットの内容を取得するか、アドレスで指定されたユニットの内容として登録します。
- /:ビットオペランドの逆演算接頭辞は、ビットが反転されることを意味しますが、ビットの元の値には影響しません。
- →:データの送信方向。矢印側のコンテンツが矢印の指すユニットに送信されることを示します。
- :データ交換を示します。
命令フォーマット
-
シングルバイト命令/:オペコードのみ、オペランドなし、オペランドはオペコードに暗黙的。
-
2バイト命令/:1バイトは命令コードを表し、もう1バイトは即値またはオペランドが格納されているアドレスを表します。
-
3バイト命令/:最初のバイトはオペコードを表し、最後の2バイトはオペランドまたはオペランドアドレスを表します。
-
注:
- 単一の命令、一般的な形式は
操作ニーモニック[オペランド] [;コメント] - 2命令の一般的な形式は次のとおりです。
操作ニーモニック[宛先オペランド] [、ソースオペランド] [;注]
- 単一の命令、一般的な形式は
アドレッシングモード
コンピュータによってアドレッシング方法は異なりますが、一般的に言えば、アドレッシング方法が多いほど、コンピュータの機能が強化され、柔軟性が高まります。51シリーズMCUには7つのアドレス指定モードがあります
即時アドレス指定
命令コードで直接オペランドを指定するアドレッシング方式を即時アドレッシングと呼びます。
このアドレッシングモードでは、オペコードの直後のオペランドは即値と呼ばれます。
即値は1バイトまたは2バイトで、即値は接頭辞「#」記号で識別されます。
MOV A,#03H
直接アドレス指定
直接アドレッシングとは、オペランドのアドレスによって命令で直接指定されるアドレッシング方法を指します。
アドレスに対応するユニットの内容はオペランドであり
、直接オペランドユニットのアドレスは「direct」で示されます。
MOV A,3CH ;(3CH)→A
アドレッシングの登録
オペランドがレジスタに格納されるアドレッシングモードは、レジスタアドレッシングと呼ばれます。
このアドレッシングモードでは、アドレス指定されたレジスタは命令のオペコードに含まれており、レジスタはシンボルRnで表されます。
指令译码其实是译码的是操作码
假设(R1) = 0FFH,
执行指令:MOV A,R1 ; (R1)→A
结果:(A) = 0FFH
間接アドレス指定を登録する
レジスタ間接アドレッシングとは、オペランドがレジスタの内容をアドレスとしてユニットに格納されることを意味します。
レジスターの内容は、もはやオペランドではなく、オペランドのアドレスです。
レジスタの間接アドレス指定は、記号「@」で示されます。
(1)内蔵RAMが128単位下位でアドレス範囲が00H〜7FHの場合アドレス間レジスタはRi(i = 0、1)またはSPを使用してください。
(2)P2ポートラッチと共に使用して、Riで下位8ビットアドレスを示します。これは、オフチップデータメモリまたはI / Oの64KB領域をアドレス指定できます。
(3)DPTR間接アドレッシングレジスタ、プログラムメモリまたはオフチップデータメモリ(I / Oポートを含む)のアドレス指定可能な64KB領域。
设(R0) = 60H,
内部RAM (60H) = 50H,
执行指令MOV A,@R0 ;((R0))→A
执行结果(A) = 50H。
####インデックス付きアドレス指定
このアドレッシングモードでは、DPTRまたはPCがベースアドレスレジスタとして使用され、アキュムレータAがインデックスレジスタとして使用され、2つの内容を加算した16ビットアドレスがアドレッシングの宛先アドレスとして使用されます。
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
最初の2つの命令はテーブルルックアップ命令と呼ばれ、プログラムメモリ内の固定データを読み取るのに適しています。たとえば、一定の順序で配置された固定テーブルがプログラムメモリに格納され、テーブルの対応するパラメータが読み取られ、プログラムの動作中にAの動的パラメータによって決定されます。
第3条は分散転送命令です。Aのコンテンツはプログラムの実行後の動的な結果です。Aのさまざまなコンテンツに応じて、さまざまなプログラムの入り口にジャンプできます。
设(A) = 0A4H,(DPTR) = 1234H,
程序存储区
(12D8H) = 3FH,
则执行指令MOVC A,@A+DPTR后,
(A) = 3FH。
相対アドレッシング
相対アドレッシングはジャンプ命令に使用されます。このアドレッシングモードでは、転送命令のアドレス(PC値)がバイト数に加えて相対オフセット(rel)に追加され、新しい転送先アドレスが形成されるため、制御プログラムは宛先アドレスに転送します。
-
宛先アドレス=分岐命令が配置されているアドレス+分岐命令内のバイト数+ rel、
ここでオフセットrelは1バイトの補数で表される符号付き数であり、その範囲は-128〜+ 127です。 -
したがって、プログラムの転送範囲は、転送命令の次の命令の最初のアドレスに基づいており、相対オフセットは-128〜+ 127ユニットです。
假设指令SJMP 20H 存入2100H单元,
其机器码为80H 20H,
执行该指令后,程序将跳转到2122H单元取指令并执行
####ビットアドレッシングモード
ビットアドレッシングモードは、命令で指定されたオペランドがビットアドレッシング領域のビットアドレスビットであることです。
このビットには、内部RAMの20H〜2FHの16ユニットの128ビットと、ビットアドレス指定可能ないくつかの特殊機能レジスタのビットが含まれます(ユニットアドレスは8で除算できます)。
分析指令MOV C,24H.0的执行结果。
该指令的机器码为A2H 20H,相当于MOV C,20H,指令执行完成后Cy标志位为1
アドレッシングモードは、CPUが命令内のオペランド位置(アドレス)を見つける(決定する)(または
分岐の宛先アドレスを見つける(決定する))方法です。
アドレッシングモードオペランドの性質に応じて分割されたデータは、アドレッシングモードとモードアドレスをアドレス指定します。
オペランドアドレッシングモードの位置をに分割されるアドレッシングモードイミディエイト、レジスタアドレッシングモード、メモリアドレッシングは、I / Oアドレッシング。
算数指導
指示を追加
(1)キャリー加算命令なしADD(4)
ADD A,Rn ;(A)+(Rn)→A,n = 0~7
ADD A,direct ;(A)+ (direct)→A
ADD A,@Ri ;(A)+((Ri))→A,i = 0,1
ADD A,#data ;(A)+#data→A
(2)キャリー付き命令を追加
ADDC A,Rn ;(A)+(Rn)+Cy→A,n = 0~7
ADDC A,direct ;(A)+(direct)+Cy→A
ADDC A,@Ri ;(A)+((Ri))+Cy→A,i = 0,1
ADDC A,#data ;(A)+#data+Cy→A
(3)命令を1つ追加します(5)
INC A
INC Rn ;n = 0~7
INC direct
INC @Ri ;i = 0,1
INC DPTR
(4)10進調整指示(1)
```
DA A ;调整A的内容为正确的BCD码
```
減算ディレクティブ
減算命令には、借用を伴う減算命令と減算1命令が含まれます。
(1)ボロー付き減算命令(4)
SUBB A,Rn ; (A) - (Rn) - Cy→A,n = 0~7
SUBB A,direct ; (A) - (direct) - Cy→A
SUBB A,@Ri ; (A) - ((Ri)) - Cy→A,i = 0,1
SUBB A,#data ; (A) - #data - Cy→A
(2)マイナス1の指示(4項目)
DEC A ;(A) - 1→A
DEC Rn ;(Rn) - 1→Rn,n = 0~7
DEC direct ;(direct) - 1→direct
DEC @Ri ;((Ri)) - 1→(Ri),i = 0,1
####乗算および除算演算命令
(1)乗算命令(1)
MUL AB ;A×B→BA
(2)除算指導(1)
DIV AB ;A÷B,商→A,余数→B
論理演算とシフト命令
逻辑与指令
ANL A,Rn ;(A)∧(Rn)→A,n = 0~7
ANL A,direct ;(A)∧(direct)→A
ANL A,#data ;(A)∧#data→A
ANL A,@Ri ;(A)∧((Ri))→A,i = 0~1
ANL direct,A ;(direct)∧(A)→direct
ANL direct,#data ;(direct)∧#data→direct
逻辑或指令
ORL A,Rn ;(A)∨(Rn)→A,n = 0~7
ORL A,direct ;(A)∨(direct)→A
ORL A,#data ;(A)∨ #data→A
ORL A,@Ri ;(A)∨((Ri))→A,i = 0,1
ORL direct,A ;(direct)∨(A)→direct
ORL direct,#data ;(direct)∨#data→dire
逻辑异或指令
XRL A,Rn ;(A) (Rn)→A,n = 0~7
XRL A,direct ;(A) (direct)→A
XRL A,@Ri ;(A) ((Ri))→A,i = 0,1
XRL A,#data ;(A) #data→A
XRL direct,A ;(direct) (A)→direct
XRL direct,#data ;(direct) #data →direct
アキュムレータの「クリア」および「リバース」命令
(1)CLR A
この命令の機能は、アキュムレータAを "0"にクリアすることです。これは、Cy、Ac、OVなどのフラグには影響しません。
(2)CPL A
この命令の機能は、Cy、Ac、およびOVの符号に影響を与えることなく、アキュムレータAをビットごとに反転させることです。
####シフト命令
- 左回転命令
RL A
- キャリー付き左キャリーシフト命令
RLC A
- 右循環シフト命令
RR A
- キャリー付き右キャリーシフト命令
RRC A
- アキュムレータニブルスワップ命令
SWAP A
###制御転送命令
無条件分岐命令
长转移指令 LJMP addr16 ;addr16 → PC
短转移指令 AJMP addr11 ;(PC)+ 2→PC,addr11→PC10~0, PC15~11不变
相对转移指令 SJMP rel ;(PC)+2→PC,(PC)+ rel→PC
间接跳转指令(散转移指令)JMP @A+DPTR ;(PC)+1→PC,(A)+(DPTR)→PC
条件付き分岐命令
(1)累加器A判零条件转移指令
JZ rel ;若(A) = 0,则PC+2+rel→PC
;否则,PC+2→PC
JNZ rel ;若(A) ≠ 0,则PC+2+rel→PC
;否则,PC+2→PC
(2)比较条件转移指令
CJNE A,direct,rel ;若(A) ≠ (direct),则PC+3+rel→PC
;否则,PC+3→PC
CJNE A,#data,rel ;若(A) ≠ data,则PC+3+rel→PC
;否则,PC+3→PC
CJNE Rn,#data,rel ;若(Rn) ≠ data,则PC+3+rel→ PC
;否则,PC+3→PC
CJNE @Ri,#data,rel ;若((Ri)) ≠ data,则PC+3+rel→PC
;否则,PC+3→PC
(3)减1条件转移指令
DJNZ Rn,rel ;(Rn)-1→Rn
;若(Rn) ≠ 0,则PC+2+rel→PC
;否则,PC+2→PC
DJNZ direct,rel ;(direct)-1→direct
;若(direct) ≠ 0,则PC+3+rel→PC
;否则,PC+3→PC
サブルーチン呼び出しと戻り命令
① 长调用指令
LCALL addr16 ;(PC)+3→PC
;(SP)+1→SP,PC7~0→(SP)
;(SP)+1→SP,PC15~8→(SP)
;addrl6→PC
② 绝对调用指令
ACALL addr11 ;(PC)+2→PC
;(SP)+1→SP,PC7~0→(SP)
;(SP)+1→SP,PC15~8→(SP)
;addr11→PC10~0,PC15~11不变
RET ;((SP))→PC15~8,(SP)-1→SP
;((SP))→PC7~0,(SP)-1→SP
割り込み復帰命令
RETI ;((SP))→PC15~8,(SP)-1→SP
;((SP))→PC7~0,(SP)-1→SP
###操作指示なし
NOP ;(PC)+1→PC
ビット操作命令
-
ビット転送命令(2)
MOV C、ビット;(ビット)→Cy
MOVビット、C; Cy→(ビット) -
位置ビット/リセットコマンド(4)
CLR C; 0→Cy
CLRビット; 0→ビット
SETB C; 1→Cy
SETBビット; 1→ビット -
ビット演算命令
ANL C、bit;(Cy)∧(ビット)→Cy
ANL C、/ bit;(Cy)
∧ORL C、bit;(Cy)∨(ビット)→Cy
ORL C、/ bit;(Cy )∨
-
ビット条件付き分岐命令
JC rel; Cy = 1の場合、(PC)+ 2 + re→PC
;それ以外の場合、(PC)+ 2→PC
JNC rel; Cy = 0の場合、(PC)+ 2 + re→PC
;それ以外の場合、( PC)+ 2→PC
JBビット、rel;(ビット)= lの場合、(PC)+ 3 + re→PC
;それ以外の場合、(PC)+ 3→PC
JNBビット、rel;(ビット)= 0の場合、次に、(PC)+ 3 + re→PC
;それ以外の場合、(PC)+ 3→PC
JBCビット、rel;(ビット)= 1の場合、(PC)+ 3 + re→PC、0→ビット
;それ以外の場合、( PC)+ 3→PC