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는 반환값 저장 용도로 많이 쓰입니다.
답글 남기기