z8051 명령어의이해 z명령어종류 -...

93
8051 8051 명령어 명령어 z 8051 명령어의 이해 z 명령어 종류 z 명령어 종류 [email protected] http://blog.naver.com/dolicom

Upload: others

Post on 16-Jan-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

8051 8051 명령어명령어

8051 명령어의 이해

명령어 종류명령어 종류

[email protected]://blog.naver.com/dolicom

Page 2: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

80518051 어셈블리어셈블리 언어언어8051 8051 어셈블리어셈블리 언어언어

Page 3: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

기계어기계어

기계어( )기계어(Machine Language)CPU가 직접 이해할수 있는 언어

일련의0과 1로 표시실행할명령 데이터 기억장소의주소등포함실행할명령, 데이터, 기억장소의주소등포함

하드웨어가 직접 실행 시킬 수 있는형태다양한 비트 형식 가짐다양한 비트 형식 가짐

주로 16진수로 표기2진코드로 이해하기 어려움

CPU 기종에 따라 다름

Page 4: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

프로그램 언어프로그램 언어

저급 언어 (Low Level Language)어셈블리어어셈블리어

기계어를 기호화 한 프로그램 언어

고급 언어 (High Level Langage)컴파일러 사용컴파일러 사용

C, Fortran, COBAL, Pascal

Page 5: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

어셈블리 언어어셈블리 언어

어셈블리 언어 (A bl L )어셈블리 언어 (Assembly Language)기계어와 1대1로 대응한 명령을 기술하는 언어

Mnemonic code : 니모딕코드Mnemonic code 니 딕

상징적인 연상 기호 사용, 주로 시스템 프로그래밍에 사용하드웨어 이해에 적합

CPU 개발사에 따라 독자적인 기능 가짐CPU 개발사에 따라 독자적인 기능 가짐

매크로 어셈블리 언어(Macro Assembly Language)기계어로 번역되지 않는 의사명령사용, 매크로 기능 가짐기계어 역되지 않 의사명령사용, 매 기능 가

의사(psuedo)명령=>어셈블러 직접 기계어로 번역되지 않지만번역시 어셈블러에 의해 참조

어셈블러(Assembler)어셈블러(Assembler)어셈블리 프로그램 언어로 쓰여진 소스프로그램을 번역하여기계어 프로그램을 작성해주는 프로그램

Page 6: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

8051의 명령어의 종류8051의 명령어의 종류

데이터 전송명령 : MOV

산술연산명령 ADD SUBB MUL DIV산술연산명령 : ADD, SUBB, MUL, DIV

논리연산명령 : AND, OR논리연산명령 AND, OR

비트조작명령 : RRC, RLC

( )점프명령 : JMP, JZ(조건 점프)

Page 7: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

기능별 분류기능별 분류

Page 8: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

명령어의 구조명령어의 구조

1 바이트 명령어 형식

OP 코드

2바이트 명령어

OP 코드

2바이트 명령어

OP 코드 오퍼랜드

3 바이트명령어

OP 코드 오퍼랜드

3 바이트명령어

OP 코드 오퍼랜드1 오퍼랜드2OP 코드 오퍼랜드1 오퍼랜드2

Page 9: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

주소주소 지정지정 방식방식주소주소 지정지정 방식방식

Page 10: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

주소지정방식(addressing mode)주소지정방식(addressing mode)

CPU 명령이 처리할 데이터가 저장되어있는 소스나 처리결과를 저장할 목적지를있 나 처리 과 저장 목적지지정하는 방식

유효주소(Effective Addess) 계산 방식이유효주소(Effective Addess) 계산 방식이필요

Page 11: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

주소주소 지정지정 방식방식주소주소 지정지정 방식방식

데이터데이터 전송과전송과 관련된관련된 주소주소 지정지정 방식방식

Page 12: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

주소지정방식 종류주소지정방식 종류

이미디어트 주소지정 방식이미디어트 주소지정 방식

immediate addressing mode

직접 주소지정 방식

direct addressing mode

간접 주소지정 방식

indirect addressing modeindirect addressing mode

레지스터 사용

레지스터 주소지정 방식레지스터 주소지정 방식

register addressing mode

Page 13: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

이미디어트 주소지정 방식이미디어트 주소지정 방식

MOV A,#12HA ← 12H

74 12

A 1 H

ADD A #34HADD A,#34HA ← A + 34H

24 34

MOV DPTR #1234HMOV DPTR,#1234HDPTR ← 1234H

