전체 : 4,150,784 명
어제 : 0 명
오늘 : 0 명

8051 어셈블리언어 해석[2]

Mrsa | 2007.12.10 17:02 | 조회 7756

8051 어셈블리 명령어

[[볼때 관점]]

명령어 비트와 사이클 부분을 중요하게 볼 필요가 있다.

비트는 명령어 자체만의 비트..즉 오퍼랜드는 제외..

사이클은 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 사이의 어드레스 변위

twitter facebook me2day 요즘
좋은 정보 감사드려요~ 공부하는데 많이 도움이 될 거 같아요^^

좋은 정보 감사드려요~ 공부하는데 많이 도움이 될 거 같아요^^

02.15 08:31 | isac님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
하하 대단하신듯 ㄷㄷ;

하하 대단하신듯 ㄷㄷ;

11.01 19:18 | zhd5050님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
킁 어려움 ㅠ
킁 어려움 ㅠ
02.23 17:52 | lexlsor님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
ㅡㅡ; 어렵당..
ㅡㅡ; 어렵당..
03.12 13:26 | 두리님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다 -_-;
감사합니다 -_-;
04.08 12:57 | IDA님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
강의 감사합니다.
강의 감사합니다.
05.08 13:20 | 꽈똬와뽜쏴님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다;;
감사합니다;;
05.11 12:26 | KhanK님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
이거 다 왜워야 하나요?>
이거 다 왜워야 하나요?>
06.13 18:14 | 마우스스크롤님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
컥..이걸전부암기해야되나;;
컥..이걸전부암기해야되나;;
06.16 19:49 | JungMin님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
아 점점 이해 되요! ㅎㅎ
아 점점 이해 되요! ㅎㅎ
08.02 14:48 | 젤라존님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다

감사합니다

01.03 15:18 | ReDMaker님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
어려운데 일단 감사 합니다.

어려운데 일단 감사 합니다.

01.05 05:27 | hanasi님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
좋은 정보 감사합니다.

좋은 정보 감사합니다.

01.22 11:38 | 고음불가님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
필요할때마다 참고해서 코딩하다보면 자연 스럽게 외워지던데..^^;

필요할때마다 참고해서 코딩하다보면 자연 스럽게 외워지던데..^^;

02.03 21:00 | psjump님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
자료 감사합니다.

자료 감사합니다.

02.12 23:42 | 공돌이pooh님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
어렵군요..;;

어렵군요..;;

04.05 10:34 | 작은여우님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
어렵네요... 감사합니다.
어렵네요... 감사합니다.
06.05 19:33 | 텐더리님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
감사합니다^^

감사합니다^^

12.17 18:50 | 겨울섬님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
좋은 내용 감사합니다 ^^

좋은 내용 감사합니다 ^^

12.29 17:32 | 이엔님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
로우레베류ㅠㅠㅠㅠㅠ열심히배워야대는데..

로우레베류ㅠㅠㅠㅠㅠ열심히배워야대는데..

12.31 15:52 | SJsujeong님 | 신고 | 수정 | 삭제
댓글 0
입력상자 늘리기
처음페이지이전 10 페이지12다음 10 페이지마지막페이지
댓글쓰기 - 로그인한 후 댓글작성권한이 있을 경우 이용하실 수 있습니다.

비밀번호 확인

댓글 등록시에 입력했던 비밀번호를 입력해 주세요.
26개(1/2페이지)
rss
어셈블리언어
번호 제목 작성자 작성일 조회
26 push 명령어 tip[2] 휘바골드 2013.02.22 1476
25 비베이용 강좌 2 kane0202 2012.12.23 2061
24 비베 6.0 기초강좌[2] kane0202 2012.12.23 2300
23 Carry VS Overflow Flag 개념 잡기.[10] 마플 2012.06.02 9211
22 [기초]간과하기 쉬운 것들...[27] 쿨러 2011.10.13 8502
21 [중급]어셈블리어의 CPU레지스터[17] 오타해커 2011.08.18 9437
20 [고급]ReaD Time Stamp Counter (RDTSC) 명령어[2] Sone 2010.02.03 9994
19 [고급]PC ASM첨부파일[25] 디코 2009.12.23 9215
18 [기초]어셈블리로 swap 함수![8] 룰루라라라 2010.07.17 9146
17 [기초]김병희님 강좌입니다.첨부파일[101] 공돌이pooh 2010.02.14 10994
16 [기초]LEA 명령어 강좌[9] 우준 2010.01.17 10238
15 [기초][PDF] 어셈블리어의 기초.첨부파일[81] 프로그래밍 2009.06.02 18364
14 [기초]8051 어셈블리언어[18] Mrsa 2009.04.02 7709
13 [기초]ASM 강좌첨부파일[61] Нyan™ 2008.04.21 9923
12 [기초]Pop 문 정리[12] EROS 2008.04.01 7943
11 [기초]Mov 문 정리[14] EROS 2008.04.01 7426
10 [기초]Call 문 정리[18] EROS 2008.04.01 8379
9 [기초]CMP 문 정리[16] EROS 2008.04.01 8393
8 [기초]Jxx 명령어 종합[26] EROS 2008.04.01 8959
>> [기초]8051 어셈블리언어 해석[2][26] Mrsa 2007.12.10 7757
처음페이지이전 10 페이지12다음 10 페이지마지막페이지