- 아키텍쳐
arm과 x86계열은 당연히 다르겠지
구조부터 명령어셋까지 전부
이건 어렴풋이 다들 이해하고 있을거임
그런데 x86과 x86_64도 약간의 차이가 있음
대표적인게 x86에는 R8 ~ R15까지의 레지스터가 없고, 32비트크기겠지
실제로 RAX, R8같은 레지스터를 사용한 어셈블리를 32비트 타겟으로 컴파일 시도하면 실패할걸
- OS
역시 OS별로도 차이가 있음
일단 실행파일 형식이 다른데 리눅스의 ELF(옛날에는 aout 썼었음), 맥의 Mach-O등이 있다
호출규약도 OS 별로 다름
똑같은 x86_64를 써도 호출시 인자값을 유닉스의 경우 RDI, RSI, RDX, RCX, R8, R9 순으로 6개의 레지스터를 순서대로 사용하는 반면 윈도우는 RCD, RDX, R8, R9를 사용함 (이 이상은 스택을 사용)
이외애 OS별로 제공하는 시스템콜은 당연히 다를테구
심지어 x86 리눅스와 x86_64 리눅스도 다름
예를 들어 sys_exit와 sys_write의 콜 넘버는 각각 1과 4[x86], 60과 1[x86_64]임
어제 올린다는게 깜박잊고 자버려서;; ㅋㅋ
- dc App
ARM 버전 7과 8은 완전 다른데 같은 CPU로 취급되지만 IA-32와 AMD64의 차이는 연산 단위와 주소 지정 범위, 레지스터 확장을 제외하면 크게 다른점이 없음. 기계어 레벨에서 보면 64비트 모드에서 32비트 코드 쓸때는 원래 32비트랑 별 차이 없을정도...
ㅇㅇARM은 완전 다르다더라. AMD64의 경우 일부러 하위 호환성 고려해서 만든 버전이니..
다르거든요?