90 12 34

Page 14: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

이미디어트 주소지정 방식 특징이미디어트 주소지정 방식 특징

오퍼랜드가 명령 코드중에 상수값으로 포함되어 있는 방식되어 있 방식

이미디어트 데이터의 앞에는 반드시 #기호를 사용한다호를 사용한다.

이미디어트 데이터는 DPTR을 제외하고는 항상 8비트이다.

Page 15: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

직접 주소지정 방식직접 주소지정 방식

MOV A,50HA ←M[50H]

E5 50

A M[50H]

ADD A,52H 25 52

A ← A + M[52H]

Page 16: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

직접 주소지정 방식 특징직접 주소지정 방식 특징

데이터가 저장된 메모리의 8 비트 주소를직접 지정하는 방식직 지정하 방식

내부 데이터 메모리의 하위 128바이트(00H 7FH)나 SFR을 액세스할 때 사용(00H∼7FH)나 SFR을 액세스할 때 사용

명령에서 오퍼랜드가 8비트 번지로 표현되므로 기계어 코드가 짧아지고, 명령의실행 속도가 빠르다실행 속도가 빠르다.

Page 17: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

간접 주소지정 방식간접 주소지정 방식

MOV A @R0 E6MOV A,@R0A ← (R0) : 내부 데이터 메모리

E6

ADD A,@R1A ← A + (R1) : 내부 데이터

27

메모리

MOVX A,@R0 E2

A ← (R0) : 외부 데이터 메모리(8비트 어드레스)

E0MOVX A,@DPTR

A ← (DPTR) : 외부 데이터메모리(16비트 어드레스)

E0

( )

Page 18: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

간접 주소지정 방식 특징간접 주소지정 방식 특징

오퍼랜드의 주소를 저장하고 있는 레지스터를오퍼랜드의 주소를 저장하고 있는 레지스터를이용하여 오퍼랜드를 간접적으로 지정하는 방식식간접 주소지정을 나타내는 레지스터의 앞에 @기호를 붙인다.내부 데이터 메모리나 외부 데이터 메모리를 액세스하는데 모두 사용레지스터로서 R0, R1이나 스택 포인터를 사용하면 오퍼랜드를 가리키는 번지가 8비트로 표현현DPTR을 사용하면 오퍼런드를 가리키는 번지

가 16비트로 표현가 16비트로 표현

Page 19: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

레지스터 주소지정 방식레지스터 주소지정 방식

MOV A,R0A ← R0

E8

xxxxx rrrA R0 xxxxx rrr

ADD A,R7 2F

A ← A + R7

Page 20: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

베이스 인덱스 주소지정 방식베이스 인덱스 주소지정 방식

MOVC A, @A+PC A <- M[A+PC]

83

A M[A PC]

MOVC A, @A+DPTRA < M[A DPTR]

93A <- M[A+DPTR]

DPTR A

주소

데이터

데이터 메모리

Page 21: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

베이스 인덱스 주소지정 방식베이스 인덱스 주소지정 방식

Based indexed addresing mode

EA = (base register) + (index register)EA (base register) + (index register)base register: DTPR, PC

i d i t Aindex register: A

외부 프로그램 메모리에 저장된 탐색표(lookup table) 참조 시 이용

Page 22: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

주소주소 지정지정 방식방식주소주소 지정지정 방식방식

점프점프 명령과명령과 관련된관련된 주소주소 지정지정 방식방식

Page 23: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

C에서 점프 예C에서 점프 예

C에서는 대표적으로 goto 사용

void main(){int cnt;

scanf (“%d”, &cnt);if (cnt > 10)

t Ski Addgoto Skip_Add;cnt += 10;

Skip Add:Skip_Add:printf(“cnt = %d₩n”, cnt);

}}

Page 24: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

상대 주소지정 방식상대 주소지정 방식

SJMP 08Hshort jump

SJMP 명령의 주소가 100H인 경우 분기되는 주소는?TargetAddress = 0102H(PC) + 08H = 010AH

0100 SJMP 08H0102 ……… <- PC

……..

010A MOV A,#10

Page 25: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

상대 주소지정 방식상대 주소지정 방식

Relative addressing mode

지금부터의 주소지정방식은 분기명령과지금부터의 주소지정방식은 분기명령과밀접한 관계

A C 8 bi i d ffEA = PC + 8 bit signed offset-128 ~ +127 범위 분기/지정

Page 26: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

