x64 レジスタ
x64 には64ビットの汎用レジスタが16個あります。
それぞれ64ビット(8バイト)、32ビット(4バイト)、16ビット(2バイト)、8ビット(1バイト)のレジスタとして使用することができます。
RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP は16bit CPUである 8086の時代から存在するレジスタの64bit拡張版8個です。
64 ビット | 32 ビット | 16 ビット | 8 ビット |
---|---|---|---|
RAX | EAX | AX | AH, AL |
RBX | EBX | BX | BH, BL |
RCX | ECX | CX | CH, CL |
RDX | EDX | DX | DH, DL |
RSI | ESI | SI | |
RDI | EDI | DI | |
RBP | EBP | BP | |
RIP | EIP | IP | |
RSP | ESP | SP |
64ビットモードで追加された汎用レジスタが8個(R8、R9、R10、R11、R12、R13、R14、R15)あります。
フラグレジスタ RFLAGS
ID : Identification フラグ
VIP : バーチャル割り込み保留
VIF : バーチャル割り込み
AC : アラインメントチェック
VM : 仮想86モード
RF : Resume フラグ
NT : Nested Task
IOPL : I/O 特権レベルフィールド
OF : オーバーフローフラグ。 算術演算の結果が2の補数で表せない大きさの場合にセットされます。
DF : 方向フラグ。ストリング命令 (MOVS, CMPS, SCAS, LODS, STOS)の自動インクリメント(set)とデクリメント(clear)を指定して文字列操作の方向を決めます。
IF : 割り込み許可フラグ
TF : トラップフラグ。デバッグ用のシングルステップモードに移行する。
SF : 符号フラグ。演算結果の最上位ビットと同じにセットされます。2の補数の正負を表します。
ZF : ゼロフラグ。演算結果がゼロのときにセットされます。
AF : ビット3からのキャリーやボローが発生した場合にセットされます。
PF : パリティフラグ。演算結果の下位8ビットのパリティを示します。下位8ビットの1の数が偶数なら1、奇数なら0になります。
CF : キャリーフラグ。このビットは算術演算、シフト、ローテイト命令で最上位ビットまたは最下位ビットから桁あふれが発生した場合にセットされます。
div arg
この命令は、レジスターの内容を「arg」で除算する。
除数のサイズ | 1 バイト | 2 バイト | 4 バイト |
---|---|---|---|
被除数 | AX | DX:AX | EDX:EAX |
剰余の格納先 | AH | DX | EDX |
商の格納先 | AL | AX | EAX |
#syscall
.code64
.text
.global main
main:
mov $msg, %rsi
mov $1, %rdi
mov $6, %rdx
mov $1, %rax
syscall
ret
.data
msg:
.ascii "hello "
以上。