2012-10-22 2 views
7

어셈블리 언어를 배우기 위해 계획 단계에 있으며 x86 어셈블리를 시작하고 64 비트 프로세서 (i7, i5 및 Core 2 Duo)가있는 컴퓨터가 필요합니다.) 및 운영 체제. 기존의 기계를 사용하고 학습/실습을하는 동안 잘못되도록하고 싶지 않기 때문에 필자는 이전의 하드웨어를 사용하여 값싼 32 비트 시스템을 구입하거나 구축 할 계획이었습니다. 그러나 그 전에는 같은 목적으로 가상 머신을 사용할 수 있는지 궁금합니다. 실행되는 기계 명령어는 가상 머신에만 국한되거나 가상 머신의 호스트 (즉, 내 컴퓨터 자체)와 상호 작용할 것입니까?가상 머신을 사용하여 어셈블리를 배우십시오

나는 누군가가 이미 그런 시도를했는지는 보지 못했지만 아무도없는 것처럼 보였습니다. 그렇기 때문에 의문이 순진한 경우 사과해야합니다. 아직 의회에 대해서는 전혀 몰라요. 그러나 누군가가이 주제에 대해 밝히고 안전하고 고립 된 환경에서의 어셈블리를 배우고 싶은 나 같은 사람들을위한 조언을 해줄 수 있다면 좋을 것입니다.

+0

문제없이 32 비트 코드로 64 비트 CPU로 사용할 수 있습니다. VM을 사용할 필요가 없습니다. – Gunner

답변

12

나는 강력하게 제안 :

1) 당신이 요구하는 것과 파에 명령어 집합 시뮬레이터 (사용). 성공에 대한 가시성과 성공 가능성, 좌절감, 포기 기회 감소.

2) 먼저 x86 어셈블리를 배우지 마십시오. (하드웨어를 가지고 있다면 먼저 x86 학습에 대한 나쁜 변명이다). 매우 나쁜 아키텍쳐, 좋은 아키텍처를 먼저 배우고 나중에 x86 학습을 배우고 나서 많은 시뮬레이터/에뮬레이터 중 하나를 사용하여 8088/86을 먼저 배웁니다.

3) 몇 가지 명령어 세트를 배우십시오. 좋은 명령어로 시작하면 다른 모든 명령어 세트와 프로그래밍 언어조차도 구문의 작은 문제입니다.

4) 어셈블리를 배우는 나쁜 방법 인 시스템 호출을 배우지 못하고 명령어 세트 및 방법을 배우십시오. 시스템 호출은 어셈블리를 학습하고 응용 프로그램을 계속 프로그래밍하도록 선택한 후입니다. .

msp430 (또는 pdp11/lsi11), arm, thumb, avr, mico8 및 기타 목록이 훨씬 좋습니다. 몇 가지를 배운 후에도 mips를 저장하십시오. 다른 아키텍처에 대한 잘못된 사고 방식에 빠질 수있는 흔치 않은 기능이 있습니다.

프로그래밍 기술이 이미 강력하다면 몇 일 만에 어셈블리를 수령 할 수 있으며 수주 내에 여러 명령어 세트를 가질 수 있습니다.이 가이드를 따라 서로 관련이없는 (좋은) 명령어 세트를 배운 다음 x86을 살펴보기 시작하면 정확히 왜 내가 마지막으로 또는 결코 그것을 배우지 않을 것을 권장하는지 알게 될 것입니다. 6502 및 그림과 일부 다른 것과 마찬가지로 역사적인 교육 가치가 있지만 가족 역사의 특성으로 인해 튜닝/프로그래밍 관점에서 그다지 벗어날 수 없습니다. 실제로 Zen of Assembly를 읽는 것이 좋습니다. 작성한 경우에도 일반적으로 성능 코딩에 대해 생각하는 방법에 관한 것이 었으며 8088/86 성능 튜닝에 대해서는 생각하지 않았습니다.

실제로 어셈블리를 배우는 좋은 방법은 디스어셈블러를 작성하는 것인데, 대부분의 명령어 세트는 가변 워드 길이이고 가변 워드 길이 디스어셈블러는 고급 프로그래밍 문제입니다. ARM과 thumb (thumb2가 아님)은 단어 길이가 고정되어 있으며 디스어셈블러를 매우 쉽게 작성할 수 있습니다.

+0

귀중한 제안을 공유해 주셔서 감사합니다. ARM과 AVR을 모두 지원하는 Atmel Studio 6 IDE를 살펴 보았습니다. 이것은 (특히 Visual Studio 배경에서 왔기 때문에) 시뮬레이터를 시작하기에 좋은 출발점입니까, 아니면 다른 옵션을 찾아야합니까? – Zishan

