私は、アセンブリで簡単なプログラミングを行う方法を理解しようと試みました。私はチュートリアルの hello world プログラムを調べていますが、彼らが説明したことのほとんどは理にかなっていますが、彼らは本当にそれについて詳しく説明していません。プログラムのいくつかの異なる部分を理解するための助けが必要です。ここに彼らのチュートリアルの例があります -
section .text
global main ;must be declared for linker (ld)
main: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;our dear string
len equ $ - msg ;length of our dear string
テキストセクションとデータセクションがあります。データ セクションには、プログラムのユーザー定義情報が保持されているようです。プログラムの「枠」がテキスト部、「肉」がデータ部のようですが…?コンパイル時にプログラムがテキストセクションを実行し、データセクションのデータがテキストセクションに入力されていると思いますか? bss/text/data セクションの相互作用は、私にはなじみのないものです。msg と len.... 変数があるデータ セクションでも?が言及されていますが、その後に、何を確認すればよいかわからない情報が続きます。msg の後に db が続きますが、これはどういう意味ですか? 次にテキスト、そして 0xa です。0xa は何のためのものですか? また、len の後に equ が続きますが、これは equals という意味ですか? len は、dollarsign から msg 変数を引いたものですか? ドル記号とは何ですか? 一種のオペレーター?テキストセクションの指示も、mov ebx,1 どうやら、またはプログラムに STDOUT を使用するように指示しているようですか? ebx レジスタに 1 を移動することは、stdout を設定するための標準的な命令ですか?
おそらく、誰かが推奨するもう少し完全なチュートリアルを持っていますか? 私はアセンブリで汚れることを探しており、必要に応じて「コアの基礎」のいくつかを自分自身に教える必要があります。助けてくれてありがとう!