1 / 93

8051 명령어

8051 명령어. 8051 명령어의 이해 명령어 종류. dolicom@naver.com http://blog.naver.com/dolicom. CPU 의 기계어 프로그램. 8051 어셈블리 언어. 기계어. 기계어 (Machine Language) CPU 가 직접 이해할수 있는 언어 일련의 0 과 1 로 표시 실행할명령 , 데이터 , 기억장소의주소등포함 하드웨어가 직접 실행 시킬 수 있는형태 다양한 비트 형식 가짐 주로 16 진수로 표기 2 진코드로 이해하기 어려움

dagan
Download Presentation

8051 명령어

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

  7. 기능별 분류

  8. 명령어의 구조 • 1 바이트 명령어 형식 • 2바이트 명령어 • 3 바이트명령어

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

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

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

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

  13. 이미디어트 주소지정 방식 • MOV A,#12H • A ← 12H • ADD A,#34H • A ← A + 34H • MOV DPTR,#1234H • DPTR ← 1234H

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

  15. 직접 주소지정 방식 • MOV A,50H • A ←M[50H] • ADD A,52H • A ← A + M[52H]

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

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

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

  19. 레지스터 주소지정 방식 • MOV A,R0 • A ← R0 • ADD A,R7 • A ← A + R7

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

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

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

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

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

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

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

  27. 절대 주소지정 방식 • AJMP 0123H => 3523H • AJMP의 주소가 8000H일때 분기되는 주소는? • PC0-10 <- 123H • 8123H 번지로 분기

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

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

  30. 데이터 전송 명령 - 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

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

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

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

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

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

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

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

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

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

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

  41. 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&#8274;B를하여 A레지스터에 몫, B레지스터에 나머지 저장 1 4 DA A Acc의 값을 BCD코드 형태로 변환 1 1

  42. 연산 명령의 종류 • 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 조작

  43. 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

  44. 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

  45. 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에 저장

  46. 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 2. CY = 1 : 상위 +6 AC = 1 : 하위 +6

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

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

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

  50. ANL/ORL - AND와 OR 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 ORL A, Rn ORL A, direct ORL A, @Ri ORL A, #data ORL direct, A ORL direct, #data ORL C, bit ORL C, /bit

More Related