Closed tomoyuki-nakabayashi closed 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つをそれぞれデコードしてあげる関数を用意しよう。
4889C0 mov rax,rax
nasmだと、0x89の命令(r/mがdestination)が使われる。0x8bの方が使われる場合はあるのか?
大体きれいになったが、デコーダがそろそろ限界だなぁ。分割する方法を考えていくか。
アドレシングモードとか理解できてきたので、体系的に修正しよう。