「アセンブリ言語は、」 - 実行の流れを制御します

参考文献:

 「アセンブリ言語のプログラミング」

.................................................. .................................................. .................................................. ......................................... 

 プログラムは無条件分岐に遭遇した場合に実行される制御処理を学習、命令ポインタ自動的に別の場所にジャンプ、無条件分岐の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    40007890                        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を

 

おすすめ

転載: www.cnblogs.com/mysky007/p/11111780.html