어셈블리어 3

MOV와 LEA 어셈블리어 차이 그리고 []의 의미 (RAX와 [RAX]의 차이)

결론부터 이야기하면 mov는 값을 옮기는 어셈블리어 lea는 주소를 옮기는 어셈블리어 rax는 rax에 담긴 값 [rax]는 rax에 담긴 값을 주소로 보겠다. 라는 뜻이다. 아래 표를 완벽하게 이해하면 최고다. 1. mov rdi, rsi : rsi에 있는 값을 주소가 아니라 값으로 보고, rdi 레지스터에 값을 넣는다. 2. mov QWORD PTR[rdi], rsi : rsi에 있는 값을 주소가 아니라 값으로 보고, rdi 레지스터에 담겨있는 값을 주소로 보고, 해당 주소에 rsi에 담긴 값을 넣는다. 3. mov QWORD PTR[rdi+8*rcx], rsi : rsi에 있는 값을 주소가 아니라 값으로 보고, rdi값+8*rcx값을 주소로 보고, 해당 주소에 rsi에 담긴 값을 넣는다. [ ]의 ..

공부/JUN STUDY 2022.03.30

Programing Language (하이레벨, 어셈블리어, 기계어)

Programing Language high level language (소스코드, C, 자연어) assembly language (어셈블리어) low level language (기계어) 컴파일러 vs 어셈블러 컴파일러 : high level language (소스코드, C, 자연어) ⇒ low level language (기계어) 어셈블러 : assembly language (어셈블리어) ⇒ low level language (기계어) 컴파일 VS 인터프리터 컴파일 : 번역본을 만들기 ⇒ 실행파일을 만들기 (C) (loader와 linker 필요. loader : 메모리에 자리잡 linker : function들 연결) 인터프리터 : 볼때마다 해독 ⇒ 실행파일 X (Python) 프로그래밍의 순서 알..

구문 VS 명령어 (Statement VS Instruction) 소스코드 어셈블리어 인간이 하이 레벨 언어를 쓰는 이유

소스코드의 한 문장을 statement(구문)이라고 하고, 실제로 컴퓨터가 명령을 수행하는 하나의 단위를 instruction(명령어)라고 한다. 프로그램은 명령어의 유한집합을 의미하며, 여기서 명령어는 instruction에 해당한다. CPU는 한번에 하나의 instruction을 수행한다. (구체적으로 CPU의 ALU, Arithmethic Logic Unit) c = a+b; 이렇게 C언어 소스코드의 한 문장(statement)을 쓰게되면, 컴퓨터 내부에서는 레지스터에 값을 가져오고 계산해서 C의 위치에 더한 값을 집어넣는 세부적인 일(instruction)들이 필요하다. 컴파일러가 이 하나의 statement를 수행하기 위해서 세개의 instruction을 실행해야한다. mov eax, dword..

공부/JUN STUDY 2021.09.14
728x90