4.1データ転送命令
4.1.2オペランドの型
オペランドは、3つの基本タイプです。
- 即時 - デジタルテキスト式
- オペランドを登録する - という名前のCPUレジスタを使用して
- メモリオペランド - 参照されるメモリロケーション
操作数 | 説明 |
---|---|
REG8 | 8汎用レジスタ:AH、AL、BH、BL、CH、CL、DH、DL |
Regl6 | 16ビットの汎用レジスタ:AX、BX、CX、DX、SI、DI、SP、BP |
reg32 | 32ビットの汎用レジスタ:EAX、EEX、ECX、EDX、ESI、EDI、ESP、EBP |
REG | 汎用レジスタ |
快適 | 16ビットのセグメント・レジスタ:CS、DS、SS、ES、FS、GS |
IMM | 8、16ビットまたは32ビット即値データ |
IMM8 | 8、即時バイトの値 |
IMM16 | 16、即時ワード値 |
IMM32 | 32ビットの即値データ、ダブルワード値 |
REG / MEM8 | 8オペランドは8ビット汎用レジスタまたはメモリのバイトであってもよいです |
REG / mem16 | 16ビットの即値データは、16ビットの汎用レジスタまたはメモリワードであってもよいです |
REG / mem32 | 32ビットのダブルワード汎用レジスタまたはメモリであることができる32ビットの即値 |
MEM | 8、16ビットまたは32ビットのメモリ・オペランド |
ダイレクトメモリオペランド:参照された変数名は、データセグメント内のオフセットされます。
4.2加算および減算
4.2.4 NEG命令
NEG:その反対側の番号を取得するために対応する相補的コードによってデジタル変換。
TITLEが追加 と減算 Irvine32が含まれています。INC ; 计算26 +( - 25) .DATA ヴァルSDWORD 25 .CODE メインPROCの MOVのEAX、ヴァル NEG EAXを、-25 追加 EAXを、26 コールDumpRegs INVOKEのExitProcess、0 メインENDPの ENDのメイン
4.3とオペレータと関連データのディレクティブ
オペレータがデータラベルのオフセットを返しますOFFSET。バイトオフセットこれは、それが基準距離データセグメントからのデータの開始アドレスを示します。
TITLEのテストは Irvine32が含まれています。INC .DATA ヴァルSDWORD 25 VAL1 SDWORD 66 .CODE メインPROCの MOVのESI、ヴァルのOFFSET のMOV EDIを、VAL1のOFFSET のMOV EAXを、0 のMOV EAX、[ESI] 呼び出しDumpRegs INVOKEのExitProcessを、0 主ENDPの ENDの主
変数バイト境界、単語の境界、またはダブルワード境界段落の境界を揃えるディレクティブを合わせます。
BVAL BYTE? ; 00404000h ALIGN 2 wVal WORD? ; 00404002h bVal2 BYTE? ; 00404004h ALIGN 4 DVAL DWORD? ; 00404008h dVal2 DWORD? ; 0040400Ch
PTR演算子はオペランドが型サイズを宣言されている書き換えるために使用することができます。
TITLEのテストは Irvine32が含まれています。INC .DATA ヴァルSDWORDの12345678hが .CODE メインPROCの MOVの EAX、0 のMOV AX、WORD PTRヴァルを、AX = 5678hの コールDumpRegs INVOKEのExitProcess、0 メインENDPの ENDのメイン
TYPEオペレータは、可変サイズの単一要素、計算のサイズをバイト単位で返します。例えば、TYPEバイトは、戻り値は1であり; TYPEワードが、戻り値は2であり; TYPEダブルワードが、戻り値は4であり、TYPEのクワッドワードは、戻り値は8です。
数は、アレイ内のオペレータ演算要素LENGTHOF要素の数は、数値の配列が定義された同じ行に表示されています。
LABELディレクティブは、ラベルに挿入され、そのサイズ属性の定義が、参考のためにストレージを割り当てていないことがあります。
.dataの val16のLABEL WORD val32 DWORD 12345678h .CODEの MOVの斧、val16 。AX = 5678hの MOVの DX、[val16 + 2 ] 。DX = 1234H
4.4間接アドレス指定
4.4.1間接的なオペランド
保護モード
任意の32ビット汎用レジスタ(EAX、EBX、ECX、EDX、ESI、EDI、EBP、およびESP)は括弧間接オペランドを構成することができます。
インデックスのオペランド
インデックスオペランドは有効なアドレスを生成するために、レジスタに定数を加算を指します。各32ビット汎用レジスタインデックス・レジスタとして使用することができます。MASMは、(ブラケットが部分的シンボルである)インデックス付きの操作を表すために異なるシンボルを使用することができます。
16ビットレジスタ
実アドレスモード、インデックス付きの動作として一般に16ビットのレジスタです。この場合、レジスタはSI、DI、BXおよびBPを使用することができます。
インデックス付きスケールファクタ操作
シフト量を計算する際に、指数オペランドは、各アレイ素子のサイズを考慮しなければなりません。そのようなダブルワードの実施形態では、添え字(3)オフセットアレイ素子400Hのためのコンテンツを生成するために、図4(ダブルワードサイズ)によって乗算されるよう
4.4.4ポインタ
TITLE テストプログラム Irvine32挙げられる。INCは 、ユーザー定義型を作成 PBYTE TYPEDEF PTR BYTE PWORD TYPEDEF PTR WORD PDWORD TYPEDEFはPTR DWORDは .DATA 技研・バイトを1、2、3 STR2 WORDで。4、5、6 STR3 DWORDを開始する。7、8、9 、作成ポインタ変数 PTr1はPBYTE技研 PTR2 PWORD STR2はで PTR3 PDWORD STR3は .CODE PROCメイン MOV ESI、PTr1は、ポインタ変数代入の値 MOV EAX、0 MOVをら、[ESI + TYPE 0009] のMOV EAX、0 のMOV ESI、PTR2の MOVの斧、[ESI + TYPE STR2] のMOV EAX、0 のMOV ESI、PTR3の MOVのEAX、[ESI + TYPE STR3] 呼び出しDumpRegsの 出口 主ENDPの ENDの主