임베디드 시스템-주소 지정 모드

addressing mode주어진 메모리 위치를 지정하는 방법을 나타냅니다. 다음과 같이이 명령어를 실행하는 다섯 가지 방법 또는 다섯 가지 주소 지정 모드가 있습니다.

  • 즉시 주소 지정 모드
  • 직접 주소 지정 모드
  • 직접 주소 지정 모드 등록
  • 간접 주소 지정 모드 등록
  • 인덱싱 된 주소 지정 모드

즉시 주소 지정 모드

예를 들어 보겠습니다.

MOV A, #6AH

일반적으로 다음과 같이 쓸 수 있습니다.

MOV A, #data

그것은 다음과 같이 불립니다. immediate 8 비트 데이터가 누산기 (대상 피연산자)로 즉시 전송되기 때문입니다.

다음 그림은 위의 명령과 실행을 설명합니다. opcode 74H는 0202 주소에 저장됩니다. 데이터 6AH는 프로그램 메모리의 0203 주소에 저장됩니다. opcode 74H를 읽은 후, 다음 프로그램 메모리 주소의 데이터는 누산기 A로 전송됩니다 (E0H는 누산기의 주소입니다). 명령어는 2 바이트이고 한 사이클로 실행되므로 프로그램 카운터는 2 씩 증가하고 프로그램 메모리의 0204를 가리 킵니다.

Note− 6AH 앞의 '#'기호는 피연산자가 데이터 (8 비트)임을 나타냅니다. '#'이 없으면 16 진수가 주소로 사용됩니다.

직접 주소 지정 모드

이것은 피연산자를 지정하는 또 다른 방법입니다. 여기서 데이터 (소스 데이터)의 주소는 피연산자로 지정됩니다. 예를 들어 보겠습니다.

MOV A, 04H

레지스터 뱅크 # 0 (4 번째 레지스터)의 주소는 04H입니다. MOV 명령이 실행되면 레지스터 04H에 저장된 데이터가 누산기로 이동됩니다. 레지스터 04H가 데이터 1FH를 보유하기 때문에 1FH는 누산기로 이동됩니다.

Note− 즉시 모드와 달리 직접 주소 지정 모드에서는 '#'을 사용하지 않았습니다. '#'을 사용했다면 데이터 값 04H가 1FH 대신 누산기로 전송되었을 것입니다.

이제 다음 그림을 살펴보십시오. 명령이 어떻게 실행되는지 보여줍니다.

위의 그림에 표시된대로 완료하는 데 1주기가 필요한 2 바이트 명령어입니다. PC는 2 씩 증가하고 0204를 가리 킵니다. 명령 MOV A, 주소에 대한 opcode는 E5H입니다. 0202에서 명령이 실행되면 (E5H) 누산기가 활성화되고 데이터를 수신 할 준비가됩니다. 그러면 PC는 다음 주소 인 0203으로 이동하여 소스 데이터 (누산기로 전송 될)가있는 04H의 위치 주소를 조회합니다. 04H에서 컨트롤은 데이터 1F를 찾아서 누산기로 전송하므로 실행이 완료됩니다.

직접 주소 지정 모드 등록

이 주소 지정 모드에서는 레지스터 이름을 직접 (소스 피연산자로) 사용합니다. 예를 들어 이해하려고 노력합시다.

MOV A, R4

한 번에 레지스터는 R0에서 R7까지의 값을 가질 수 있습니다. 32 개의 레지스터가 있습니다. 레지스터 주소 지정을 위해 8 개의 변수로 32 개의 레지스터를 사용하기 위해 레지스터 뱅크가 사용됩니다. 0부터 3까지의 4 개의 레지스터 뱅크가 있습니다. 각 뱅크는 R0에서 R7까지의 8 개의 레지스터로 구성됩니다.

한 번에 단일 레지스터 뱅크를 선택할 수 있습니다. 등록 은행 선택은Special Function Register (SFR) 명명 Processor Status Word(PSW). PSW는 필요에 따라 각 비트를 프로그래밍 할 수있는 8 비트 SFR입니다. 비트는 PSW.0에서 PSW.7까지 지정됩니다. PSW.3 및 PSW.4는 레지스터 뱅크를 선택하는 데 사용됩니다.

