* naskの文法を適当にメモしてみる試み
 
 -レジスタ
  レジスタというのは、アセンブラにおける変数です。
  32bitのレジスタが8個あります。
    EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
    (これは変な順番だと思うかもしれませんが、CPUにおけるレジスタ番号順にならべると、こうなるのです。)
  32bitレジスタの一部だけを使って、16bitレジスタとして使用できます。
    AX, CX, DX, BX, SP, BP, SI, DI
  AXはEAXの下位16bitを流用しているために、EAXに値を代入するとAXの値が変化しますし、AXに代入するとEAXが変化します。他のレジスタについても同様です。
  例:EAX=123456789のとき、AXは52501になる(16進数で言うと、 0x75BCD15 と 0xCD15 )。
  16ビットレジスタの一部だけを使って、8bitレジスタとして使用できます。
    AL, CL, DL, BL, AH, CH, DH, BH
  AL〜BLは、AX〜BXの下位8bitです。AH〜BHはAX〜BXの上位8bitです。
 
 -MOV命令
  代入命令です。
  例:MOV EAX,1234 -- EAXレジスタに1234を代入(定数代入)。
    ASKAによる表記:EAX = 1234;
  32bitレジスタへの定数代入は、5バイトの命令なります。
  16bitレジスタへの定数代入は、4バイトの命令になります。
   8bitレジスタへの定数代入は、2バイトの命令になります。
  
  定数だけではなく、レジスタの内容を代入することもできます。
  例:MOV EAX,ECX -- EAXレジスタにECXの値を代入。
    ASKAによる表記:EAX = ECX;
  MOV命令は、同じビット数のレジスタ同士を代入できます。異なるビット数のレジスタ間でMOVすることはできません。
  32bitレジスタ間の代入は、2バイトの命令になります。
  16bitレジスタ間の代入は、3バイトの命令になります。
   8bitレジスタ間の代入は、2バイトの命令になります。
  
  さらに、レジスタの内容をメモリに書いたり、もしくはメモリから読み出すこともできます。
  例:MOV EAX,DWORD [1234] -- メモリアドレス1234の値をEAXに代入。
    ASKAによる表記:EAX = (int) [1234];
  EAXは32bitなので、メモリはDWORDでなければいけません。AXならWORD、ALならBYTEです。
  逆にいうと、メモリからレジスタへの代入、もしくはレジスタからメモリへの書き込みは、
  レジスタ名からメモリのアクセスサイズが推測可能なので、省略することもできます。
  例:MOV EAX,[1234]
    ASKAによる表記:EAX = [1234];
  メモリアドレスの指定をレジスタで行うと、短い命令になります。
  MOV EAX,[EBX]    -- 2バイトの命令
  MOV EAX,[EBX+12] -- 3バイトの命令
  MOV EAX,[1234]   -- 5バイトの命令
 
 -CALL命令
  C言語でいうところの関数呼び出しです。
  例:CALL label
    ASKAによる表記:label();
  5バイトの命令です。
  label部分に32bitレジスタや、4バイトのメモリを指定することもできます。
  例:CALL EAX
    ASKAによる表記:CALL(EAX);
  これはC言語でいうところの、関数へのポインタ、を扱うときに使います。
  この例ですと、2バイトの命令になります。
  いずれの場合もCPU内部では、「 PUSH(次の命令のEIP); EIP=指定したアドレス; 」 を実行しています。
 
 -DB/DW/DD命令
  この命令は特に翻訳などはしないで、指定された数値をそのままおくだけです。
  DDの場合、指定された数値を32bitずつおきます。DBは8bit、DWは16bitです。
  主にデータを記述するのに使います。たまに、アセンブラがサポートしていない命令の記述にも使います。
 
 -RESB命令
  指定された個数の DB 0 命令を並べます。 RESB 100 とすると、100バイトの0x00が並びます。
 
 -ALIGNB命令
  指定したアラインまでを DB 0 で埋めます。
 
 -ALIGN命令
  指定したアラインまでを NOP で埋めます。
 
 * こめんと欄
 #comment
 
 <a href= http://rpz3zmr75a.com >Google</a>

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS