(1) 주소지정방식 Address Mode 메모리접근 분기주소 2. 8051 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data Memory 외부 Data Memory (2) 명령어세트 - 8051 명령어는 5 가지로분류, 51 종류명령, 주소지정과조합하여 111 명령어 + 데이터전송명령 + 수치연산명령 + 논리연산명령 + 비트조작명령 + 분기명령 - 어셈블리어에서최대 4 개 Operand 사용 - 38 -
-<< 8051명령일람표 >>- 전송 / 스택 / 교환 / 가감보수 / 증감 / 승제 / 논리 / 회전 / 비트 동작 Mnemonic & Operand OP 길이 실행 Operation Flag C A V P 전송 MOV A,<#data8,@R01,Ri,adrs> 74 E6 E7 EX E5 12 1 A <data8,[r01],ri,[adrs]> MOV <@R01>,<A,#data8,adrs> F6 76 A6 F7 77 A7 12 1 [R01] <A,data8,[adrs]> MOV Ri,<A,#data8,adrs> FX 7X AX 12 1 Ri <A,data8,[adrs]> MOV adrs,a F5 2 1 [adrs] A MOV adrs, <#data8,@r01,ri,adrs> 75 86 87 8X 85 23 2 [adrs] <data8,[r01],ri,[adrs]> MOV DPTR,#data16 90 3 2 DPTR #data16 MOVC A,<@A+DPTR,@A+PC> 93 83 1 2 A <[A+DPTR],[A+PC + ]> MOVX A,<@DPTR,@R01> E0 E2 E3 1 2 A <[DPTR],[R01]> MOVX <@DPTR,@R01>,A F0 F2 F3 1 2 <[DPTR],[R01]> A 스택 <POP,PUSH> adrs D0 C0 2 2 [adrs] [SP - ], [ + SP] [adrs] 교환 XCH A,<@R01,Ri,adrs> C6 C7 CX C5 12 1 A <[R01],Ri,[adrs]> XCHD A,@R01 D6 D7 1 1 A3~0 [R01]3~0 SWAP A C4 1 1 A7~4( 상위4Bits) A3~0( 하 ) 가감 ADD A,<#data8,@R01,Ri,adrs> 24 26 27 2X 25 12 1 A A+<data,[R01],Ri,[adrs]> ADDC A,<#data8,@R01,Ri,adrs> 34 36 37 3X 35 12 1 A A+C+ <data,[r01],ri,[adrs]> SUBB A,<#data8,@R01,Ri,adrs> 94 96 97 9X 95 12 1 A A-C- <data,[r01],ri,[adrs]> DA A D4 1 1 A 십진보정 ( A ) <CLR,CPL> A E4 F4 1 1 <A 0(P세트 ), A /A> 증감 DEC <A,@R01,Ri,adrs> 14 16 17 1X 15 12 1 자신 - <A,[R01],Ri,[adrs]> A INC <A,@R01,Ri,adrs> 04 06 07 0X 05 12 1 자신 + <A,[R01],Ri,[adrs]> A INC DPTR A3 1 2 DPTR + DPTR 승제 MUL AB A4 1 4 B( 상 )+A( 하 ) A*B DIV AB 84 1 4 A( 몫 )&B( 나머지 ) A/B 논리 ANL A,<#data8,@R01,Ri,adrs> 54 56 57 5X 55 12 1 A A <data,[r01],ri,[adrs]> ANL adrs,<a,#data8> 52 53 23 12 [adrs] [adrs] <A,data8> ORL A,<#data8,@R01,Ri,adrs> 44 46 47 4X 45 12 1 A A <data,[r01],ri,[adrs]> ORL adrs,<a,#data8> 42 43 23 12 [adrs] [adrs] <A,data8> XRL A,<#data8,@R01,Ri,adrs> 64 66 67 6X 65 12 1 A A <data,[r01],ri,[adrs]> XRL adrs,<a,#data8> 62 63 23 12 [adrs] [adrs] <A,data8> 회전 <RL,RR> A 23 03 1 1 7 6 5 4 3 2 1 0 <RLC,RRC> A 33 13 1 1 C 7 6 5 4 3 2 1 0 C 비트 CLR <C,Badrs> C3 C2 12 1 <C,[Badrs]> 0 C SETB <C,Badrs> D3 D2 12 1 <C,[Badrs]> 1 C MOV C, Badrs A2 92 2 12 C [Badrs] C ANL C,<Badrs,/Badrs> 82 B0 2 2 C C <[Badrs],/[Badrs]> ORL C,<Badrs,/Badrs> 72 A0 2 2 C C <[Badrs],/[Badrs]> CPL <C,Badrs> B3 B2 12 1 <C /C, [Badrs] /[Badrs]> C X NOP No OPeration <,, > 택1 / #data8,#data16 자료자신 / adrs 8bits직접주소 / / 부정 +, - 1증감 / R01 R0,R1 / Ri R0~R7 / X 1rrr (rrr=register번호) 7~0 비트No. / Badrs 비트주소 ( 내부기억20~2F 비트주소00~7F) - 39 -
반복 / 호출 / 복귀 / 분기 / 조건 동작 Mnemonic & Operand OP 길실 Flag 분기조건 { 실행 } 이행 C A V P 반복 CJNE @R01,#data,adrs B6 B7 3 2 [R01] data {C=1 <,C=0 } CJNE A,<#data8,adrs>,adrs B4 B5 3 2 A <data8,[adrs]> {C=1 <,C=0 } CJNE Ri,#data8,adrs BX 3 2 Ri data {C=1 <,C=0 } DJNZ <Ri,adrs>,adrs DX D5 23 2 <Ri,[adrs]> 0 호출 CALL 기호주소 어셈블러 : 기호 adrs11/adrs16 <ACALL adrs11, PC PC+<2,3> 1* 12 23 2 [ + SP] PC_l, [ + SP] PC_h LCALL adrs16> PC <adrs11,adrs16> 복귀 <RET, RETI> 22 32 1 2 PC_h [SP - ], PC_l [SP - ] 분기 JMP 기호주소 기호 adrs11,adrs16,adrs AJMP adrs11 2* 2 2 무조건 LJMP adrs16 02 3 2 무조건 SJMP adrs 80 2 2 무조건 JMP @A+DPTR 73 1 2 무조건분기주소 =A+DPTR 조건 J<Z,NZ> adrs 60 70 2 2 <A=0,A 0> J<C,NC> adrs 40 50 2 2 <C=1,C=0> J<B,NB> Badrs,adrs 20 30 3 2 <[Badrs]=1,[Badrs]=0> JBC [Badrs],adrs 10 3 2 [Badrs]=1 {[Badrs]=0} * adrs11 : OPcode 상위5bits + ( 하위3bits + adrs 8bits) adrs11 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 OPcode -- adrs11 분기주소 -- 3. 데이터전송명령 (1) 내부데이터메모리에서데이터전송 - Immediate 번지지정 MOV A,#33H /* '#' 없으면절대번지 MOV R0,#20H MOV DPTR,#1234H - 레지스터번지지정 + 범용 Reg. 간전송불가 (MOV R0,R1) MOV PSW,#00010000B /* 이진수, Bit3,4 = Reg.Bank 선택 MOV A,#30H MOV R5,A - 직접번지지정 + 내부데이터메모리 Acc, 범용 Reg., 내부데이터메모리00~FF MOV A,3EH MOV 30H,R7 MOV 30H,35H - 레지스터간접번지지정 + Reg. Bank 중 R0, R1만사용가능 + 1operand와 2operand 모두레지스터간접사용금지 MOV R0,#40H MOV R1,#50H MOV A,@R0 MOV @R1,#0ADH /* @-간접번지 (2) 외부데이터메모리와데이터전송 - Acc 외부데이터메모리 0000~0FFFFH - 40 -
- 외부주소는 Port2+R0, Port2+R1, DPTR 만사용 - MOVX(MOVe external) 명령사용 MOV DPTR,#2000H MOV DPTR,#2050h MOVX A,@DPTR MOVX @DPTR,A MOV R1,#20H MOV P2,#0 /* P2=Port2( 상위주소 A15~8) MOVX @R1,A (3) 프로그램메모리와데이터전송 - Acc [DPTR+Acc], [PC+Acc] - MOVC(MOVe Code memory) 명령사용 MOV A,#1 MOV DPTR,#1000H MOVC A,@A+DPTR (4) 데이터교환명령 - XCH A,? Acc?(R0~7, @R0, @R1, 내부데이터메모리00~FF) - XCHD A,@Ri Acc의하위 4Bits @R0,@R1의하위 4Bits MOV R1,#45H XCHD A,@R0 XCHD A,@R1 4. 산술연산명령 - 증가 / 감소, 가 / 감산, 10 진보정, 승 / 제산 (1) Flag - 비트조작명령을제외한대부분 Acc의결과에대해서만 Flag를 Set/Reset한다. - CY : CarrY + 가 / 감산에서최상위자리 Carry/Borrow 발생하면 1 + Rotate에서 Bit8로사용 + 비트조작 ( 부울대수 ) 명령에서 Bit Accumulator로사용 + Carry 직접조작명령 CLR C : C 0 CPL C : C NOT(C) SETB C : C 1 - AC : Auxiliary Carry(Half Carry) + 가 / 감산에서하위 4자리에서 Carry/Borrow 발생하면 1 + 일반적으로 BCD(Binary Coded Decimal) 연산에서사용 - OV : OVerflow + 2보수가 / 감산에서 2보수범위 (-128~+127) 를넘으면 1 + 곱셈에서결과가 0FFh를넘으면 1 ( 결과 <0100H OV=0, 결과 0100H OV=1) + 나눗셈에서제수가 0이면 1 - P :Parity + Acc의내용에따라명령사이클마다 1이홀수면 1 even Parity( 짝수 ) - RS1, RS0 : Register Bank + 레지스터뱅크00~11을선택 + 사용예 MOV PSW,#18H /* Bank 3 MOV R6,A - 41 -
- F0 : General Flag + 사용자가용도에맞게소프트웨어 ( 명령 ) 적으로 Set/Reset (2) INC/DEC(INCrement, DECrement) 명령 형식 INC / DEC A, R0~R7, @R0/1, 직접 (00~FF) DPTR (INC 명령만 ) Flag P INC A, DEC A 동작 INC : 0FFH 00 / DEC : 00 0FFH (3) ADD/ADDC/SUBB(ADD, ADD with Carry, SUBtract with Borrow) 명령 형식 ADD/ADDC/SUBB A R0~R7, @R0/1, 직접 (00~FF), #data Flag C/AC/OV/P 모든연산 ADD : A A + 2오퍼랜드동작 ADDC/SUBB : A A ± C ± 2오퍼랜드 (4) DA(Decimal Adjust) 명령 형식 DA A Flag C/P DA A if A>9 && AC=0 then A A+6 동작 if AC=1 then A A+06H ( 하위 ) else if CY=1 then A A+60H ( 상위 ) (5) MUL/DIV(MULtiply, DIVide) 명령 형식 MUL / DIV AB Flag C/OV/P 동작 MUL : B( 상 )&A( 하 ) A*B / OV=1 (B&A)>0FFH DIV : A( 몫 )&B( 나머지 ) A B / if B=0 then OV 1 5. 논리연산명령 (1) ANL/ORL/XRL(ANd, OR, exclusive-or Logical) 명령 A R0~R7, @R0/1, 직접 (00~FF), #data 형식 ANL/ORL/XRL 직접 (00~FF) A, #data Flag P 위연산 ( A,{R0~R7, @R0/1, 직접 (00~FF), #data} ) 동작논리 And, Or, Exclusive-OR (2) CLR(CLeaR: 클리어 ) / CPL(ComPLement: 보수, ComPlemt Logical) 명령 형식 CLR / CPL A Flag P CLR A 동작 A 0 또는 A의1보수 - 42 -
(3) RL/RLC/RR/RRC(Rotate Left/Right with Carry) 명령 형식 RL / RLC / RR / RRC A Flag C/P RLC/RRC A 동작 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 C 7 6 5 4 3 2 1 0 C C 7 6 5 4 3 2 1 0 C (4) SWAP 명령 형식 SWAP A Flag 동작 A 7~A 4( 상위 4Bits) A 3~A 0 ( 하위 4Bits) - 43 -