参考文献:
「アセンブリ言語のプログラミング」
.................................................. .................................................. .................................................. .........................................
プログラムは無条件分岐に遭遇した場合に実行される制御処理を学習、命令ポインタ自動的に別の場所にジャンプ、無条件分岐の3つの方法で使用することができます。
ジャンプ、コール、割り込み
プログラムでの動作が異なる各ブランチは無条件に、あなたは、プログラムロジックでのこれらのタイプの違いで、次の外観を使用するかを決定し、アセンブリ言語プログラムでそれらを実装することができます
ジャンプ
ジャンプアセンブリ言語のプログラミングは、高レベルの言語でのGOTO文に似た枝の最も基本的なタイプですが、使用した後藤は貧しいコーディングを考えられるであろうが、コンパイルはそうは思わないでしょう。
実際には、単一のアセンブラジャンプ命令は、ジャンプ操作コードの異なる3種類のいずれかにコンパイルされています。
ショートジャンプ、近くのジャンプ、遠くジャンプ
ジャンプのこれらの3つのタイプのメモリ位置と現在の命令の目的地点のメモリ位置との間の距離によって決定されます。スキップするバイト数に基づいて決定し、そのタイプを使用して、ジャンプ
栗の場合:
1 .SECTIONの.text 2 .globl _start 3 _start: 4 NOP 5 MOVL $ 1、%eaxに 6 JMP overhere 7 MOVL $ 10、%EBX 8 INT $ 0x80を 9 overhere: 10 MOVL $ 20、%EBX 11 のint $ 0x80を
プログラムの実行:?$エコー
の結果:20
1 objdumpの- D jmptest 2 3 jmptest:文件格式ELF64-x86ベース64 4 5 6 部の.textの分解: 7 8 0000000000400078 <_start> : 9 400078: 90 NOP 10 400079:B8 01 00 00 00 MOVする$ 0x1の、%EAX 11 40007e:EB 07 JMP 400087 <overhere> 12 400080:BBが0A 00 00 00 のMOVの$ は0xa、%のEBX 13 400085:CD 80 int型 の$ 0x80を 14 15 0000000000400087 <overhere> : 16 400087:BB 14 00 00 00 MOV $ 0x14の%の、EBX 17 CD:40008c 80 INT $ 0x80を