절대 주소지정 방식절대 주소지정 방식

Absolute addressing mode

11 비트의 절대주소 지정PC0-10 <= absolute address

PC의 나머지 5비트(11-15)는 변경되지 않음

AJMP addrAJMP addrAbsoulute jump

Addr10-8 10101 Addr7-0

Page 27: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

절대 주소지정 방식절대 주소지정 방식

AJMP 0123H=> 3523H001 10101 0010 0011

AJMP의 주소가 8000H일때 분기되는 주소는?PC0-10 <- 123H

8123H 번지로 분기

Page 28: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

롱 주소지정 방식롱 주소지정 방식

long addressing mode

분기할 번지를 16비트 절대값으로 표현PC <= absolute address

예예LJMP 9000H ; long jump

9000H 번지로 분기9000H 번지로 분기

02 90 0002 90 00

Page 29: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

데이터데이터 전송명령전송명령데이터데이터 전송명령전송명령

Page 30: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

데이터 전송 명령 - MOV데이터 전송 명령 MOV

MOVMOV8비트 데이터 전송 (내부 RAM과 SFR)

MOV A, RnMOV A, directMOV A, @RiMOV A, #dataMOV Rn AMOV Rn, AMOV Rn, directMOV Rn, #dataMOV direct, AMOV direct, RnMOV direct, directMOV direct, @RiMOV direct #dataMOV direct, #dataMOV @Ri, AMOV @Ri, directMOV @Ri, #data

Page 31: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

MOV의 예MOV의 예

MOV A #12HMOV A,#12H

MOV A,R0

MOV R0,A

MOV A @12HMOV A,@12H

MOV A,@R0

@MOV @R1,A

MOV DPTR, A

MOV R0 R2MOV R0, R2

Page 32: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

MOVMOV

1비트 전송 - CY 플래그에MOV C,bitMOV C,bit

MOV bit,C

DPTR을 사용한 16비트 전송MOV DPTR, #data

Page 33: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

MOVX – 외부 데이터 메모리MOVX 외부 데이터 메모리

A 레지스터와 외부 메모리와의

데이터 전송데이터 전송

MOVX A, @Ri

MOVX A, @DPTR

MOVX @Ri, A

MOVX @DPTR AMOVX @DPTR, A

Page 34: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

MOVC – 프로그램 메모리MOVC 프로그램 메모리

Move Code Byte

프로그램 메모리로 부터 프로그램 코드프로그램 메모리로 부터 프로그램 코드전송

인덱스 주소 방식 만 가능인덱스 주소 방식 만 가능

MOVC A, @A+DPTR

MOVC A @A+PCMOVC A, @A+PC

Page 35: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

PUSH / POPPUSH / POP

스택( t k)에 데이터 전송스택(stack)에 데이터 전송내부 메모리를 사용하고 직접주소 방식

PUSH DPL ; DPTR -> 스택PUSH DPHPUSH DPHPUSH A ; A 레지스터 저장

POP APOP DPHPOP DPHPOP DPL

Page 36: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

PUSHPUSH

기계어 데이터를 넣으려면 PUSH 명령을 사용기계어 데이터를 넣으려면 PUSH 명령을 사용

MOV SP #5FHMOV A,#10PUSH A

PUSH A 실행 과정

주소

MOV SP,#5FH

SP

PUSH APUSH A 실행 과정

주소주소

5F 5F

60

주소SP

60

SP

60

SP5F

6010

5F

60

주소

62

6162

61

62

61

A

내부메모리

2. SP가 가리키는1. SP가 1이 자동증가

10

A

2. SP가 가리키는주소에 A=10을 넣는다.

Page 37: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

POPPOP

기계어 데이터를 꺼내려면 POP 명령을 사용기계어 데이터를 꺼내려면 POP 명령을 사용

POP A 실행 과정

읽기

POP APOP A 실행 과정

주소

60 60

SP 5F

10

주소

60 60

SP 5F

10

주소

5F

SP

5F

60

62

61

6010 60

62

61

6010

62

61

6010

10

A 레지스터

2. SP을 1 감소 한다.

62

1. SP에서 읽어A에 저장 한다.

Page 38: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

XCHXCH

A레지스터와 바이트 데이터 교환XCH A, RnXCH A, Rn

XCH A, direct

XCH A @RiXCH A, @Ri

XCH A, R0

R0

23H 56H

A R0

실행전

56H 23H실행후

Page 39: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

XCHDXCHD

