tomoyuki-nakabayashi / Rustemu86

Apache License 2.0
5 stars 0 forks source link

Mov命令の実装を見直す #23

Closed tomoyuki-nakabayashi closed 6 years ago

tomoyuki-nakabayashi commented 6 years ago

アドレシングモードとか理解できてきたので、体系的に修正しよう。

tomoyuki-nakabayashi commented 6 years ago

まず、Movのオペランドエンコーディングには6種類ある。

Op/En Operand 1 Operand 2 Operand 3 Operand 4
MR ModRM:r/m (w) ModRM:reg (r) NA NA
RM ModRM:reg (w) ModRM:r/m (r) NA NA
FD AL/AX/EAX/RAX Moffs NA NA
TD Moffs (w) AL/AX/EAX/RAX NA NA
OI opcode + rd (w) imm8/16/32/64 NA NA
MI ModRM:r/m (w) imm8/16/32/64 NA NA

オペランドは2つあれば良い。 現状は、FD/TD以外の4つが識別できれば良い。 デコーダでは、4つをそれぞれデコードしてあげる関数を用意しよう。

tomoyuki-nakabayashi commented 6 years ago
4889C0            mov rax,rax

nasmだと、0x89の命令(r/mがdestination)が使われる。0x8bの方が使われる場合はあるのか?

tomoyuki-nakabayashi commented 6 years ago

大体きれいになったが、デコーダがそろそろ限界だなぁ。分割する方法を考えていくか。