2009-02-22 5 views
7

저는 현재 어셈블리 언어를 배우는 중입니다. Linux Mint (32 비트)에 Gas을 사용하고 있습니다. 이 책 사용 : Programming from the Ground Up. 내가 사용64 비트 Linux, 어셈블리 언어, 문제점?

기계는 AMD Turion 64 bit 프로세서를 가지고,하지만 난 RAM 2GB의 제한입니다. Linux 설치를 64 비트 버전의 Linux Mint로 업그레이드하려고 생각하지만이 책은 32 비트 x86 아키텍처를 대상으로하므로 코드 예제가 작동하지 않을 것으로 우려됩니다.

그래서 두 가지 질문 :

  1. 코드 샘플에 문제가 될 가능성이 있습니까?
  2. 여기에 (나는 이것에 대해 스택 오버플로에 대한 몇 가지 스레드를 본 적이 있지만, 윈도우 XP 대 Windows Vista로 주로 관련되어 있습니다.)
을 통해 32 비트를 64 비트 리눅스를 사용하여 일반적으로 어떤 혜택을 누구 발견했습니다

답변

4

코드 예제가 모두 작동해야합니다. 64 비트 프로세서 및 운영 체제는 일종의 "호환 모드"로 32 비트 코드를 실행할 수 있습니다. 귀하의 어셈블리 예제도 마찬가지입니다. 추가 어셈블리 라인을 제공해야 할 수도 있습니다 (예 : .BITS 32).하지만 그게 전부입니다.

일반적으로 64 비트 OS를 사용하는 것이 32 비트 OS를 사용하는 것보다 빠릅니다. x86_64에는 i386보다 많은 레지스터가 있습니다. 어셈블리 작업을하기 때문에 어떤 레지스터가 사용되는지 알 수 있습니다 ... 스택이 많아지면 스택 (및 다른 임시 메모리)을 이동해야하므로 프로그램에서 데이터를 관리하는 데 더 적은 시간을 소비합니다. 해당 데이터를 작업하는 데 더 많은 시간이 소요됩니다.

편집 : 당신이 리눅스 64 비트를 실행하더라도 the GAS manual

+0

대단히 감사합니다. 가장 도움이됩니다. – bplus

1

에서 언급 한 바와 같이, 방금 명령 줄 인수를 "--32"를 사용 가스를 사용하여 64 비트 리눅스에 32 비트 코드를 컴파일하려면 32 비트 바이너리를 컴파일하고 실행할 수 있습니다. 민트의 지원이 얼마나 좋은지 모르겠다. 검사를해야한다고 생각한다. 당신이 다른 (더) 레지스터를 가지고 예를 들어

64 비트 어셈블러는하지만, 32 비트 완전히 호환되지 않습니다. 두 플랫폼 중 일부에서는 사용할 수없는 특정 지침이 있습니다.

나는 64 비트로 옮기는 것이 중요하지 않다고 말할 것이다. 당신은 여전히 ​​32 비트 어셈블리을 작성할 수 있으며, 더 많은 프로그래밍/학습 재미의 원천 인 64 비트 (너무 어렵지 않아야 함)로 실행하려고 시도 할 수도 있습니다.

+0

감사합니다. 매우 유용합니다! – bplus

+0

다른 답변이 더 마음에 드는 지 알고 싶지만 내 도움이된다고 생각하면 +1 투표를 할 수 있습니다.)하지만 내 의견에 만족합니다. :) – ypnos

1

일반적으로 32 비트가 많으므로 실제로 IT가 필요한 경우 64 비트 이상 만 사용하십시오. 프로그래밍하기 전에 32 비트 응용 프로그램 또는 64 비트 응용 프로그램으로 작업 한 다음 혼합 모드 디버깅으로 사용하기에 앞서 결정하는 것이 좋습니다. 까다로운 작업을 빠르게 수행 할 수 있습니다.

관련 문제