Skip to content

MOV need to be splitted to mem and nomem syntaxes #52

Closed as not planned
Closed as not planned
@Kashio

Description

@Kashio

Right now MOV encoded with opcode 8E use operand type w for its operand of addressing E which is defined as:

Word, regardless of operand-size attribute (for example, ENTER).

According to the intel docs:

        8E /r MOV Sreg,r/m16** RM Valid Valid Move r/m16 to segment register.
REX.W + 8E /r MOV Sreg,r/m64** RM Valid Valid Move lower 16 bits of r/m64 to segment register.

When dealing with memory addressing the operand always points to word pointer as expected, but when dealing with register addressing, one need to specify the full register name even tho the instruction only uses the lower 16 bit of the register, thus I think the appropriate solution would be to split the syntax to mem and nomem attributes, when the mem one has operand type w and the nomem one has operand type v because the operand size prefix can affect the register in use according to my testing on objdump which is defined as::

Word or doubleword, depending on operand-size attribute (for example, INC (40), PUSH (50)).

For 64 bit mode the operand type should be vqp which is defined as:

Word or doubleword, depending on operand-size attribute, or quadword, promoted by REX.W in 64-bit mode.

EDIT: clarity

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions