やっとやる気になったので命令をググっていきたいと思います。
今回もアーキテクチャはx86デス。
Intelでの記法になるのかな?ここらへんよくわかりません!
それでは始めます。
- MOV <値の移動>
MOV EBP, ESP ; ESPの値をEBPにコピー MOV EAX, 33 ; 33をEAXに代入 MOV [1234h], EBX ; 1234h番地にEBXをコピー ; 書式 ; MOV レジスタ|メモリ, レジスタ|メモリ|即値 ; 右から左へ代入される
影響を受けるフラグ
- なし
値を移動する命令
メモリからメモリの移動はできない
- ADD <足し算>、ADC <桁上りを考慮した足し算>
ADD EAX, EBX ; EAX = EAX + EBX ADD EAX, 10 ; EAX = EAX + 10 ADD EAX, [1234h] ; EAX = EAX + 1234h番地の内容 ; 書式 ; ADD レジスタ|メモリ, レジスタ|メモリ|即値
影響を受けるフラグ
OF | SF | ZF | AF | CF | PF |
ADCはキャリーフラグの値も足される
桁上りを計算できる
- SUB <引き算>、SBB <桁借りを考慮した引き算>
SUB EAX, EBX ; EAX -= EBX SUB EAX, 10 ; EAX -= 10 SUB EBX, '0' ; EAX -= '0'
引き算をする命令。
影響を受けるフラグ
OF | SF | ZF | AF | CF | PF |
SBBはキャリーフラグが立っていたら-1する。
- MUL <符号なし掛け算>、IMUL <符号あり掛け算>
MUL EBX ; EAX *= EBX IMUL ECX ; EAX *= ECX ; 書式 ; MUL レジスタ
掛け算をする命令
IntelCPUの仕様で動作が、 「EAX *= レジスタ」になるらしい。
バイト、ワード、ダブルワードで格納するレジスタの容量が違う
型 | bit数 | 格納先レジスタ |
---|---|---|
byte | 8bit | AL |
word | 16bit | AX |
dword | 32bit | EAX |
- DEV <符号なし割り算>、IDEV <符号あり割り算>
DEV EBX ; EAX /= EBX IDEV ECX ; EAX /= EAX
割り算をする命令
0で割ってはいけない。
MULと同様 「EAX /= レジスタ」になる。
次回から適当になります