어셈블리에서 계속 읽었습니다. 내가 프로그래밍 언어에 대해 이해 한 것에서 볼 때, 컴파일러 (어셈블러 ... 두 곳 사이의 미묘한 차이가 있음을 알고 있습니다.)가 객체 코드를 생성합니다. 컴퓨터 언어의 비우호적 인 슬픈 지시어 무효. 이 객체 코드는 프로세서에 의해 해석되며, 그 후에 링커는이를 실행 가능하게 만듭니다. 나는 각 프로세서가 올바른 어셈블리를해야한다는 것을 알고 있습니다. 예. .386, .486, .586 나를 괴롭히는 것은 MASM을 통한 DOS 프로그램 실행과 NASM 또는 GAS가없는 Linux를 통한 동일한 프로그램 실행 사이의 차이점입니다. 소스 코드가 오브젝트 코드로 컴파일 된 경우이 시점에서 크로스 플랫폼이 아닙니까? 나는 델처럼 윈도우를 리눅스처럼 쉽게 듀얼 부팅 할 수있다. 내가 여기서 무엇을 놓치고 있니?Linux, Windows에서 실행중인 어셈블리
또한 개체 코드를 볼 수있는 방법을 찾고 있으므로 이퀄 타임 디버거를 통해 실행을 해독 할 필요가 없습니다. 필자가 작성한 소스 코드에 대한 Directive machine code Directive. 리눅스에서 objdump와 같은 결과를 낼 수있는 방법이 있습니까?
[게시물에 서명 또는 태그 라인을 추가하지 마십시오.] (http://stackoverflow.com/faq#signatures). – meagar
DOS는 (16 비트) 리얼 모드로 실행되며 이는 32 비트 Windows/Linux에서 사용되는 보호 모드와 매우 다릅니다. 그것은 매우 다르므로 다른 아키텍처 (ARM과 MIPS와 같은)로 간주 될 수 있으므로 더 이상 플랫폼이 아닙니다. Windows는 DOS 바이너리를 실행하기 위해 특별한 하드웨어 호환 모드 (가상 모드)를 사용하지만 최신 (x86_64) 시스템에서도 더 이상 가능하지 않습니다. – hirschhornsalz
어셈블리의 중요성은 어셈블리가 저수준이지만 여전히 OS. 그리고 낮은 레벨이기 때문에 OS와 완전히 다른 가장 낮은 수준의 호출 메커니즘을 사용하여 OS와 상호 작용해야합니다.또한 어셈블리는 종종 OS 자체에 따라 완전히 다르게 배치되는 자체 프로세스를 위해 메모리에 직접 액세스합니다. 당신은 DOS와 리눅스에서 커맨드 라인 인수에 필요한 다른 어셈블리 소스를 보았을까요? – Linuxios