하위 4비트 만 데이터 교환XCH A, @RiXCH A, @Ri

XCH A @R0XCH A, @R0

R0

23H

23H 56H

A

23H 주소실행전

26H 53H실행후

Page 40: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

산술산술 연산연산 명령명령산술산술 연산연산 명령명령

Page 41: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

Arithmetic Operations (산술 연산 명령어)

11Acc에 Ri가 가리키는 번지의 값을 더함A, @Ri

12Acc에 direct 번지의 값을 더함A, direct

11Acc에 레지스터 Rn의 값을 더함A, Rn

ADD

Arithmetic Operations (산술 연산 명령어)

11Acc에 Ri가 가리키는 번지의 값과 자리올림수를 함께 더함A @Ri

12Acc에 direct 번지의 값과 자리올림수를 함께 더함A, direct

11Acc에 레지스터 Rn의 값과 자리올림수를 함께 더함A, Rn

ADDC

12Acc에 data(상수) 값을 더함A, #data

12Acc에서 direct 번지의 값과 빌림수를 함께 뺌A, direct

11Acc에서 레지스터 Rn의 값과 빌림수를 함께 뺌A, Rn

SUBB

12Acc에 data(상수) 값과 자리올림수를 함께 더함A, #data

11Acc에 Ri가 가리키는 번지의 값과 자리올림수를 함께 더함A, @Ri

11레지스터 Rn의 값을 1 증가Rn

11Acc의 값을 1 증가A

12Acc에서 data(상수) 값과 빌림수를 함께 뺌A, #data

11Acc에서 Ri가 가리키는 번지의 값과 빌림수를 함께 뺌A, @RiSUBB

11Acc의 값을 1 감소A

11Ri가 가리키는 번지의 값을 1 증가@Ri

12direct 번지의 값을 1 증가direct

11레지스터 Rn의 값을 1 증가RnINC

41A, B레지스터를 곱하여 B에 상위, A에 하위 8비트 저장ABMUL

21Ri가 가리키는 번지의 값을 1 감소@Ri

12direct 번지의 값을 1 감소direct

11레지스터 Rn의 값을 1 감소RnDEC

11Acc의 값을 BCD코드 형태로 변환ADA

41A&#8274;B를하여 A레지스터에 몫, B레지스터에 나머지 저장ABDIV

41A, B레지스터를 곱하여 B에 상위, A에 하위 8비트 저장ABMUL

Page 42: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

연산 명령의 종류연산 명령의 종류

더하기ADD : A+operand -> A 더하기

ADDC : A+operand+CY 플래그 -> Ap 래

SUBB : A – operand – CY -> A

MUL AB : A x B > A:BMUL AB : A x B -> A:B

DIV AB : A / B -> A=몫, B=나머지

INC : 1증가 - INC A : A+1 -> A

DEC : 1 감소 – DEC A : A-1->ADEC : 1 감소 DEC A : A 1 >A

DA : BCD 조작

Page 43: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ADD/ADDC/SUBB 덧셈/뺄셈ADD/ADDC/SUBB 덧셈/뺄셈

ADD A,#32H : A + 32H -> A

ADDC A #32H : A + 32H +CY -> AADDC A,#32H : A + 32H +CY > A

SUBB A,#32H : A – 32H – CY -> A

MOV A,#5 ; 5ADD A #0FEH ; 5 + (-3) -> AADD A,#0FEH ; 5 + (-3) -> A

5 0000 0101+ (-3) 1111 1101

2 110000 0010

CY AC OV P(Even)

1 1 0 0

Page 44: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ADDC / SUBBADDC / SUBB

ADDC A,50H : A +(50H) + CY -> A

A 55A 55(50H) 4E

A A4A41010 01001010 0100

CY AC OV P(Odd)

0 1 1 1

1010 01001010 0100

SUBB A,@R0 : A -@R0 - CY -> AA 53

(50H) 37CY 1A 1B1B

CY AC OV P

0 1 0 0A 110001 10110001 1011

0 1 0 0

Page 45: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

16비트 더하기 예16비트 더하기 예

int a;int a;a = 0x1E44;a += 0x56CA;

CLR C ; CY 지우고MOV A, #44H ; 8비트 44+CAADD A, #CAHMOV R1, A ; 결과값 0EH을 R1에, 현재 CY = 1.MOV A, #1EH ; 상위 8비트 1E+56+CYMOV A, #1 H 상위 8비 1 56 CYADDC A, #56HMOV R2, A ; 상위 바이트 결과값 75H -> R2에 저장

