* naskの文法を適当にメモしてみる試み
-SHL/SHR/SAL/SAR命令
シフト命令です。シフトって何?という人は、とりあえず簡易な乗算/除算命令だと考えるといいでしょう。
例:SHL EAX,2 -- EAXを左に2ビットシフト。
ASKAによる表記:EAX <<= 2; もしくは EAX *= 4;
SHL/SHRは符号無し演算で、SAL/SARは符号付き演算です(SHLとSALの動作に差はない)。
第一オペランドである演算対象は、8/16/32bitのレジスタやメモリを指定できます。
第二オペランドであるシフト回数は、定数か、もしくはCLを指定できます。
いずれの指定でも、シフト回数は指定した値を32で割ったあまりが採用されます。
だから32以上のシフトはできません。
シフトで追い出されたビットはCF(キャリーフラグ)にコピーされます。0回シフトの場合、CFは不定です。
2回以上のシフトの場合、最後のシフトで追い出されたビットがCFに残ることになります。
当然のことですが、第一オペランドにメモリを指定する場合、BYTE/WORD/DWORDの指定を省略することはできません。
アセンブラがデータ幅を推測する手がかりがないからです。
-CMP命令
-Jcc命令
-PUSH命令
-POP命令
-LEA命令
-DIV命令
-ADD/SUB/AND/OR/XOR命令
-INC/DEC命令
-RET命令
* こめんと欄
#comment