42Seoul/그 외

    [ASM] 64bit 환경에서의 레지스터와 리눅스 함수 호출 규약

    libasm은 맥 OS 64bit 환경에서 인텔 어셈블리를 이용하여 진행되기 때문에, 이를 기준으로 정리하였습니다. 범용 레지스터 우선, 16bit의 레지스터는 각 레지스터 이름의 약자로 이루어져 있습니다(ex. AX = accumulator register). 여기서 32bit 레지스터들은 앞에 E(extended) 문자가 추가되고, 64bit는 R문자가 추가됩니다. 64bit 환경에서는 아래의 레지스터들 외에, r8~r15의 레지스터 8개를 추가로 가집니다 레지스터 accumulator base counter data stack pointer stack base pointer src dest 16bit AX BX CX DX SP BP SI DI 32bit EAX EBX ECX EDX ESP EBP E..

    [ASM] Intel 어셈블리 명령어 정리 + hello world 분석

    이전 글에서 어셈블리어로 "hello world"를 출력하는 예제를 작성하였습니다. 이번에는 기초적인 명령어들을 학습하고, 코드를 분석해보겠습니다. 어셈블리어의 명령어 구조 Intel문법에서의 어셈블리 명령어는 다음과 같은 구조를 하고 있습니다. 라벨 : ;주석 여기서 라벨(label)은 기계어로 직접 번역되지는 않으며, 점프(jmp) 명령어를 사용하는 등, 메모리 주소의 참조가 필요할 때 사용됩니다. 라벨 명령어의 집합. 명령어 또는 데이터의 주소를 나타냄. 명령어 mov, jmp 등의 동작을 지시. 피연산자 명령어의 피연산자(operand). 레지스터, 숫자, 문자, 메모리 주소 등. 주석 앞에 ;문자를 붙여 주석처리 어셈블리 명령어 libasm을 구현하며 학습한 명령어들을 위주로 추가 중입니다. 조..

    [ASM] 어셈블리어란? 맥OS에서 Intel문법 + NASM으로 "hello world" 출력하기

    어셈블리어(Assembly language)란? "기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어" - 위키백과 프로그래밍 언어에는 C/C++과 같은 고급 언어(High-Level language) 외에도 어셈블리어와 기계어가 존재합니다. 먼저, 실제 컴퓨터 프로그램은 0과 1로만 이루어져 있는데, 이를 기계어라고 부릅니다. 그리고 어셈블리어는, 이런 기계어에 MOV, ADD와 같은 명령어를 각각 대응시킨, 프로그래밍의 저급 언어입니다. 컴퓨터 구조(CPU)마다 기계어가 다르기 때문에, 이에 대응하는 어셈블리어도 각각 달라지게 됩니다. 이러한 단점을 개선하기 위해 만들어진 것이 C언어와 같은 고급 언어로, CPU에 종속적이지 않으면서도, 저급 언어처럼 메모리에 직접 접근할 수 있다는 장점이 있..