組み立て
eaxが0か、それ以上か、それ以下かをテストします。この場合、eaxが0の場合にジャンプが実行されます。テストの意味は、引数をAND演算して、
nasmソースを見ると、次のようになります。'oword '/' DO 'は' word '(' octoword 'のO)の8倍の大きさで、dqword(' double-quad ')と同義です。それは12になります
私の理解によると、cmplは符号なしを比較します。ある意味で両方を行います。符号付きと符号なしの違いは、ここではジャンプ命令の使用法です。
命令セットを作成するときは、作成できる命令の総数など、いくつかの制約に縛られます。 MIPSの作成者は、
呼び出し元が保存したレジスター(別名、揮発性レジスター、または呼び出しクローバー)は、呼び出し間で保存する必要のない一時的な量を保持するために使用されます。その理由のために
汎用とは、これらのレジスタのすべてが、汎用レジスタを使用して計算を行う命令で使用される可能性があることを意味しますが、たとえば、使用することはできません。
x86アーキテクチャに存在するメモリバリア(ただし、これは一般的に当てはまります)は、previous1のすべてのロードまたはストアが完了することを保証するだけではありません。
MOV命令ドキュメントから、64ビットのイミディエートを任意のレジスタに移動できるが、64ビットのイミディエート絶対アドレスを含むロード/ストアが可能であることがわかります。
2つのレジスタを比較する場合は、どちらのオペコードを使用してもかまいません。唯一の違いは、使用されるオペコードとして、レジスタをメモリオペランドと比較する場合です。
TL; DR:ADD SP、nの場合、ビット3からビット4へのキャリーが発生すると、Hフラグが設定されます。これを実際のハードウェアでテストすることにしたので、GB-Z80aで簡単なテストROMを作成しました。
cmp a、bを実行すると、フラグはa-bを計算したかのように設定されます。次に、jmp-type命令はこれらのフラグをチェックして、ジャンプを行う必要があるかどうかを確認します。の
Gnuアセンブラでは、コメント開始文字はターゲット固有です。 i386およびx86_64の場合は#です。 ARMv7の場合は@です。他のいくつかのコメント規則は、いくつかの下で機能します
Zang MingJieがコメントですでに述べているように、テストeax、eaxはcmp eax、0とほぼ同じですが、cmpを使用する場合はsuする必要があるため、cmpよりも短い点が異なります。