asmjit / asmdb

Instructions database and utilities for X86/X64 and ARM (THUMB/A32/A64) architectures.
The Unlicense
327 stars 46 forks source link

Instructions missed implicit operands info #7

Open lyrachord opened 6 years ago

lyrachord commented 6 years ago

popa, popad pop 8 generals pusha, pushad push 8 generals

Maybe need a new registers flag string? seems "all" not an option, because call instruction and others maybe redefine the semantics of "all" xx/yx/zx like series for cases?

And vzeroall vzeroupper need a "all" kind of symbol to flag it.

lyrachord commented 6 years ago

There are many ins like the following in X64 which operand modifier is dx:zsi and like

    ["movsd"            , "X:<es:zdi>, X:<ds:zsi>"                      , "NONE"    , "A5"                               , "ANY REP REPNE    DF=R"],
    ["movsq"            , "X:<es:zdi>, X:<ds:zsi>"                      , "NONE"    , "REX.W A5"                         , "X64 REP REPNE    DF=R"],

I guess, since REX.W limits the instruction, so the register flag z- prefix is not necessary, it's fine that to just use r- prefix. And ecds-segment ignored in bits64 mode, it should be ignored.

["movsq"            , "X:<rdi>, X:<rsi>"                      , "NONE"    , "REX.W A5"                         , "X64 REP REPNE    DF=R"],

?

lyrachord commented 6 years ago
["syscall"          , "w:<rcx>,w:<r11>"                                            , "NONE"    , "0F 05"                            , "X64              Volatile"],
kobalicek commented 6 years ago

Hey good ideas, however, I think asmdb needs the concept of "hidden" registers, that's how it's called in other tools - hidden is everything that is not mentioned in operands and is accessed by the instruction. The only question is how to add it to the database.

Maybe something like to the metadata? HIDDEN=W:rcx,W:r11 or HIDDEN=W:zmm0..15[63:32]

Undecided, thinking about it, but yeah I think this is necessary for tooling.

lyrachord commented 6 years ago

one point, prefix?

[RWwXx-~:]operand
- for implicit, instead of <>
~ for commutative instead of ↔