검색결과 리스트
글
[[볼때 관점]]
명령어 비트와 사이클 부분을 중요하게 볼 필요가 있다.
비트는 명령어 자체만의 비트..즉 오퍼랜드는 제외..
사이클은 CPU 내부 펄스 사이클
메모리에서 읽어드리는 경우는 읽어드리는 과정이 포함됨으로 최소 2사이클 이상이 됨을 주의해볼 필요가 있다.
Coprocessor 부분을 이용하는 연산의 경우도 꽤나 많은 사이클이 걸린다.
결국, 메모리보다 Coprocessor부분이 많은 실행 소요시간을 차지한다.
명령어 | 오 퍼 랜 드 | 설 명 | 바이트 | 사이클 |
Arithmetic Operations (산술 연산 명령어) | ||||
ADD | A, Rn | Acc에 레지스터 Rn의 값을 더함 | 1 | 1 |
A, direct | Acc에 direct 번지의 값을 더함 | 2 | 1 | |
A, @Ri | Acc에 Ri가 가리키는 번지의 값을 더함 | 1 | 1 | |
A, #data | Acc에 data(상수) 값을 더함 | 2 | 1 | |
ADDC | A, Rn | Acc에 레지스터 Rn의 값과 자리올림수를 함께 더함 | 1 | 1 |
A, direct | Acc에 direct 번지의 값과 자리올림수를 함께 더함 | 2 | 1 | |
A, @Ri | Acc에 Ri가 가리키는 번지의 값과 자리올림수를 함께 더함 | 1 | 1 | |
A, #data | Acc에 data(상수) 값과 자리올림수를 함께 더함 | 2 | 1 | |
SUBB | A, Rn | Acc에서 레지스터 Rn의 값과 빌림수를 함께 뺌 | 1 | 1 |
A, direct | Acc에서 direct 번지의 값과 빌림수를 함께 뺌 | 2 | 1 | |
A, @Ri | Acc에서 Ri가 가리키는 번지의 값과 빌림수를 함께 뺌 | 1 | 1 | |
A, #data | Acc에서 data(상수) 값과 빌림수를 함께 뺌 | 2 | 1 | |
INC | A | Acc의 값을 1 증가 | 1 | 1 |
Rn | 레지스터 Rn의 값을 1 증가 | 1 | 1 | |
direct | direct 번지의 값을 1 증가 | 2 | 1 | |
@Ri | Ri가 가리키는 번지의 값을 1 증가 | 1 | 1 | |
DEC | A | Acc의 값을 1 감소 | 1 | 1 |
Rn | 레지스터 Rn의 값을 1 감소 | 1 | 1 | |
direct | direct 번지의 값을 1 감소 | 2 | 1 | |
@Ri | Ri가 가리키는 번지의 값을 1 감소 | 1 | 2 | |
MUL | AB | A, B레지스터를 곱하여 B에 상위, A에 하위 8비트 저장 | 1 | 4 |
DIV | AB | A⁒B를하여 A레지스터에 몫, B레지스터에 나머지 저장 | 1 | 4 |
DA | A | Acc의 값을 BCD코드 형태로 변환 | 1 | 1 |
Logical Operations (논리 연산 명령어) | ||||
ANL | A, Rn | Acc와 레지스터 Rn의 값을 AND 연산 | 1 | 1 |
A, direct | Acc와 direct 번지의 값을 AND 연산 | 2 | 1 | |
A, @Ri | Acc와 Ri가 가리키는 번지의 값을 AND 연산 | 1 | 1 | |
A, #data | Acc와 data(상수) 값을 AND 연산 | 2 | 1 | |
direct, A | direct 번지의 값과 Acc를 AND 연산 | 2 | 1 | |
direct, #data | direct 번지의 값과 data(상수) 값을 AND 연산 | 3 | 2 | |
ORL | A, Rn | Acc와 레지스터 Rn의 값을 OR 연산 | 1 | 1 |
A, direct | Acc와 direct 번지의 값을 OR 연산 | 2 | 1 | |
A, @Ri | Acc와 Ri가 가리키는 번지의 값을 OR 연산 | 1 | 1 | |
A, #data | Acc와 data(상수) 값을 OR 연산 | 2 | 1 | |
direct, A | direct 번지의 값과 Acc를 OR 연산 | 2 | 1 | |
direct, #data | direct 번지의 값과 data(상수) 값을 OR 연산 | 3 | 2 | |
XRL | A, Rn | Acc와 레지스터 Rn의 값을 EX-OR 연산 | 1 | 1 |
A, direct | Acc와 direct 번지의 값을 EX-OR 연산 | 2 | 1 | |
A, @Ri | Acc와 Ri가 가리키는 번지의 값을 EX-OR 연산 | 1 | 1 | |
A, #data | Acc와 data(상수) 값을 EX-OR 연산 | 2 | 1 | |
direct, A | direct 번지의 값과 Acc를 EX-OR 연산 | 2 | 1 | |
direct, #data | direct 번지의 값과 data(상수) 값을 EX-OR 연산 | 3 | 2 | |
CLR | A | Acc를 클리어 시킴 | 1 | 1 |
CPL | A | Acc의 값을 컴플리먼트(1의 보수) 시킴 | 1 | 1 |
RL | A | Acc의 값을 왼쪽으로 로테이트(회전) 시킴 | 1 | 1 |
RLC | A | Acc의 값을 캐리와 함께 왼쪽으로 로테이트(회전) 시킴 | 1 | 1 |
RR | A | Acc의 값을 오른쪽으로 로테이트(회전) 시킴 | 1 | 1 |
RRC | A | Acc의 값을 캐리와 함께 오른쪽으로 로테이트(회전) 시킴 | 1 | 1 |
SWAP | A | Acc의 값의 상·하위 값을 교체시킴 | 1 | 1 |
Data Transfer (데이터 이동 명령어) | ||||
MOV | A, Rn | 레지스터 Rn의 값을 Acc에 이동시킴 | 1 | 1 |
A, direct | direct 번지의 값을 Acc에 이동시킴 | 2 | 1 | |
A, @Ri | Ri가 가리키는 번지의 값을 Acc에 이동시킴 | 1 | 1 | |
Rn, #data | data(상수)의 값을 레지스터 Rn에 이동시킴 | 2 | 1 | |
Rn, A | Acc의 값을 레지스터 Rn에 이동시킴 | 1 | 1 | |
Rn, direct | direct 번지의 값을 레지스터 Rn에 이동시킴 | 2 | 2 | |
Rn, #data | data(상수)의 값을 레지스터 Rn에 이동시킴 | 2 | 1 | |
direct, A | Acc의 값을 direct 번지로 이동시킴 | 2 | 1 | |
direct, Rn | 레지스터 Rn의 값을 direct 번지로 이동시킴 | 2 | 2 | |
direct, direct | direct 번지의 값을 direct 번지로 이동시킴 | 3 | 2 | |
direct, @Ri | Ri가 가리키는 번지의 값을 direct 번지로 이동시킴 | 2 | 2 | |
direct, #data | data(상수)의 값을 direct 번지로 이동시킴 | 3 | 2 | |
@Ri, A | Acc의 값을 Ri가 가리키는 번지로 이동시킴 | 1 | 1 | |
@Ri, direct | direct 번지의 값을 Ri가 가리키는 번지로 이동시킴 | 2 | 2 | |
@Ri, #data | data(상수)의 값을 Ri가 가리키는 번지로 이동시킴 | 2 | 1 | |
DPTR, #data16 | 16bit data(상수)의 값을 DPTR로 이동시킴 | 3 | 2 | |
MOVC | A, @A+DPTR | Acc에 Acc+DPTR이 가리키는 번지의 값을 이동시킴 | 1 | 2 |
A, @A+PC | Acc에 Acc+PC가 가리키는 번지의 값을 이동시킴 | 1 | 2 | |
MOVX | A, @Ri | Acc에 Ri가 가리키는 외부 번지의 값을 이동시킴 | 1 | 2 |
A, @DPTR | Acc에 DPTR이 가리키는 외부 번지의 값을 이동시킴 | 1 | 2 | |
@Ri, A | Ri가 가리키는 외부 번지에 Acc의 값을 이동시킴 | 1 | 2 | |
@DPTR, A | DPTR이 가리키는 외부 번지에 Acc의 값을 이동시킴 | 1 | 2 | |
PUSH | direct | direct 번지의 값을 스택에 넣음 | 2 | 2 |
POP | direct | 스택의 SP가 지시하는 위치의 값을 꺼내 direct 번지에 넣음 | 2 | 2 |
XCH | A, Rn | Acc의 값과 레지스터 Rn의 값을 교환 | 1 | 1 |
A, direct | Acc의 값과 direct 번지의 값을 교환 | 2 | 1 | |
A, @Ri | Acc의 값과 Ri가 가리키는 번지의 값을 교환 | 1 | 1 | |
XCHD | A, @Ri | Acc의 값과 Ri가 가리키는 번지의 값의 하위 4bit 교환 | 1 | 1 |
Boolean Variable Manipulation (불 대수 처리 명령어) | ||||
CLR | C | 캐리 플래그를 클리어(0) 시킴 | 1 | 1 |
bit | bit 어드레스의 값을 클리어(0) 시킴 | 2 | 1 | |
SETB | C | 캐리 플래그를 셋(1) 시킴 | 1 | 1 |
bit | bit 어드레스의 값을 셋(1) 시킴 | 2 | 1 | |
CPL | C | 캐리 플래그를 컴플리먼트(1의 보수) 시킴 | 1 | 1 |
bit | bit 어드레스의 값을 컴플리먼트(1의 보수) 시킴 | 2 | 1 | |
ANL | C, bit | 캐리 플래그와 bit 어드레스의 값을 AND 시킴 | 2 | 2 |
C, /bit | 캐리 플래그와 bit 어드레스의 컴플리먼트 값을 AND 시킴 | 2 | 2 | |
ORL | C, bit | 캐리 플래그와 bit 어드레스의 값을 OR 시킴 | 2 | 2 |
C, /bit | 캐리 플래그와 bit 어드레스의 컴플리먼트 값을 OR 시킴 | 2 | 2 | |
MOV | C, bit | 캐리 플래그에 bit 어드레스의 값을 이동시킴 | 2 | 1 |
bit, C | bit 어드레스에 캐리 플래그의 값을 이동시킴 | 2 | 2 | |
Program And Machine Control (서브루틴 / 분기 명령어) | ||||
ACALL | addr11 | 2Kbyte (2048 byte) 내의 절대 콜 (서브루틴) | 2 | 2 |
LCALL | addr16 | 롱 콜 (서브루틴) | 3 | 2 |
RET |
| 서브루틴의 복귀 | 1 | 2 |
RET1 |
| 인터럽트로부터의 복귀 | 1 | 2 |
AJMP | addr11 | 2Kbyte (2048 byte) 내의 절대 점프 | 2 | 2 |
LJMP | addr16 | 롱 점프 | 3 | 2 |
SJMP | rel | 현재 PC에 변위(rel : -128∼128)를 더한 위치로 점프 | 2 | 2 |
JMP | @A+DPTR | Acc와 DPTR의 값을 더한 주소로 점프 | 1 | 2 |
JZ | rel | Acc가 0이면 현재 PC에 변위(rel : -128∼128)를 더한 위치로 점프 | 2 | 2 |
JNZ | rel | Acc가 0이 아니면 PC에 변위(rel : -128∼128)를 더한 위치로 점프 | 2 | 2 |
JC | rel | 캐리 플래그가 1이면 PC에 변위(rel : -128∼128)를 더한 위치로 점프 | 2 | 2 |
JNC | rel | 캐리 플래그가 0이면 PC에 변위(rel : -128∼128)를 더한 위치로 점프 | 2 | 2 |
JB | bit, rel | 비트 어드레스가 셋(1) 상태이면 PC에 변위를 더한 위치로 점프 | 3 | 2 |
JNB | bit, rel | 비트 어드레스가 셋(1) 상태가 아니면 PC에 변위를 더한 위치로 점프 | 3 | 2 |
JBC | bit, rel | 비트 어드레스가 셋(1) 상태이면 PC에 변위를 더한 위치로 점프 & 비트 클리어(0) | 3 | 2 |
CJNE | A, direct, rel | Acc와 direct 번지의 값을 비교하여 다르면 PC에 변위를 더한 위치로 점프 | 3 | 2 |
A, #data, rel | Acc와 data(상수) 값을 비교하여 다르면 PC에 변위를 더한 위치로 점프 | 3 | 2 | |
Rn, #data, rel | 레지스터 Rn과 data(상수) 값을 비교하여 다르면 PC에 변위를 더한 위치로 점프 | 3 | 2 | |
@Ri, #data, rel | Ri가 가리키는 값과 data(상수) 값을 비교하여 다르면 PC에 변위를 더한 위치로 점프 | 3 | 2 | |
DJNZ | Rn, rel | 레지스터 Rn값을 1 감소시키고 PC에 변위를 더한 위치로 점프 | 2 | 2 |
direct, rel | direct 번지의 값을 1 감소시키고 PC에 변위를 더한 위치로 점프 | 3 | 2 | |
NOP |
| 아무 처리도 하지 않음 | 1 | 1 |
오퍼 랜드의 어드레스 모드 설명 | ||||
Rn | 메모리 어드레스 00∼1FH / 범용 레지스터 / R0, R1은 메모리 어드레스 포인터로 사용 / R3∼R7은 범용 | |||
direct | 메모리 어드레스 20H∼2FH / 내부 데이터 메모리 (16byte = 128bit) / | |||
@Ri | 내부 데이터 메모리의 간접 번지 지정 / R0, R1 이용 | |||
#data | 8bit 상수 데이터 | |||
#data16 | 16bit 상수 데이터 | |||
bit | 비트 어드레스 영역의 비트 번호 | |||
addr16 | LCALL과 LJMP에서 사용하는 64Kbyte 내의 프로그램 메모리 어드레스 | |||
addr11 | ACALL과 AJMP에서 사용하는 2Kbyte 내의 프로그램 메모리 어드레스 | |||
rel | SJMP등에서 사용하는 -128∼128byte 사이의 어드레스 변위 |
RECENT COMMENT