바람의 나라는 어셈블리어로 코딩되었다고 한다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
바람의나라 하고싶당... (V3의 전신인 V1도 어셈블리어로 코딩되었다.)
나도 할 수 있다, 어셈블리어..!
어셈블리어
1. 어셈블리어는 기계어(이진 object) 1:1 대응.
2. 문법: Intel문법, AT&T문법이 있음. (인텔 x86기준)
3. 종류: 각 프로세서가 채택한 ISA(Instruction Set Architecture)에 의해 결정
x86
1) 정의 : 인텔 프로세서의 ISA
인텔의 초기개발된 프로세서들이 86으로 끝났기 때문에 붙여진 이름
2) 종류: IA-16, IA-32
3) 확장: SIMD(80486 이후)
4) 한계: 프로세스당 4GB(=2^32)메모리 까지밖에 지원하지 않는다.
x64 (IA-64)
1) 정의 : 인텔 프로세서의 64-bit ISA
2) 종류 : IA-64
3) 한계 : IA-64의 경우 32bit을 매우 느리게 지원
x64 (x86-64)
1) 정의 : 인텔 프로세서의 64-bit ISA, 32-bit 호환 ISA
2) 종류 : AMD64, 인텔64
(잡 : AMD에서 먼저 개발하여 인텔에서 라이센싱)
x86이 x64보다 더 큰건줄 알았는데.. 무식..
인텔 문법
(왼쪽 dest)
mov dword ptr [b], 3
AT&T 문법
(오른쪽 dest)
movl $3, %eax
--- c:\users\owner\documents\visual studio 2017\projects\consoleapplication64\consoleapplication64\소스.cpp
void add(int& a) {//a는 integer a'의 어드레스
000D1670 push ebp
000D1671 mov ebp,esp
000D1673 sub esp,0CCh
000D1679 push ebx
000D167A push esi
000D167B push edi
000D167C lea edi,[ebp-0CCh] //ebp의 값-0CCh 를 edi에 넣는다.Load Effective Address
000D1682 mov ecx,33h
000D1687 mov eax,0CCCCCCCCh
000D168C rep stos dword ptr es:[edi]
const int b = 3;
000D168E mov dword ptr [b],3 //[b] 주소에 3을 넣는다.
a = a + b;
000D1695 mov eax,dword ptr [a] //[a]주소에 있는 값(a)를 eax에 넣는다.
000D1698 mov ecx,dword ptr [eax] //a에 있는 값(a')을 ecx에 넣는다.
000D169A add ecx,3 // ecx에 3을 더한다.
000D169D mov edx,dword ptr [a] //a에 있는 값을 edx에 넣는다.
000D16A0 mov dword ptr [edx],ecx //ecx 값을 edx(&a)에 넣는다.
return;
}
000D16A2 pop edi
000D16A3 pop esi
000D16A4 pop ebx
000D16A5 mov esp,ebp
000D16A7 pop ebp
000D16A8 ret
--- 소스 파일이 없습니다. ---------------------------------------------------------------