[Assembly] 8086 계열 기본 레지스터와 주소 지정 방식

JongHyeon_Seo·2022년 5월 14일
0

8086 계열 기본 레지스터

레지스터란?

  • 데이터 저장, 연산 등을 위한 임시 기억장치
  • 각 레지스터는 자체의 특수한 용도와 제한점이 있다
  • 장점: 메모리보다 엑세스 속도가 빠르다
  • 단점: 개수가 한정되어 있고, 용도가 제한적이다.

종류

  • 범용 레지스터: 8개
  • 세그먼트 레지스터: 4개
  • 프로세스 컨트롤 레지스터: 2개

범용 레지스터의 AH와 AL레지스터를 합쳐서 AX라고 부를 수 있다. B, C, D 모두 마찬가지다

기능

  • 범용 레지스터: 사칙연산과 메모리 주소 지정
    • AX 레지스터
      • 입출력, 거의 모든 산술연산에 사용
      • 곱셈, 나눗셈, 변환 명령에서 반드시 사용
    • BX 레지스터
      • 주소 지정을 확대하기 위해 index로 사용
      • 일반적인 계산에 사용
    • CX 레지스터
      • 루프의 반복 횟수, 쉬프트 비트 수를 기억
      • 일반적인 계산에 사용
    • DX 레지스터
      • 몇몇 입출력 동작에서 반드시 사용
      • 큰 수의 곱셈과 나눗셈에는 DX와 AX를 쌍으로 사용
    • SP, BP 레지스터
      • 스택 조작에 사용
    • SI, DI, 레지스터
      • 메모리 번지의 간접 지정에 사용
  • 세그먼트 레지스터
    • CPU가 명령을 Fetch할 때: CS:IP로부터 명령을 Fetch
    • 데이터 전송: DS:offset address
    • 스택 동작: SS:SP
  • 프로세스 컨트롤 레지스터
    • IP (Instruction Pointer)
      • 다음에 실행할 명령어의 번지를 가리키는 레지스터
    • FL (Flag Register)
      • CPU의 현재 상태 표시
      • 비교, 연산 결과를 보존

주소 지정

  • 8086 프로세서는 1MB까지의 메모리를 취급 (00000H ~ FFFFFH)
  • 주소 데이터로 20bit 필요
  • 8086의 레지스터는 16bit 크기 뿐이므로 2개의 레지스터를 조합하여 사용
    ex) 세그먼트와 오프셋 주소를 다음과 같이 가정하면, 세그먼트 주소의 맨 뒤에 0을 하나 붙인후 오프셋 주소와 더한다.
    segment address = 1000H
    offset address = 1234H
    effective address = 10000H + 1234H = 11234H
profile
코딩 코딩

0개의 댓글