결과 750EH은 R2:R1에 저장

Page 46: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

BCD 더하기 – DA 사용BCD 더하기 DA 사용

34d + 49d -> 83d

CLR C ; CY flag 지우기

MOV A, #34H ; A에 34 저장

ADD A, #49H ; A와 49 더하기.,

; ADD 결과 A = 7DH

DA A ; 10진수 결과를 얻기 위해DA A ; 10진수 결과를 얻기 위해

A = 83H1 결과 9보다 클 경우 +61. 결과 9보다 클 경우 +62. CY = 1 : 상위 +6

AC = 1 : 하위 +6

Page 47: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

MUL 곱셈MUL 곱셈

MUL ABAxB => B(상위 8비트) : A(하위8비트)Ax (상위 8비 ) A(하위8비 )

255넘으면 OV=1

MOV A,#31H

MOV B,#10H

MUL A,B

03H 10H

B A

03H 10H

Page 48: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

DIV 나눗셈DIV 나눗셈

DIV ABA÷B => A(몫) B(나머지)A A(몫) (나머지)

B=0, OV=1 : 결과 보증할 수 없다.

MOV A,#118

MOV B,#5

DIV A,B

23 3

A B

OV=023 3 OV 0

Page 49: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

논리논리 연산연산 명령명령논리논리 연산연산 명령명령

Page 50: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ANL/ORL - AND와 ORANL/ORL AND와 OR

AND 명령 OR 명령

ANL A, Rn ORL A, Rn

AND 명령 OR 명령

ANL A, direct

ANL A, @Ri

ORL A, direct

ORL A, @RiANL A, @Ri

ANL A, #data

ANL direct A

, @

ORL A, #data

ORL direct AANL direct, A

ANL direct, #data

ORL direct, A

ORL direct, #data

ANL C, bit

ANL C /bi

ORL C, bit

ORL C /bitANL C, /bit ORL C, /bit

Page 51: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ANL/ORL 예ANL/ORL 예

ANL A #00001000BANL A,#00001000B

MOV A,#01110111B

ANL A,#00001000B

실행후 A 00000000B

MOV A,#01110111B

ORL A #00001000BORL A,#00001000B

실행후 A 01111111B

Page 52: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

XRL - XOR연산XRL XOR연산

XRL A,@R0

실행전

A : 10010001B

@R0 : 11100011B@R0 : 11100011B

실행후 A : 01110010B

Page 53: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CLR (Clear) / CPL (1의 보수)CLR (Clear) / CPL (1의 보수)

CLR A : A 레지스터를 0으로 지운다.

CPL A : A레지스터의 값을 보수 연산

2의 보수 예2의 보수 예

CPL A ; 1의 보수

INC A ; 1의 보수 + 1

Page 54: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

로테이트 명령로테이트 명령

RR : 오른쪽으로 1비트 쉬프트 한다.

→ 1111 1101 →

RL : 왼쪽으로 1비트 쉬프트 한다RL : 왼쪽으로 1비트 쉬프트 한다.

← 1111 1101 ←

Page 55: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

로테이션 명령에서 carry와 함께로테이션 명령에서 carry와 함께

RRC A : RRC (Rotate Right with Carry)

→ 1111 1101 → C → C=1A레지스터

RLC A : RLC (Rotate Left with Carry)RLC A : RLC (Rotate Left with Carry)

A레지스터

← C ← 1111 1101 ← C=0

1111 1010실행후 C=1

Page 56: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

비트비트 조작조작 명령명령비트비트 조작조작 명령명령

Page 57: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CLR – 비트 & CY 지우기CLR 비트 & CY 지우기

CLR P1.1 Port 1의 1비트를 지운다.Port 1의 1비 를 지운다.

CLR C CY 플래그를 지운다CLR C – CY 플래그를 지운다.

Page 58: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

SETBSETB

SETB A.2A레지스터의 3번째 비트를 지운다.A레지 터의 3번째 비 를 지운다.

SETB CSETB CCY 플래그를 지운다.

Page 59: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

프로그램프로그램 실행실행 위치위치 제어제어 명령명령프로그램프로그램 실행실행 위치위치 제어제어 명령명령

Page 60: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

점프 명령점프 명령

무조건 점프(U diti l B h)무조건 점프(Unconditional Branch)ajmp addr11 ; 절대 번지로 점프ljmp addr16 ; 절대번지(16비트) 점프 - long jumpsjmp rel ; 상대번지 점프 - short jumpjmp @A+DPTR ; 간접번지 지정 점프

