章データの転送、およびアドレス演算

4.1データ転送命令

4.1.2オペランドの型

オペランドは、3つの基本タイプです。

    1. 即時 - デジタルテキスト式
    2. オペランドを登録する - という名前のCPUレジスタを使用して
    3. メモリオペランド - 参照されるメモリロケーション
操作数 説明
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 
技研・バイトを123 
STR2 WORDで。456 
STR3 DWORDを開始する。789 
作成ポインタ変数
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の主

 

おすすめ

転載: www.cnblogs.com/Mayfly-nymph/p/11482983.html