[ASM] 42 Libasm 과제를 해보아요~(5) 번외 – 레지스터의 이름


2026.07.03, 05:21


레지스터의 이름은 왜 이렇게 붙여졌을까?

알아보자.

System V AMD64 호출 규약에 대해 간략하게 알려줘. 각 레지스터의 이름이 무슨 뜻인지도 알려줘

System V AMD64 호출 규약 개요

리눅스/macOS 등 유닉스 계열 64비트 시스템에서 사용하는 함수 호출 규약입니다. 유나님이 진행 중이신 libasm 프로젝트(NASM, Intel 문법)의 ft_write, ft_read 등에서 시스템 콜 호출 시 직접 사용하시게 됩니다.

정수/포인터 인자 전달 순서 (레지스터)

순서레지스터용도
1번째 인자RDIDestination Index
2번째 인자RSISource Index
3번째 인자RDXData (원래는 Data 레지스터)
4번째 인자RCXCounter
5번째 인자R8범용 확장 레지스터 8번
6번째 인자R9범용 확장 레지스터 9번
  • 7개 이상의 인자는 스택으로 전달됩니다.
  • 반환값은 RAX(Accumulator)에 담깁니다. 128비트 반환 시 RAX:RDX 조합 사용.

레지스터 이름의 유래 (8086 시절 잔재)

레지스터원래 이름 뜻
RAXAccumulator — 연산 누적용
RBXBase — 데이터 접근용 베이스 주소
RCXCounter — 반복문(LOOP, REP) 카운터
RDXData — 보조 데이터, 확장 연산(나눗셈 등)
RSISource Index — 문자열 연산 시 소스 주소
RDIDestination Index — 문자열 연산 시 목적지 주소
RBPBase Pointer — 스택 프레임 기준점
RSPStack Pointer — 스택 최상단 위치
R8~R15이름 없이 번호만 (x86-64에서 신규 추가)

시스템 콜 호출 시 차이점

일반 함수 호출과 달리 시스템 콜은 규약이 약간 다릅니다.

구분함수 호출시스템 콜
호출 방식CALLSYSCALL
콜 번호 지정없음RAX에 시스템 콜 번호
4번째 인자RCXR10 (RCX는 SYSCALL 명령어가 리턴 주소 저장용으로 덮어씀)

이름 앞의 R은 레지스터야? RDX의 X는 무슨 뜻이야? 3자리를 맞추기 위한 패딩이야?

(클로드 답변 생략)

8086에서 8비트 레지스터(AL/AH, BL/BH, CL/CH, DL/DH) 이름 뜻 알려줘. 알파벳 순서 + Low High 야? 16비트 AX, BX, CX, DX. 앞은 알파벳 순서고 뒤는 eXtended의 X인거야? 32비트 확장되며 E 접두사: EAX 등 64비트 확장되며 E접두사 대신 R접두사. R은 관례적으로 Register로 해석 이거 맞을까?

5:16 AM

***님, 정리해 주신 내용을 검토했습니다.

항목문제근거
AL/AH 등 L/H맞음Low/High 8비트를 지칭
A,B,C,D가 “알파벳 순서”부정확한 프레이밍A/B/C/D는 각각 Accumulator, Base, Counter, Data의 머리글자이며, 기능명 기준으로 이름 붙인 것이지 알파벳 순서 자체를 설계 원칙으로 삼은 게 아닙니다. 우연히 그 머리글자들이 알파벳 순서로 나열될 뿐입니다.
AX/BX/CX/DX의 X맞음eXtended(8비트→16비트 확장)의 X
E 접두사(32비트)맞음Extended
R 접두사(64비트) = Register맞음(추정)공식 정의는 없으나 관례적 해석

요약: L/H, X, E, R에 대한 이해는 정확합니다. 다만 “A,B,C,D가 알파벳 순서”라는 표현은 인과관계가 반대입니다 — 알파벳 순서를 의도한 게 아니라, 각 레지스터의 기능(Accumulator/Base/Counter/Data)을 나타내는 머리글자를 선택한 결과가 우연히 알파벳 순으로 보이는 것입니다.

Accumulator, Base, Counter, Data에 대해 설명해줘

각 레지스터명이 원래 8086에서 담당했던 역할입니다.

레지스터의미원래 용도
A (Accumulator)누산기산술/논리 연산 결과가 누적되는 레지스터. ADD, MUL 등의 기본 대상
B (Base)베이스메모리 접근 시 베이스 주소를 담는 용도 (예: 배열의 시작 주소)
C (Counter)카운터LOOP, REP 등 반복 명령어에서 반복 횟수를 자동으로 감소시키며 세는 용도
D (Data)데이터입출력 연산이나 MUL/DIV의 확장 데이터 저장(예: DX:AX로 32비트 값 표현)

x86-64에서는 범용 레지스터로 쓰여 원래 용도에 얽매이지 않지만, 관습적으로 RCX는 여전히 반복 카운터로, RAX는 반환값 저장 용도로 많이 쓰입니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다