조건 점프(Conditional branch)조건 점프(Conditional branch)jz, jnz rel ; 상대 주소로 점프 -short conditionaldjnz rel ; 감소 후 0이면 점프cjne rel ; 비교 후 같지 않으면 점프cjne rel ; 비교 후 같지 않으면 점프

Subroutine Callacall addr11 ; 절대번지(11비트) 서브루틴 콜lcall addr16 ; long 절대번지 서브루틴 콜(Subroutine Call)ret ; 서브루틴으로 부터 복귀 (return)reti ; 인터럽트 처리 후 복귀

Page 61: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

프로그램 실행 위치 제어 명령프로그램 실행 위치 제어 명령

무조건무조건 점프점프 명령명령무조건무조건 점프점프 명령명령

ajmp addr11 ljmp addr16ljmp addr16sjmp rel jmp @A+DPTR

Page 62: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

AJMP – 절대번지(11비트) 점프AJMP 절대번지(11비트) 점프

11비트로 번지 표현 (점프 영역 2Kbyte 범위)나머지 상위 5비트(A[15:11])는 그대로 유지

2바이트 명령어로 표현

A[15:11] A[10:0]

Addr10-8 10101 Addr7-0

PC

명령어 2바이트

A[15:11] A[10:0]PC

A[15:11] A[10:8] A[7:0]점프 주소16비트16비

PC

Page 63: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

LJMP – Long JumpLJMP Long Jump

점프할 주소 16비트 사용(64K byte 범위)

3바이트 명령어 (2바이트 주소)3바이트 명령어 (2바이트 주소)

LJMP 점프주소 상위 점프주소 하위

[ ]PC A[15:0]

Page 64: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

JMP – 절대 번지 점프JMP 절대 번지 점프

JMP addr16LJMP와 같이 16비트 주소로 점프JMP와 같이 16비 주 점

JMP 0030H – 0030H 번지로 점프

JMP @A + DPTR – Indirect Jump

점프 주소 = DPTR + A레지스터 값

Page 65: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

SJMP – Short JumpSJMP Short Jump

8비트 부호 옵셋트 상대 주소8비트 부호 옵셋트 상대 주소

(8bit signed offset relative)

2바이트 명령어

주소 값은 PC와 상대 주소값을 더 한다.

예) SJMP 0FEH 다음 명령이 PC가 0015H에 있다면

PC 0015

상대주소 FFFE

점프할 주소 0013

Page 66: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

SJMP 어셈블리 예SJMP 어셈블리 예

LOOP2:

MOV R7,#50,

. . .

80E2 SJMP LOOP2 ; PC+FFE2 >PC80E2 SJMP LOOP2 ; PC+FFE2->PC

80FE SJMP $

* $ : PC+FFFE -> PC* $ : PC+FFFE > PC

대기 계속 같은 명령 수행

Page 67: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

프로그램 실행 위치 제어 명령프로그램 실행 위치 제어 명령

조건조건 점프점프 명령명령조건조건 점프점프 명령명령

JZ/JNZ relDJNZ relDJNZ relJC / JNC relCJNE rel

Page 68: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

조건 점프 명령조건 점프 명령

일때점JZ A=0 일때점프JNZ A !=0 일때점프DJNZ 감소후, A !=0 일때점프CJNE A,byte A != byte 일때점프, y y 일때점

CJNE reg,#data byte != #data 일때점프JC CY=1일때점프JC CY=1 일때점프JNC CY=0 일때점프

일때점JB Bit = 1 일때점프JNB Bit = 0 일때점프JBC Bit = 1 일때점프후, 비트클리어(clear)

Page 69: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

jz jnzjz, jnz

Z(zero) : A 레지스터 값이 0 인가?

JZ : A 레지스터 값이 0이면 점프 한다JZ : A 레지스터 값이 0이면 점프 한다.2바이트 명령

주소는 SJMP와 같이 8비트 상대 주소주소는 SJMP와 같이 8비트 상대 주소

현재 PC에서 -128 ~ 127 번지 내에서 점프

JNZ : A 레지스터 값이 0이 아닐 때 점프한다한다.

Page 70: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

JC / JNC – 캐리JC / JNC 캐리

캐리플래그(CY)의 값에 따라 점프 결정

JC : 만약 CY=1이면 점프JC : 만약 CY 1이면 점프

