私は2.53 GHzのIntel Core 2 Duoプロセッサ搭載のMacBook Proを使用していますが、MacユーザーはAT & T構文を従わなければならないと言われました(これはIntelを実行しているので混乱します)。 x86(これが正確に何を意味するかわかりません)。Macでのアセンブリの使用
私は組み立てに入る必要がありますが、始めるのは非常に難しいと感じています。構文が大きく異なるオンラインのアセンブリコードを検索し、基本的なアセンブリ方法を説明するリソースが見つかりません。私はレジスタとスタックについて読んでいますが、これを見る方法を理解していません。誰か説明したり、正しい方向に向けることができますか?たとえば、私が動作することが判明した唯一のコードであるこのコードを考えてみましょう:
.data
_mystring: .ascii "Hello World\n\0" #C expects strings to terminate with a 0.
.text
.globl _foo
_foo:
push %ebp
mov %esp,%ebp
pushl $_mystring
call _myprint
add $4,%esp
pop %ebp
ret
非常に単純ですが、それは何ですか?私は、このコードがどのように機能するかを理解するのに混乱する時間を抱えています。私は他の言語の中でもJava、PHP、Cをよく知っていますが、これはそのステップと構文ですが、私には分かりません。ここではそれに行くには、メインファイルです:
#include <stdio.h>
void foo();
void myprint(char *s)
{printf("%s", s);}
main()
{foo();}
はまた、数字だけを乗算され、これはあります:
.data
.globl _cntr
_cntr: .long 0
.globl _prod
_prod: .long 0
.globl _x
_x: .long 0
.globl _y
_y: .long 0
.globl _mask
_mask: .long 1
.globl _multiply
multiply:
push %ebp
mov %ebp,%esp
mov $0,%eax
mov _x,%ebx
mov _y,%edx
LOOP:
cmp $0,%ebx
je DONE
mov %ebx,%ecx
and $1,%ecx
cmp $1,%ecx
jne LOOPC
add %edx,%eax
LOOPC:
shr $1,%ebx
shl $1,%edx
jmp LOOP
DONE:
pop %ebp
ret
とそれに行くためのmain.c:
#include <stdio.h>
extern int multiply();
extern int x, y;
int main()
{
x = 34;
y = 47;
printf("%d * %d = %d\n", x, y, multiply());
}
そして、最後に小さな質問3つ:
.s
と.h
ファイル名(私は1つは、何のためにあるmain.c
とmain.h
、両方を持っている)の違いは何ですか?なぜアセンブリには、それと一緒に行くには
main.c
が必要ですか/どのように呼びますか?誰もがEclipseのような優れた組立IDEはJavaやPHP誰の答えに
おかげで(これは実際にはこのサイト上の私の最初の投稿です)、私がしようとしてきたためであるお勧めしますこれを数日間把握し、私が読んだすべてのリソースはアセンブリロジックを私に説明していません。それは.data
または.text
が何を言いますが、彼らが何を意味するかを理解するであろう「アセンブリが考える」方法を知っているだけで誰か? また、誰かがニューヨーク市の周りにいて、AssemblyやCでとても気分が良ければ、プライベートレッスンが大好きです。私はこの言語には多くの可能性があり、それを学びたいと思っています。
参照:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html –
「nasm」には最新バージョンのXcodeが付属しています。これをインテルの構文で使用することができます。 Wikibooksには[x86アセンブリの書籍](https://en.wikibooks.org/wiki/X86_Assembly)もあります。 –
どのようなアプリケーションを作成する予定ですか? –