+0

필자는 다양한 상태의 시뮬레이터 세트를 가지고 있으며 특히 http://github.com/dwelch67 thumbulator를 테스트하고 있습니다. 또는 amber_samples를 참조하십시오. Avrsim 또는 이와 비슷한 것이 아닌 하나가 있습니다. 매달려 있거나 잡초에 처 박힌 경우를 대비하여 지침을 실행할 수 있기를 원합니다. qemu는 예를 들어 너무 멀리 떨어져있어 베어 메탈이나 어셈블리를 배우는 것보다 리눅스와 같은 운영체제를 사용하는 것이 좋습니다. –

+0

명확히하기.어셈블러에서 시스템 호출을 배우는 것은 모든 언어로 시스템 호출을 배우거나, 운영 체제 또는 GUI 패키지를 선택하거나 모든 API를 사용하는 법을 배우는 것과 같습니다. 시스템에 어떤 시스템 콜이 있으면 동일합니다. 명령문 집합과 시스템 호출 교육을 분리하십시오. 당신은 일주일 안에 asm에서 환경에 대한 모든 시스템 호출을 배우지 않을 것이지만, 일반적으로 프로그래밍을 이미 알고 있다면 빨리 asm을 배울 수 있습니다. –

2

qemu으로 시작하십시오. OS를 설치하지 않고도 프로그램 (원시 어셈블리, C, C++ 등)을 실행할 수있는 가벼운 VM입니다.

+0

감사합니다, JosephH. 시도해 볼 것입니다. – Zishan

3

예 가상 컴퓨터 내에서 어셈블리 프로그래밍을 할 수 있으며 가상 컴퓨터가 제공하는 명령 집합으로 제한됩니다. 64 비트 호스트 환경에서 32 비트 시스템을 수행하면 32 비트 명령어 만 표시됩니다.

어셈블리 프로그래밍은 호스트 환경에서 "안전하지 않은"것이 아니므로 다른 하드웨어를 모두 에뮬레이션하려는 경우가 아니면 VM을 사용할 필요가 없습니다. 부트 로더 및 작은 운영 체제.

비록 내가 디버거에 액세스 할 수 없으므로 부트 로더/운영체제 작성을 시작하지 않을 것입니다. 테스트주기가 길어질 것입니다. http://www.nasm.us/으로 시작하여 x86/x86-64 어셈블리를 배우거나 ARM 프로그래밍과 같은 작업을 수행 할 때는 http://wiki.qemu.org/Main_Page을 조사하십시오.

+0

감사합니다, 헥스 스트. 글쎄, 부트 로더와 OS를 작성하는 것은 나중의 목표에 따라 달라질 수 있지만 NASM을 사용해 보았고 어떤 이유로 Windows 8 (x64)이 마음에 들지 않는 것으로 나타났습니다 (호환성 문제). 리눅스를 실행하는 32 비트 VM이 더 좋을 것 같아요. NASM과 Qemu에게 그러한 시도를 해줄 것입니다. – Zishan

+0

NASM에 어떤 문제가 있습니까? NASM을 실행하고 64 비트 머신에서 32 비트 응용 프로그램을 만듭니다. – Gunner

+0

@Gunner NASM을 실행하려고 할 때마다 다음 메시지 대화 상자가 나타납니다. "프로그램 또는 기능"nasm.exe "는 64 비트 버전의 Windows와 호환되지 않기 때문에 시작하거나 실행할 수 없습니다. 소프트웨어 공급 업체에 문의하여 가능한 경우 64 비트 Windows 호환 버전 "을 선택하십시오. 메시지 대화 제목에 "지원되지 않는 16 비트 응용 프로그램"이 표시됩니다. NASM 웹 사이트에서는 다운로드가 16/32/64 비트인지 알 수 없습니다. – Zishan

0

는 특히 구현을 멀티 코어, Marss86

MARSSx86 (줄여서 MARSS) 사이클 정확한 전체 시스템을위한 도구 - 64 아키텍처의 시뮬레이션입니다보십시오. 우리의 목표는 기존 도구를 기반으로 단순하지만 효율적인 전체 시스템 아키텍처 시뮬레이션 환경을 만드는 것입니다.

0

는 ARM 아키텍처에 대한 어셈블리 언어를 배우려고 노력하는 경우는 내 제안은 방법도 to use qemu w.r.t assembly and its best place to start

http://www.bravegnu.org/gnu-eprog/index.html#intro

http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/

설명이있는 사이트라도 좋습니다 아래에서 기초를 배울 수있다

위 사이트에서 u는 qemu과 같은 가상 머신을 시도 할 수 있습니다. real hardware

관련 문제