汎用レジスタ
x86 CPUには8つの汎用レジスタがありデータの格納に用いられる。EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI。
これらのレジスタは4バイトであり、プログラムは4バイト、2バイト、1バイトの値としてレジスタにアクセス可能。
下位2バイトにはAX,BX,CX,DX,SP,BP,SI,DIとしてアクセス可能。
下位1バイトにはAL,BL,CL,DL,2バイト目にはAH,BH,CH,DHでアクセス可能。
命令レジスタ
EIPは命令ポインタが格納されており、メモリ内の次の命令のアドレスを指す。
セグメントレジスタ
CS,SS,DS,ESがある。
CS:コードセグメント。次に実行するコード(機械語)へのポインタ。
SS:スタックセグメント。スタックへのポインタ。
DS:データセグメント。データへのポインタ。レジスタとメモリのデータ転送時に参照される。
ES:エクストラセグメント。追加のデータへのポインタ。
FS,GS:さらなるデータへのポインタ。
データの移動
基本文法
mov dst, src
レジスタへの格納
mov eax, 1 //eaxに1の格納
レジスタ間の移動
mov ebx, eax //ebx=eax
メモリからレジスタ
mov eax, [0x123456] //0x123456のアドレスの値をeaxに格納
格納先のレジスタの大きさに応じて移動させる値のサイズも変わる。
算術演算
add 加算
sub 減算
mul 乗算
div 除算