JNC : 만약 CY=0이면 점프2바이트 명령

주소는 SJMP/JZ/JNZ와 같이 8비트 상대 주소

현재 PC에서 -128 ~ 127 번지 내에서 점프현재 PC에서 1 8 1 7 번지 내에서 점

Page 71: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CJNE relCJNE rel

두 값을 비교 후, 값이 같지 않으면 점프

NE : Not Equal – 같지 않으면NE : Not Equal 같지 않으면

cjne A, direct, rel

cjne Rn, #data, rel

cjne @Rn #data relcjne @Rn, #data, rel

CJNE A 20H LOOPCJNE A, 20H, LOOP CJNE A,#10,LOOPCJNE R0,#10,LOOPCJNE R0,#10,LOOPCJNE @R0,#10,LOOP

Page 72: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

JB / JNB / JBCJB / JNB / JBC

JB 정의된 플래그의 비트가 1이면 점프JB : 정의된 플래그의 비트가 1이면 점프

JNB : 정의된 플래그의 비트가 0이면 점프(예)

* JB F0,LOOPEND – F0플래그가 1이면 점프

JNB F0 $ F0가 1일때 까지 이 명령 실해 대기 할* JNB F0,$ - F0가 1일때 까지 이 명령 실해 – 대기 할때

* JB ACC.2,LOOP – A레지스터의 3번째 비트가 1이면 JB ACC.2,LOOP A레지스터의 3번째 비트가 1이면점프

JBC : 사용자 플래그가 1이면 점프하고, 그비트를 클리어 한다.

Page 73: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

DJNZ – 반복 루프를 구성할 때DJNZ 반복 루프를 구성할 때

1을 감소하고 0이 아니면 점프1을 감소하고, 0이 아니면 점프

DJNZ Rn, rel

DJNZ direct, relMOV DPTR #2010HMOV DPTR,#2010HCLR AMOV R0,AMOV R4,#5

LOOP:MOV A @DPTRMOV A,@DPTRADD A,R0MOV R0 AMOV R0,AINC DPTRDJNZ R4,LOOP

Page 74: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

프로그램 실행 위치 제어 명령프로그램 실행 위치 제어 명령

서브루틴서브루틴 콜콜 명령명령서브루틴서브루틴 콜콜 명령명령

ACALL addr11 LCALL addr16LCALL addr16RET

Page 75: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ACALL addr11ACALL addr11

2바이트 명령

2K 바이트 내의 서브루틴 호출 가능2K 바이트 내의 서브루틴 호출 가능

스택에 복귀 주소 저장하고

RET 복귀 명령에 의해 스택에 저장된

주소값 사용하여 복귀 한다주소값 사용하여 복귀 한다.

주소값 결정 방식은 AJMP와 같음.

Page 76: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

LCALL addr16 – Long CallLCALL addr16 Long Call

3바이트 명령 (2바이트는 주소값)

64K 바이트 내의 서브루틴 호출64K 바이트 내의 서브루틴 호출

스택에 다음 복귀 주소 PC 값을 저장하고

RET 명령에 의해 스택에서 PC 값 복귀한다.한다.

Page 77: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

RET – 서브루틴 복귀 명령RET 서브루틴 복귀 명령

Call 명령에 의해 서브루틴 실행이 끝나면 CALL 다음 명령으로 복귀 한다.다 명령 복귀 다

Call 명령에 위해 스택에 저장된 복귀주소 PC 값을 스택에서 읽어 PC에 저장하소 PC 값을 스택에서 읽어 PC에 저장하여 call 다음 명령으로 복귀 실행

Page 78: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

프로그램 실행 위치 제어 명령프로그램 실행 위치 제어 명령

기타기타 명령명령기타기타 명령명령

NOP

Page 79: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

NOPNOP

명령은 가 어떤 조작도 하지 않NOP 명령은 CPU가 어떤 조작도 하지 않고 다음 명령을 읽어 실행을 계속 한다.

이것도 기계어 명령이기 때문에 PC 값은자동으로 1증가 한다.자동 1증가 한다.

약간의 짧은 시간지연이 필요할 때 사용할 수 있다할 수 있다.

시스템의 특정 부분의 안정되는데 시간이필요하다면 이 명령으로 짧은 시간을 지필요하다면, 이 명령으로 짧은 시간을 지연 시킬 수 있다.

Page 80: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

의사의사 명령명령

Page 81: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

의사명령어(Pseudo Code)의사명령어(Pseudo Code)

