1

현재 어셈블리 언어 및 컴퓨터 아키텍처에서 수업을 듣고 있습니다. 우리는 x86 프로세서 용 MASM 프로그래밍을하고 있습니다. 나는 Macbook Air를 가지고 있기 때문에 물론 가상 컴퓨터에서 Windows를 실행하여 MASM에서 할당 과제를 프로그래밍해야합니다.MASM이 Mac OS X에서 작동하지 않는 이유는 무엇입니까?

혼란 스러울 정도 : 우리는 x86 아키텍처를 배우고 프로그래밍하고 있습니다. Macbook Air의 프로세서를 살펴볼 때 x86 계열에있는 것처럼 보였습니다. 그렇다면 왜 MASM은 Mac OS X에서 작동하지 않습니까?

어셈블리 언어가 하드웨어를 통해 직접 통신하는 경우 Apple 하드웨어에서 Windows OS를 설치하거나 VM을 통해 실행하는 것만으로 갑자기 MASM에서 프로그래밍 할 수 있습니까?

감사합니다, 이안

해명

[편집 : 나의 이해는 - 내가 틀렸다면 알려주십시오 - 어셈블리 언어가 같은 점이다 "당신이 저 갈 수있다." 나는. 사전 운영 체제이며 하드웨어 자체에 직접 지시 사항을 제공합니다. 따라서 x86 아키텍처 용 어셈블리 언어가 OS와 상관없이 모든 x86 시스템에서 작동하지 않는 이유를 이해할 수 없습니다.

+5

MASM은 Microsoft입니다. Mac OS X은 Apple입니다. Microsoft와 Apple은 서로를 좋아하지 않습니다. – Mysticial

+0

왜해야합니까? Xcode에는 자체 어셈블러가 있습니다. –

+1

@Mysticial 그들은 비밀 애호가입니다. –

답변

2

프로그램은 원시 시스템 코드 이외의 다른 구성 요소로 이루어져 있습니다. 실행 파일은 OS가 이해할 수있는 특수 형식을 가져야하므로 코드를로드하고 실행할 수 있습니다. 또한 코드는 적절한 호출 규칙과 함께 라이브러리 및 시스템 호출과 같은 특정 환경을 기대합니다.

어셈블리 프로그램을 컴파일하고 실행하려면 어셈블리를 먼저 어셈블해야합니다.이 경우 MASM을 통해 어셈블리 프로그램을 실행해야합니다. 그러나 MASM 자체는 Windows 실행 파일입니다. Windows 용 실행 파일 형식이며 라이브러리 및 운영 체제 기능을 적절하게 사용합니다. 따라서, 당신은 직접 맥 OS에서 그것을 실행할 수 없습니다. 그런 다음 일반적으로 동일한 문제가있는 코드도 링크해야합니다. 다음 문제는 프로그램 자체에 있습니다. MASM (및 나머지 도구 체인)은 기본적으로 창 (또는 dos)을 대상으로하므로 작성된 프로그램의 형식이 적절합니다.

Windows 및 masm을 사용하여 Mac OS에서 실행되도록 프로그램을 이론적으로 만들 수 있습니다. 이것을 일반적으로 크로스 컴파일이라고합니다. 툴 체인이 필요한 Mac 포맷을 지원하지 않는다면 모든 것을 손으로 만들어야합니다. Mac 환경을 기대하는 프로그램을 작성해야합니다. 예를 들어 dos 인터럽트 나 windows 라이브러리는 사용할 수 없습니다.

아키텍처가 동일하므로 cpu를 가상화 할 필요가 없습니다. 환경 만 모방하는 것으로 벗어날 수 있습니다. Windows 에뮬레이터 인 wine 또는 cygwin을 예로들 수 있습니다.

매우 유사한 비유 : 동일한 알파벳을 사용하는 사람의 언어가 있지만 번역 할 필요가 있습니다. 심지어 같은 알파벳을 사용하지 않거나 글자가없는 언어도 있습니다. 이 경우에는 더 많은 일을해야 할 것입니다.

+0

아주 좋은 설명, 더 많거나 적게 내가 썼을 것입니다. +1 –

+0

cygwin은 모방이지 모방이 아닙니다. – Jasen