이제 다음 그림을보고 작동 방식을 명확하게 이해하십시오.

Opcode EC는 MOV A, R4에 사용됩니다. opcode는 주소 0202에 저장되며 실행될 때 제어는 해당 레지스터 뱅크 (PSW에서 선택됨)의 R4로 직접 이동합니다. 레지스터 뱅크 # 0을 선택하면 레지스터 뱅크 # 0의 R4 데이터가 누산기로 이동됩니다. 여기서 2F는 04H에 저장됩니다. 04H는 레지스터 뱅크 # 0의 R4 주소를 나타냅니다.

데이터 (2F) 이동은 굵게 강조 표시됩니다. 2F는 데이터 메모리 위치 0CH에서 누산기로 전송되고 점선으로 표시됩니다. 0CH는 레지스터 뱅크 # 1의 레지스터 4 (R4)의 주소 위치입니다. 위의 명령어는 1 바이트이며 완전한 실행을 위해 1 사이클이 필요합니다. 즉, 레지스터 직접 주소 지정 모드를 사용하여 프로그램 메모리를 절약 할 수 있습니다.

간접 주소 지정 모드 등록

이 주소 지정 모드에서 데이터의 주소는 레지스터에 피연산자로 저장됩니다.

MOV A, @R0

여기서 R0 내부의 값은 누산기로 전송 될 데이터를 보유하는 주소로 간주됩니다. Example: R0의 값이 20H이고 데이터 2FH가 주소 20H에 저장되어 있으면이 명령을 실행 한 후 값 2FH가 누산기로 전송됩니다. 다음 그림을 참조하십시오.

그래서 opcode는 MOV A, @R0E6H입니다. 레지스터 뱅크 # 0이 선택되었다고 가정하면 레지스터 뱅크 # 0의 R0은 데이터 20H를 보유합니다. 프로그램 제어는 20H로 이동하여 데이터 2FH를 찾고 2FH를 누산기로 전송합니다. 이것은 1 바이트 명령어이며 프로그램 카운터는 1 씩 증가하고 프로그램 메모리의 0203으로 이동합니다.

Note− R0 및 R1 만 레지스터 간접 주소 지정 명령어를 구성 할 수 있습니다. 즉, 프로그래머는 @ R0 또는 @ R1을 사용하여 명령어를 만들 수 있습니다. 모든 등록 은행이 허용됩니다.

인덱싱 된 주소 지정 모드

색인화 된 주소 지정 모드의 개념을 이해하기 위해 두 가지 예를 살펴 보겠습니다. 다음 지침을 살펴보십시오-

MOVC A, @A+DPTR

MOVC A, @A+PC

여기서 DPTR은 데이터 포인터이고 PC는 프로그램 카운터입니다 (둘 다 16 비트 레지스터 임). 첫 번째 예를 고려하십시오.

MOVC A, @A+DPTR

소스 피연산자는 @ A + DPTR입니다. 여기에는이 위치의 소스 데이터가 포함됩니다. 여기서 우리는 누산기의 현재 내용과 함께 DPTR의 내용을 추가합니다. 이 추가는 소스 데이터의 주소 인 새 주소를 제공합니다. 이 주소가 가리키는 데이터는 누산기로 전송됩니다.

opcode는 93H입니다. DPTR의 값은 01FE입니다. 여기서 01은 DPH (상위 8 비트)에 있고 FE는 DPL (하위 8 비트)에 있습니다. 누산기 값은 02H입니다. 그런 다음 16 비트 추가가 수행되고 01FE H + 02H는 0200 H가됩니다. 0200H 위치의 데이터는 누산기로 전송됩니다. 누산기 (02H) 내부의 이전 값이 0200H의 새 데이터로 대체됩니다. 누산기의 새 데이터는 그림에서 강조 표시됩니다.

이것은 실행에 2 사이클이 필요한 1 바이트 명령어이며이 명령어에 필요한 실행 시간은 이전 명령어 (모두 각각 1 사이클 임)에 비해 높습니다.

다른 예 MOVC A, @A+PC위의 예와 동일한 방식으로 작동합니다. 누산기로 DPTR을 추가하는 대신 여기에서 프로그램 카운터 (PC) 내부의 데이터가 누산기와 함께 추가되어 대상 주소를 얻습니다.