Assembly Language(어셈블리어)

서정욱 [marvin]·2021년 8월 7일
0

개요

  • 기계어 라인 하나를 어셈블리어 라인 하나에 대응되도록 만든것

문법

  • 국제 표준이 없기 때문에 cpu회사마다.. os 환경에 따라 다 다름
    기본적으로 opcode(operand3) 형태를 취하고 있다

어셈블리어를 배워야 하나?

  • 음... 언어에서 사용되는 레지스터 원리 등을 배우는 건 괜찮아 보이는데
  • 용법, 문법 등을 배우는 건 의미 없어보임(리버싱 할거 아니라면)
  • 어차피 cpu, 새로운 회사들이 나올 때마다 사용하는 문법,용법이 달라질 것 같다.

IA-32 (인텔 아키텍처 32비트) 기준 레지스터 분류

  • General
    • Data 산술, 논리 및 기타 연산
    • Pointer 포인터
    • Index 주소
  • Control
  • Segment

register naming 규칙

  • 16bit는 기본 AX, BX, CX 등으로 사용
  • 32bitE 접두어 사용 EAX, EBX, ECX
  • 64bitR 접두어 사용 RAX, RBX, RCX

Data register

  • AX accumulator, 누산기, 입력/출력 및 대부분의 산술 명령어 return값이 여기에 저장
  • BX base, 기본 인덱싱된 주소 지정 (asc)
  • CX count, 반복 작업에서 루프 카운트 (desc)
  • DX data 다른 데이터 레지스터와 함께 사용되는 여분의 레지스터

Pointer Register

  • Instruction Pointer (IP) 다음에 실행할 명령어의 오프셋 주소를 저장
  • Stack Pointer (SP) 스택 내에서 끝 지점
  • Base Pointer (BP) 스택 내에서 시작 지점

Index register

  • Source Index (SI) 원본 주소 index
  • Destination Index (DI) 대상 주소 index

Control Register

  • Overflow Flag (OF) 연산 끝나고 변수 범위초과 여부
  • Direction Flag (DF) 문자열 데이터를 이동하거나 비교할 때 왼쪽 또는 오른쪽 방향
  • Interrupt Flag (IF) 키보드 입력 등과 같은 외부 인터럽트를 무시할지 또는 처리할지
  • Trap Flag (TF) 단일 단계 모드에서 프로세서의 작동을 설정
    • 우리가 사용한 DEBUG 프로그램은 트랩 플래그를 설정하므로 한 번에 하나의 명령을 실행
  • Sign Flag (SF) 연산 결과의 부호
  • Zero Flag (ZF) 산술 또는 비교 연산의 결과
    • 0이 아닌 결과는 0 플래그를 0으로 지우고 0 결과는 1로 설정
  • Auxiliary Carry Flag (AF) 보조 캐리
  • Parity Flag (PF) 짝수 홀수
  • Carry Flag (CF) 캐링, 말그대로 줄바꿈 혹은 줄의 시작점 등을 담당

Segment Register

세그먼트 자체는 블락 역할이고 그 시작위치, 끝위치를 담당하는 레지스터들임

  • Code Segment(CS) 실행할 모든 명령어
  • Data Segment(DS) 데이터, 상수 및 작업 영역
  • Stack Segment(SS) 프로시저 또는 서브루틴의 데이터 및 리턴 주소

opcode

  • MOV [a] [2] 2의 value를 a에 넣어라
  • LEA [a] [2] 2의 address를 a에 넣어라
  • POP 스택에서 최상단을 빼라
  • CMP 비교
  • ADD, SUB 더하기 빼기

뭐 이런...

profile
JavaScript 개발자입니다

0개의 댓글