카테고리 없음

ISA와 프로세서

미런던 2017. 5. 10. 10:00

바람의 나라는 어셈블리어로 코딩되었다고 한다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

바람의나라 하고싶당... (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  

--- 소스 파일이 없습니다. ---------------------------------------------------------------