そこで私はアセンブリプログラミングを始めました。私の Ubuntu ボックスでは非常に単純です。NASMamd GNU ld を使用して、多かれ少なかれ複雑な HelloWorld スタイルのプログラムを 30 分で作成できました。しかし、iPhone の場合は非常に複雑です。まず、4.2.1 ファームウェアの JB'en iPhone 3G を使用しています。つまり、Darwin カーネル v10 の ARM ポートを使用しています。2番。iPhone 用の NASM がないため、GNU を使用する必要があります。ネイティブ ツールチェーン (Mac OS X の Xcode と Linux のオープンソース ツールチェーンの両方) は GCC を使用します。そこで、次の基本情報をまとめました。 - GNU でアセンブリを言語として記述する方法。-基本的なARM命令、レジスタ、メモリアクセスは何ですか。
ただし、HelloWorld でさえ、stdout に書き込むためにカーネル呼び出しが必要です。私の質問は、どのカーネル呼び出しをどのように使用するか (どの引数がどこに行くのか) です。swi # ARM 命令を使用する必要がありますね。
それで、チュートリアルへの情報/リンク、またはARM Darwin Hello world asmコードを持っている人を投稿してもらえますか?
今のところ、私はこれを行うことができます:
;Hello World for Linux and NASM
section data
hello db "Hello World"
helloLen equ $ - hello
section text
global _start
_start:
mov eax, 4 ; sys_write
mov ebx, 1 ; to stdout
mov ecx, hello ; address of string
mov edx, helloLen ; value (because of eq!!!) of strLen
int 0x80 ; call awesome Linux kernel
mov eax, 1 ; sys_exit
mov ebx, 0 ; "return 0; " if you like C
int 0x80 ; call kernel to end program
ただし、ARMでは、次のようにすることしかできませんでした:
.text
start:
mov r0, #0
mov r1, #234
add r2, r0, r1
@all mov and add and other stuff works fine
swi #0xc00
@all that I get is Bad system call error
では、どなたかお願いします。