Microsoft PowerPoint 명령어.pptx

Similar documents
(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

[8051] 강의자료.PDF

Microsoft PowerPoint - hy2-12.pptx

Computer Architecture

PowerPoint 프레젠테이션

Microsoft PowerPoint - hy2-12.pptx

온라인 IT 교육최강 ( 강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1

Microsoft PowerPoint - 부호기와 복호기.PPT

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint 의 이해.pptx

프로그램카운터 (Program Counter) 명령레지스터 (Instruction Register) 누산기 (AC: Accumulator) 상태레지스터 (Status Register) PSWR(Program Status Word Register) 메모리주소레지스터 (M

=

Microsoft PowerPoint - a6.ppt [호환 모드]

슬라이드 1

<C1A4BAB8C3B3B8AE5FB1E2BBE75FC7CAB1E25F E687770>

Computer Architecture

Computer Architecture

OCW_C언어 기초

Microsoft PowerPoint - DSD06c_ISA.pptx

Microsoft Word - 1. ARM Assembly 실습_xp2.doc

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

4. 다음주소지정방식중속도가가장빠른주소방식은? 가. immediate addressing mode 나. direct addressing mode 다. indirect addressing mode 라. index register. 5. 간접주소 (indirect addr

MicrocontrollerAcademy_Lab_ST_040709

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<BEEEBCC0BAEDB8AEBEEEC1A4B8AE2E687770>

학습목표 2/33 마이크로프로세서와마이크로컨트롤러의차이를알수있다. 마이크로프로세서에서프로그램이수행되기위한명령어형식과명령어실행절차를알수있다. 프로그램을수행하려면어떤종류의명령어가필요한지알수있다. 현대컴퓨터의기본모델인저장형프로그램컴퓨터의한계점과그한계를완화하려는방법을알수있다.

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Brief Manual of MiDAS1.1 Family

Microsoft PowerPoint - M09_CPUarchi.ppt [호환 모드]

학습목차 r 개념으로살펴보는 CPU 속의제어장치 r 마이크로연산 r 제어장치의동작 r 마이크로프로그램을이용한제어 컴퓨터구조 제어장치

hlogin2

정보보안 개론과 실습:네트워크

<BDC7C7E83220B0E1B0FABAB8B0EDBCAD202833C1D6C2F7292E687770>

<C1A4BAB8C3B3B8AE5FB1E2BBE75FC7CAB1E25F FB1E2BBE7C6D0BDBABFEB2E687770>

PowerPoint 프레젠테이션

FARA PLC N70plus 시스템 사용자 메뉴얼

Microsoft PowerPoint - chap06-2pointer.ppt

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

Deok9_Exploit Technique

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

untitled

Microsoft PowerPoint - a8a.ppt [호환 모드]

Microsoft Word - FunctionCall

Microsoft PowerPoint - chap04-연산자.pptx

PowerPoint 프레젠테이션

학습 목차 r컴퓨터에서 마이크로 프로세서 유형보기 r어셈블리 프로그램의 이해 r인터럽트(interrupt) r명령어 세트 r주소지정 방식 컴퓨터 구조 CPU 명령어

No Slide Title

슬라이드 1

9

학습목차 r컴퓨터분해를통한본체살펴보기 r컴퓨터구성요소 r컴퓨터의기능 r버스와상호연결 컴퓨터구조 2 4. 컴퓨터시스템의구성과기능

<C0FCC0DAB0E8BBEAB1E2B1B8C1B6347E36B0AD20B9AEC1A62BC1A4B4E42E687770>

Microsoft PowerPoint - 15-MARS

Microsoft PowerPoint - polling.pptx

3차시.ppt

<C6F7C6AEB6F5B1B3C0E72E687770>

Microsoft Word - ExecutionStack

Chapter ...

Microsoft PowerPoint - ARM System-on-chip architecture_Chap 4_23p.ppt

Microsoft PowerPoint - hw8.ppt [호환 모드]

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능

PowerPoint Presentation

Microsoft PowerPoint - additional01.ppt [호환 모드]

구문 분석

Microsoft PowerPoint - chap01-C언어개요.pptx

<4D F736F F F696E74202D20322EB3EDB8AEC7A5C7F6B0FA20B3EDB8AEBCF6C7D02E >

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

Microsoft PowerPoint - 1-2장 디지털_데이터 .ppt

슬라이드 1

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - 강의자료8_Chap9 [호환 모드]

JVM 메모리구조

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

API 매뉴얼

마이크로프로세서 개요

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - o8.pptx

BMP 파일 처리

Microsoft PowerPoint - chap-03.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - a10.ppt [호환 모드]

adfasdfasfdasfasfadf

Microsoft PowerPoint - a2.ppt [호환 모드]

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - a9.ppt [호환 모드]

PowerPoint Presentation

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

hlogin7

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Real Time In-Circuit Emulator for MICROCHIP PIC16CXX

Transcription:

8051 명령어 8051 명령어의이해 명령어종류 dolicom@naver.com http://blog.naver.com/dolicom

CPU 의기계어프로그램 8051 어셈블리언어

기계어 기계어 (Machine Language) CPU가직접이해할수있는언어 일련의0과 1로표시 실행할명령, 데이터, 기억장소의주소등포함 하드웨어가직접실행시킬수있는형태 다양한비트형식가짐 다양한비트형식가짐 주로 16 진수로표기 2 진코드로이해하기어려움 CPU 기종에따라다름

프로그램언어 저급언어 (Low Level Language) 어셈블리어 기계어를기호화한프로그램언어 고급언어 (High Level Langage) 컴파일러사용 C, Fortran, COBAL, Pascal

어셈블리언어 어셈블리언어 (Assembly Language) 기계어와 1대1로대응한명령을기술하는언어 Mnemonic code : 니모딕코드 상징적인연상기호사용, 주로시스템프로그래밍에사용 하드웨어이해에적합 CPU 개발사에따라독자적인기능가짐 매크로어셈블리언어 (Macro Assembly Language) 기계어로번역되지않는의사명령사용, 매크로기능가짐 의사 (psuedo) 명령 => 어셈블러직접기계어로번역되지않지만번역시어셈블러에의해참조 어셈블러 (Assembler) 어셈블리프로그램언어로쓰여진소스프로그램을번역하여기계어프로그램을작성해주는프로그램

8051 의명령어의종류 데이터전송명령 : MOV 산술연산명령 : ADD, SUBB, MUL, DIV 논리연산명령 : AND, OR 비트조작명령 : RRC, RLC 점프명령 : JMP, JZ( 조건점프 )

기능별분류

명령어의구조 1 바이트명령어형식 OP 코드 2 바이트명령어 OP 코드 오퍼랜드 3 바이트명령어 OP 코드오퍼랜드 1 오퍼랜드 2

CPU 의기계어프로그램 주소지정방식

주소지정방식 (addressing mode) CPU 명령이처리할데이터가저장되어있는소스나처리결과를저장할목적지를지정하는방식 유효주소 (Effective Addess) 계산방식이 유효주소 (Effective Addess) 계산방식이필요

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

주소지정방식종류 이미디어트주소지정방식 immediate addressing mode 직접주소지정방식 direct addressing mode 간접주소지정방식 indirect addressing mode 레지스터사용 레지스터주소지정방식 register addressing mode

이미디어트주소지정방식 MOV A,#12H AA 12H 74 12 ADD A#34H A,#34H A A+34H 24 34 MOV DPTR,#1234H DPTR 1234H 90 12 34

이미디어트주소지정방식특징 오퍼랜드가명령코드중에상수값으로포함되어있는방식 이미디어트데이터의앞에는반드시 # 기호를사용한다. 이미디어트데이터는 DPTR 을제외하고는항상 8 비트이다.

직접주소지정방식 MOV A,50H AA M[50H] E5 50 ADD A,52H 25 52 A A+M[52H]

직접주소지정방식특징 데이터가저장된메모리의 8 비트주소를직접지정하는방식 내부데이터메모리의하위 128바이트 (00H 7FH) 나 SFR 을액세스할때사용 명령에서오퍼랜드가 8비트번지로표현되므로기계어코드가짧아지고, 명령의실행속도가빠르다.

간접주소지정방식 E6 MOV A@R0 A,@R0 A (R0) : 내부데이터메모리 ADD A,@R1 A A + (R1) : 내부데이터메모리 27 MOVX A,@R0 A (R0) : 외부데이터메모리 (8비트어드레스 ) MOVX A,@DPTR A (DPTR) : 외부데이터메모리 (16 비트어드레스 ) E2 E0

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

레지스터주소지정방식 MOV A,R0 E8 AA R0 xxxxx rrr ADD A,R7 2F A A+R7

베이스인덱스주소지정방식 MOVC A, @A+PC A A <- M[A+PC] MOVC A, @A+DPTR A <- M[A+DPTR] 83 93 DPTR A 주소 데이터 데이터메모리

베이스인덱스주소지정방식 Based indexed addresing mode EA = (base register) + (index register) base register: DTPR, PC index d register: A 외부프로그램메모리에저장된탐색표 (lookup table) 참조시이용

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

C 에서점프예 C 에서는대표적으로 goto 사용 void main() { int cnt; scanf ( %d, &cnt); if (cnt > 10) goto Skip_Add; cnt += 10; Skip_Add: printf( cnt = %d n, cnt); }

상대주소지정방식 SJMP 08H short jump SJMP 명령의주소가 100H 인경우분기되는주소는? TargetAddress = 0102H(PC) + 08H = 010AH 0100 SJMP 08H 0102 <- PC.. 010A MOV A,#10

상대주소지정방식 Relative addressing mode 지금부터의주소지정방식은분기명령과밀접한관계 EA A = PC + 8 bit signed offset -128 ~ +127 범위분기 / 지정

절대주소지정방식 Absolute addressing mode 11 비트의절대주소지정 PC 0-10 <= absolute address PC의나머지 5비트 (11-15) 는변경되지않음 AJMP addr Absoulute jump Addr 10-8 10101 Addr 7-0

절대주소지정방식 AJMP 0123H 001 10101 0010 0011 => 3523H AJMP 의주소가 8000H 일때분기되는주소는? PC 0-10 <- 123H 8123H 번지로분기

롱주소지정방식 long addressing mode 분기할번지를 16비트절대값으로표현 예 PC <= absolute address LJMP 9000H 9000H 번지로분기 ; long jump 02 90 00

CPU 의기계어프로그램 데이터전송명령

데이터전송명령 - MOV MOV 8비트데이터전송 ( 내부 RAM과 SFR) MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data MOV Rn, A MOV Rn, direct MOV Rn, #data MOV direct, A MOV direct, Rn MOV direct, direct MOV direct, @Ri MOV direct, #data MOV @Ri, A MOV @Ri, direct MOV @Ri, #data

MOV 의예 MOV A,#12H MOV A,R0 MOV R0,A MOV A,@12H MOV A,@R0 MOV @R1,A MOV MOV DPTR, A R0, R2

MOV 1 비트전송 - CY 플래그에 MOV C,bit MOV bit,c DPTR 을사용한 16 비트전송 MOV DPTR, #data

MOVX 외부데이터메모리 A 레지스터와외부메모리와의 데이터전송 MOVX A, @Ri MOVX A, @DPTR MOVX @Ri, A MOVX @DPTR, A

MOVC 프로그램메모리 Move Code Byte 프로그램메모리로부터프로그램코드전송 인덱스주소방식만가능 MOVC A, @A+DPTR MOVC A, @A+PC

PUSH / POP 스택 (stack) 에데이터전송 내부메모리를사용하고직접주소방식 PUSH DPL ; DPTR -> 스택 PUSH DPH PUSH A ; A 레지스터저장 POP A POP DPH POP DPL

PUSH 기계어데이터를넣으려면 PUSH 명령을사용 MOV SP,#5FH MOV A,#10 PUSH A PUSH A 실행과정 SP 5F 내부메모리 주소 5F 60 61 62 SP 60 주소 5F 60 61 62 1. SP 가 1 이자동증가 주소 SP 5F 60 10 60 61 62 A 10 2. SP 가가리키는 주소에 A=10을넣는다.

POP 기계어데이터를꺼내려면 POP 명령을사용 POP A POP A 실행과정 주소 주소 SP 5F SP 5F 60 10 60 60 10 60 61 62 1. SP 에서읽어 A 에저장한다. 61 62 읽기 A 레지스터 10 SP 5F 10 주소 5F 60 61 62 2. SP 을 1 감소한다.

XCH A 레지스터와바이트데이터교환 XCH A, Rn XCH A, direct XCH A, @Ri XCH A, R0 실행전 A 23H R0 56H 실행후 56H 23H

XCHD 하위 4 비트만데이터교환 XCH A, @Ri XCH A, @R0 R0 23H A 실행전 23H 56H 23H 주소 실행후 26H 53H

CPU 의기계어프로그램 산술연산명령

Arithmetic Operations ( 산술연산명령어 ) A, Rn Acc에레지스터 Rn의값을더함 ADD A, direct Acc에 direct 번지의값을더함 A, @Ri Acc에 Ri가가리키는번지의값을더함 A, #data Acc에 data( 상수 ) 값을더함 A, Rn Acc에레지스터 Rn의값과자리올림수를함께더함 ADDC A, direct Acc에 direct 번지의값과자리올림수를함께더함 A, @Ri Acc 에 Ri 가가리키는번지의값과자리올림수를함께더함 A, #data Acc에 data( 상수 ) 값과자리올림수를함께더함 A, Rn Acc에서레지스터 Rn의값과빌림수를함께뺌 SUBB A, direct Acc에서 direct 번지의값과빌림수를함께뺌 A, @Ri Acc에서 Ri가가리키는번지의값과빌림수를함께뺌 A, #data Acc에서 data( 상수 ) 값과빌림수를함께뺌 A Acc의값을 1 증가 INC Rn 레지스터 Rn 의값을 1 증가 direct direct 번지의값을 1 증가 @Ri Ri가가리키는번지의값을 1 증가 A Acc의값을 1 감소 DEC Rn 레지스터 Rn의값을 1 감소 direct direct 번지의값을 1 감소 @Ri Ri가가리키는번지의값을 1 감소 MUL AB A, B 레지스터를곱하여 B 에상위,A 에하위 8 비트저장 DIV AB A B를하여 A레지스터에몫, B레지스터에나머지저장 DA A Acc의값을 BCD코드형태로변환 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 4 4 1

연산명령의종류 ADD : A+operand -> A 더하기 ADDC : A+operand+CY 플래그 -> A SUBB : A operand CY -> A MUL 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->A DA : BCD 조작

ADD/ADDC/SUBB 덧셈 / 뺄셈 ADD A,#32H : A + 32H -> A ADDC A,#32H : A + 32H +CY -> A SUBB A,#32H : A 32H CY -> A MOV A,#5 ; 5 ADD A,#0FEH ; 5 + (-3) -> A 5 0000 0101 + (-3) 1111 1101 2 10000 0010 CY AC OV P(Even) 1 1 0 0

ADDC / SUBB ADDC A,50H : A +(50H) + CY -> A A 55 (50H) 4E A A4 1010 0100 CY AC OV P(Odd) 0 1 1 1 SUBB A,@R0 : A -@R0 - CY -> A A 53 (50H) 37 CY 1 A 1B 0001 1011 CY AC OV P 0 1 0 0

16 비트더하기예 int a; a = 0x1E44; a += 0x56CA; CLR C ; CY 지우고 MOV A, #44H ; 8비트 44+CA ADD A, #CAH MOV R1, A ; 결과값 0EH을 R1에, 현재 CY = 1. MOV A, #1EH ; 상위 8비트 1E+56+CY ADDC A, #56H MOV R2, A ; 상위바이트결과값 75H -> R2에저장 결과 750EH 은 R2:R1 에저장

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 진수결과를얻기위해 A = 83H 1 결과 9 보다클경우 +6 1. 결과 9 보다클경우 +6 2. CY = 1 : 상위 +6 AC = 1 : 하위 +6

MUL 곱셈 MUL AB AxB => B( 상위 8비트 ) : A( 하위 8비트 ) 255 넘으면 OV=1 MOV A,#31H MOV B,#10H MUL A,B B 03H A 10H

DIV 나눗셈 DIV AB A B => A( 몫 ) B( 나머지 ) B=0, OV=1 : 결과보증할수없다. MOV A,#118 MOV B,#5 DIV A,B A B 23 3 OV=0

CPU 의기계어프로그램 논리연산명령

ANL/ORL - AND 와 OR AND 명령 ANL A, Rn ANL A, direct ANL A, @Ri ANL A, #data ANL direct, A ANL direct, #data ANL C, bit ANL C, /bit OR 명령 ORL A, Rn ORL A, direct ORL A,,@Ri ORL A, #data ORL direct, A ORL direct, #data ORL C, bit ORL C, /bit

ANL/ORL 예 ANL A,#00001000B MOV A,#01110111B ANL A,#00001000B A 00000000B 실행후 MOV A,#01110111B ORL A,#00001000B A 01111111B 실행후

XRL - XOR 연산 XRL A,@R0 실행전 A : 10010001B @R0 : 11100011B 실행후 A : 01110010B

CLR (Clear) / CPL (1 의보수 ) CLR A : A 레지스터를 0 으로지운다. CPL A : A 레지스터의값을보수연산 2 의보수예 CPL A ; 1 의보수 INC A ; 1 의보수 + 1

로테이트명령 RR : 오른쪽으로 1 비트쉬프트한다. 1111 1101 RL : 왼쪽으로 1 비트쉬프트한다. 1111 1101

로테이션명령에서 carry 와함께 RRC A : RRC (Rotate Right with Carry) A레지스터 1111 1101 C C=1 RLC A : RLC (Rotate Left with Carry) A 레지스터 C 1111 1101 C=0 실행후 1111 1010 C=1

CPU 의기계어프로그램 비트조작명령

CLR 비트 &CY 지우기 CLR P1.1 Port 1 의 1비트를지운다. CLR C CY 플래그를지운다.

SETB SETB A.2 A레지스터의 3 번째비트를지운다. SETB C CY 플래그를지운다.

CPU 의기계어프로그램 프로그램실행위치제어명령

점프명령 무조건점프 (Unconditional Branch) ajmp addr11 ; 절대번지로점프 ljmp addr16 ; 절대번지 (16비트) 점프 - long jump sjmp rel ; 상대번지점프 - short jump jmp @A+DPTR ; 간접번지지정점프 조건점프 (Conditional branch) jz, jnz rel ; 상대주소로점프 -short conditional djnz rel ; 감소후 0 이면점프 cjne rel ; 비교후같지않으면점프 cjne rel ; 비교후같지않으면점프 Subroutine Call acall addr11 ; 절대번지 (11 비트 ) 서브루틴콜 lcall addr16 ; long 절대번지서브루틴콜 (Subroutine Call) ret ; 서브루틴으로부터복귀 (return) reti ; 인터럽트처리후복귀

프로그램실행위치제어명령 무조건점프명령 ajmp addr11 ljmp addr16 sjmp rel jmp @A+DPTR

AJMP 절대번지 (11 비트 ) 점프 11 비트로번지표현 ( 점프영역 2Kbyte 범위 ) 나머지상위 5 비트 (A[15:11]) 는그대로유지 2 바이트명령어로표현 명령어 2 바이트 Addr 10-8 10101 Addr 7-0 PC A[15:11] A[10:0] 점프주소 16비트 A[15:11] A[10:8] A[7:0] PC

LJMP Long Jump 점프할주소 16 비트사용 (64K byte 범위 ) 3 바이트명령어 (2 바이트주소 ) LJMP 점프주소상위점프주소하위 PC A[15:0]

JMP 절대번지점프 JMP addr16 LJMP 와같이 16비트주소로점프 JMP 0030H 0030H 번지로점프 JMP @A + DPTR Indirect Jump 점프주소 = DPTR + A 레지스터값

SJMP Short Jump 8 비트부호옵셋트상대주소 (8bit signed offset relative) 2바이트명령어 주소값은 PC와상대주소값을더한다. 예 ) SJMP 0FEH 다음명령이 PC가 0015H에있다면 PC 0015 상대주소 FFFE 점프할주소 0013

SJMP 어셈블리예 80E2 LOOP2: MOV R7,#50... SJMP LOOP2 ; PC+FFE2->PC 80FE SJMP $ * $ : PC+FFFE -> PC 대기계속같은명령수행

프로그램실행위치제어명령 조건점프명령 JZ/JNZ rel DJNZ rel JC / JNC rel CJNE rel

조건점프명령 JZ A=0 일때점프 JNZ A!=0 일때점프 DJNZ 감소후, A!=0 일때점프 CJNE A,byte A!= byte 일때점프 CJNE reg,#data byte!= #data 일때점프 JC CY=1 일때점프 JNC CY=0 일때점프 JB Bit = 1 일때점프 JNB Bit = 0 일때점프 JBC Bit = 1 일때점프후, 비트클리어 (clear)

jz, jnz Z(zero) : A 레지스터값이 0 인가? JZ : A 레지스터값이 0 이면점프한다. 2 바이트명령 주소는 SJMP 와같이 8 비트상대주소 현재 PC 에서 -128 ~ 127 번지내에서점프 JNZ : A 레지스터값이 0이아닐때점프한다.

JC / JNC 캐리 캐리플래그 (CY) 의값에따라점프결정 JC : 만약 CY=1 이면점프 JNC : 만약 CY=0 이면점프 2바이트명령 주소는 SJMP/JZ/JNZ와같이 8비트상대주소 현재 PC 에서 -128 ~ 127 번지내에서점프

CJNE rel 두값을비교후, 값이같지않으면점프 NE : Not Equal 같지않으면 cjne A, direct, rel cjne Rn, #data, rel cjne @Rn, #data, rel CJNE A, 20H, LOOP CJNE A,#10,LOOP CJNE R0,#10,LOOP CJNE @R0,#10,LOOP

JB / JNB / JBC JB : 정의된플래그의비트가 1 이면점프 JNB : 정의된플래그의비트가 0이면점프 ( 예 ) * JB F0,LOOPEND F0플래그가 1이면점프 * JNB F0,$ - F0 가 1 일때까지이명령실해 대기할때 * JB ACC.2,LOOP A 레지스터의 3 번째비트가 1 이면점프 JBC : 사용자플래그가 1 이면점프하고, 그비트를클리어한다.

DJNZ 반복루프를구성할때 1 을감소하고, 0 이아니면점프 DJNZ Rn, rel DJNZ direct, rel MOV DPTR,#2010H CLR A MOV R0,A MOV R4,#5 LOOP: MOV A,@DPTR ADD A,R0 MOV R0,A INC DPTR DJNZ R4,LOOP

프로그램실행위치제어명령 서브루틴콜명령 ACALL addr11 LCALL addr16 RET

ACALL addr11 2 바이트명령 2K 바이트내의서브루틴호출가능 스택에복귀주소저장하고 RET 복귀명령에의해스택에저장된 주소값사용하여복귀한다. 주소값결정방식은 AJMP와같음.

LCALL addr16 Long Call 3 바이트명령 (2 바이트는주소값 ) 64K 바이트내의서브루틴호출 스택에다음복귀주소 PC 값을저장하고 RET 명령에의해스택에서 PC 값복귀한다.

RET 서브루틴복귀명령 Call 명령에의해서브루틴실행이끝나면 CALL 다음명령으로복귀한다. Call 명령에위해스택에저장된복귀주소 PC 값을스택에서읽어 PC 에저장하여 call 다음명령으로복귀실행

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

NOP NOP 명령은 CPU 가어떤조작도하지않고다음명령을읽어실행을계속한다. 이것도기계어명령이기때문에 PC 값은자동으로 1 증가한다. 약간의짧은시간지연이필요할때사용할수있다. 시스템의특정부분의안정되는데시간이필요하다면, 이명령으로짧은시간을지연시킬수있다.

CPU 의기계어프로그램 의사명령

의사명령어 (Pseudo Code) 기계어로번역되지않음 어셈블러에게정보만제공 프로그램작성을편리하게도우는기능

의사명령어 ORG (origin) : 프로그램이위치할주소값 EQU (equate) : 특정값의정의 C 의 define 과유사. 데이터및주소값지정가능 DB (define byte) : 특정데이터값의정의 DW (define word) : 특정데이터값의정의 DS (define storage) : 특정데이터값의정의 BIT (bit) : 비트변수의정의 END (assemble end) : 프로그램의끝표시

ORG 프로그램또는데이터의시작번지지정 예 ) ORG 00H MOV A,#0F3H MOV 명령부터프로그램영역의 00 번지부터시작

EQU 수치값을레이블에할당 수치대신의미있는문자기호를사용가능 예 ) NEXT EQU 20H BUF EQU 10110100B

DB 메모리에숫자또는문자를 저장하고자할때 예 ) ORG 1000H DB 11H, 22H, 33H 데이터메모리 1000 11 1001 22 1002 33