기계어로 번역되지 않음

어셈블러에게 정보만 제공어셈블러에게 정보만 제공

프로그램 작성을 편리하게 도우는 기능

Page 82: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

의사명령어의사명령어

ORG (origin) : 프로그램이 위치할 주소값

EQU (equate) : 특정값의 정의qC의 define과 유사. 데이터 및 주소값 지정 가능

DB (define byte) : 특정 데이터 값의 정의DB (define byte) 특정 데이터 값의 정의

DW (define word) : 특정 데이터 값의 정의

DS (d fi t ) : 특정 데이터 값의 정의DS (define storage) : 특정 데이터 값의 정의

BIT (bit) : 비트 변수의 정의

END (assemble end) : 프로그램의 끝 표시

Page 83: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ORGORG

프로그램 또는 데이터의 시작번지 지정

예)

ORG 00H

MOV A #0F3HMOV A,#0F3H

MOV명령 부터 프로그램 영역의 00번지 부터 시작

Page 84: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

EQUEQU

수치 값을 레이블에 할당

수치 대신 의미있는 문자기호를 사용가능수치 대신 의미있는 문자기호를 사용가능

예)

NEXT EQU 20HNEXT EQU 20H

BUF EQU 10110100B

Page 85: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

DBDB

메모리에 숫자 또는 문자를

저장하고자 할때저장하고자 할때

데이터 메모리

예)ORG 1000H 1000 11

데이터 메모리

ORG 1000HDB 11H, 22H, 33H

1000

1001

1002

11

22

33

Page 86: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

DBDB

메모리에 문자를 저장하는 예

데이터 메모리

예)ORG 1000H 1000 41

데이터 메모리

ORG 1000HDB ‘ABC’

1000

1001

1002

41

42

43

Page 87: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

DWDW

메모리에 문자를 저장하는 예

데이터 메모리

예)ORG 1000H 1000 01

데이터 메모리

ORG 1000HDW 0102H, 0304H

1000

1001

1002

01

02

03

1003 041003 04

Page 88: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

DSDS

메모리에 숫자 또는 문자를 저장할 공간을 확보 하고자 할 때공 확 하 자 때

예) 데이터 메모리)ORG 1000H

BUFFER EQU $ 1000 ?

데이터 메모리

DS 04H1000

1001

1002

?

?

?

1003 ?1003 ?

• $ : 현재의 위치• 내용에 대해서는 정해지지 않음내용에 대해서는 정해지지 않음• 고급언어의 배열 확보와 유사

Page 89: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

BITBIT

특정BIT의 주소를 정의하는 데 사용

예)

COUNT BIT 38H

또는또는

COUNT BIT 27H.1

Page 90: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ENDEND

어셈블러에게 번역을 끝낼 것을 지시

번역하고자 하는 마지막 부분에 기록번역하고자 하는 마지막 부분에 기록

END이후의 명령은 번역되지 않음

프로그램의 끝이 아닌 어셈블리의 끝을지시지시

Page 91: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ASM 예ASM 예

; 파일 이름 : BOOL A51; 파일 이름 : BOOL.A51 SELECT EQU 0FC48H ; I/O 실험 선택 어드레스IO_SEL EQU 10011110B ; I/O 실험 선택 값

ORG 0SJMP START 메인 프로그램으로 점프SJMP START ; 메인 프로그램으로 점프; 메인 프로그램 시작

ORG 0030HSTART: MOV SP,#60H ; 스택 지정

MOV A,#IO_SEL ; 그림 4-2의 U15 선택 값MOV DPTR,#SELECT ; 그림 4-2의 U15 어드레스MOVX @DPTR A 그림 4 2의 U15 선택MOVX @DPTR,A ; 그림 4-2의 U15 선택

Page 92: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

ASM 예ASM 예

LP1:LP1:; (P14 XOR P15) AND P16MOV C 0MOV C,0ANL C,P1.6; (P14 XOR P15) AND P16 + (P14 AND P15)ORL C,1MOV P1.0,C ; 출력SJMP LP1 ; 무한 루프SJMP LP1 ; 무한 루프

ENDEND

Page 93: z8051 명령어의이해 z명령어종류 - Egloospds17.egloos.com/pds/200908/31/64/5.8051_Inst.pdf기계어 z기계어()(Machine Language) {CPU가직접이해할수있는언어 z일련의0과1로표시

CPU의 기계어 프로그램CPU의 기계어 프로그램

끝끝끝끝