アセンブリ言語 - フラグレジスタ

8086CPUフラグレジスタは、その中に格納された情報の16ビットは、一般的に、プログラム・ステータス・ワード(PSW)と呼ばれている含まれています。フラグレジスタは、それのすべてのビットは、特別な意味、記録の特定の情報を持っている、と言うことです仕事のビット、です。
8086CPUフラグレジスタ構造が示されています。
ここに画像を挿入説明

ZFフラグ

  • 米国特許第6フラグがZF、ゼロフラグです。これは、結果が0の場合、結果は、ZF = 1 0であるか否かを、実行命令に関連するレコード、結果が0でない場合、次いで、ZF = 0。
  • 8086CPUは、命令セットは、命令が実行され、いくつかのような、フラグレジスタ影響:追加、サブ、MUL、DIV、INC、または、及び大部分(算術または論理)演算命令である、など。
  • 主に転送命令である、など、ポップ、MOV、プッシュ:命令実行フラグのいくつかは、以下のような影響を、登録していません。

PFフラグ

  • 最初の二つのフラグはPF、パリティフラグです。それはすべてのビットの結果の1の(最下位の)数、記録命令の後に実行される:偶数、PF = 1であり、奇数である、PF = 0。

SFロゴ

  • ビット7フラグがSF、符号フラグです。これは、記録指示の後に実行され、結果が否定的、SF = 1であり、結果は、SF = 0正です。
  • 同じバイナリデータの場合、コンピュータは、符号なしのデータ操作としてそれを使用することができ、また実際には、問題、どのようにユーザーを見てすることが重要ではありません、署名データ操作として使用することができます。
  • 我々は次に、計算さ129 + 1に対応する命令を追加し、指示操作が符号なしオペランドとして実行追加することができ、その結果、130(10000010B)です。
  • また、オペランドの符号を有すると考えることができる算術加算命令は、その後、計算-127 + 1に対応する命令を追加し、結果は-126(10000010B)です。
  • 我々は、データを取る場合は、符号なし計算関連する命令は、その値に影響を与えるが、SFの値は、無意味です。

CFフラグ

  • フラグCF、キャリーフラグであるビット0。一般的に、中に符号なしの動作時間の値の上位ビットの最上位ビットは、ボロー値から計算、ビット以上の結果を記録します。
  • 一つのケースは、2つのデータの加算は2つの減算時間データは、それが可能である別の場合は、少し高く借りての最上位ビットを生成実行です。

フラグOF

  • 機械以上の結果として、署名された場合、実行オペランドが呼び出さオーバーフローで表現されます。
  • CFは、符号なし算術重要フラグ、及びOFである符号付き数意味の算術フラグ。

ADC命令

ADC命令はCFビットに記録されたキャリー値を利用する、キャリー付き加算です。

  • フォーマット:ADC操作対象、操作対象2
  • 機能:操作対象の操作対象1 = 1 + 2 + CF操作対象
  • このような命令のADCの斧、BXの機能を実現である:(AX)=(AX)+(BX)+ CF

ADCは、任意の追加大規模なデータを使用することができます。

SBB命令

SBB減算命令は、CFに記録ボロービット値を利用ずれベルト、あります

  • フォーマット:1つのSBBの操作対象、操作対象2
  • 機能:操作対象を操作すると、1 - 1 = 2-CFの操作対象オブジェクト
  • - (BX) - CF(AX)=(斧):このような命令SBB斧は、機能を実現BX

私たちは、任意の大きなデータのSBB命令減算を使用することができます。

CMP

CMPは比較的減算命令として命令を、機能しているが、結果は保存されません。CMP命令が実行された後、それはフラグレジスタに影響を与えます。

  • フォーマット:操作対象、操作対象をcmpの2
  • 機能:計算操作対象1- 2オブジェクトが、演算結果を格納しない、専用フラグレジスタは結果に応じて設定されます。

条件分岐命令の検出結果を比較すると、

ここに画像を挿入説明

  • E:等しい表します。
  • NE:等しくない表します。
  • B:下記を示しています。
  • NB:以下ません表わします。
  • 上記発現。
  • NA:上記ません表します。

DFフラグ転送命令列と

第1フラグ10はDF、方向フラグです。各操作後の処理命令列において、制御SI、ジ増減。

  • DF = 0:各操作SI後、ジ増加;
  • DF = 1:各操作SI後、ジデクリメント。
  • フォーマット:MOVSB(ワット)。
  • 機能:()バイト送信。
((es)×16 + (di)) = ((ds) ×16 + (si))
如果DF = 0则:
	(si) = (si) + 1
	(di) = (di) + 1
如果DF = 1则:
	(si) = (si) - 1
	(di) = (di) - 1

MOVSB MOVSW及びステップは、一般に、ストリング転送動作で実行され、両方の担当者をMOVSW MOVSB、次の形式と組み合わせて使用​​:

rep movsb。 ;rep的作用是根据cx的值,重复执行后面的串传送指令。

2つの命令はDFが8086CPUを以下にビット設定します。

  • CLD命令:0のDFフラグレジスタ位置
  • STD命令:DFフラグロケーションレジスタ

PUSHFとPOPF

  • PUSHF:スタックにフラグレジスタの値。
  • POPF:フラグレジスタにスタックからポップデータ
公開された20元の記事 ウォン称賛20 ビュー1998

おすすめ

転載: blog.csdn.net/Cdreamfly/article/details/104845818