DB 메모리에문자를저장하는예 예 ) ORG 1000H DB ABC 데이터메모리 1000 41 1001 42 1002 43

DW 메모리에문자를저장하는예 예 ) ORG 1000H DW 0102H, 0304H 데이터메모리 1000 01 1001 02 1002 03 1003 04

DS 메모리에숫자또는문자를저장할공간을확보하고자할때 예 ) ORG 1000H 데이터메모리 BUFFER EQU $ 1000? DS 04H 1001? $ : 현재의위치 내용에대해서는정해지지않음 고급언어의배열확보와유사 1002? 1003?

BIT 특정 BIT 의주소를정의하는데사용 예 ) COUNT BIT 38H 또는 COUNT BIT 27H.1

END 어셈블러에게번역을끝낼것을지시 번역하고자하는마지막부분에기록 END 이후의명령은번역되지않음 프로그램의끝이아닌어셈블리의끝을지시

ASM 예 ; 파일이름 : BOOL.A51 SELECT EQU 0FC48H ; I/O 실험선택어드레스 IO_SEL EQU 10011110B ; I/O 실험선택값 ORG 0 SJMP START ; 메인프로그램으로점프 ; 메인프로그램시작 ORG 0030H START: MOV SP,#60H ; 스택지정 MOV A,#IO_SEL ; 그림 4-2의 U15 선택값 MOV DPTR,#SELECT ; 그림 4-2의 U15 어드레스 MOVX @DPTR,A ; 그림 4-2 의 U15 선택

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

CPU 의기계어프로그램 끝