The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Asm::X86 - List of instructions and registers of x86-compatible processors, validating and converting instructions and memory references.

VERSION

Version 0.62

DESCRIPTION

This module provides the user with the ability to check whether a given string represents an x86 processor register or instruction. It also provides lists of registers and instructions and allows to check if a given expression is a valid addressing mode. Other subroutines include converting between AT&T and Intel syntaxes.

SYNOPSIS

    use Asm::X86 qw(@instr is_instr);

    print "YES" if is_instr ("MOV");

EXPORT

 Nothing is exported by default.

 The following functions are exported on request:
        is_reg_intel
        is_reg8_intel
        is_reg16_intel
        is_reg32_intel
        is_reg64_intel
        is_reg_mm_intel
        is_segreg_intel
        is_reg_fpu_intel
        is_reg_opmask_intel
        is_addressable32_intel
        is_r32_in64_intel

        is_reg_att
        is_reg8_att
        is_reg16_att
        is_reg32_att
        is_reg64_att
        is_reg_mm_att
        is_segreg_att
        is_reg_fpu_att
        is_reg_opmask_att
        is_addressable32_att
        is_r32_in64_att

        is_reg
        is_reg8
        is_reg16
        is_reg32
        is_reg64
        is_reg_mm
        is_segreg
        is_reg_fpu
        is_reg_opmask
        is_addressable32
        is_r32_in64

        is_instr_intel
        is_instr_att
        is_instr

        is_valid_16bit_addr_intel
        is_valid_32bit_addr_intel
        is_valid_64bit_addr_intel
        is_valid_addr_intel

        is_valid_16bit_addr_att
        is_valid_32bit_addr_att
        is_valid_64bit_addr_att
        is_valid_addr_att

        is_valid_16bit_addr
        is_valid_32bit_addr
        is_valid_64bit_addr
        is_valid_addr

        conv_att_addr_to_intel
        conv_att_instr_to_intel
        conv_intel_addr_to_att
        conv_intel_instr_to_att

        is_att_suffixed_instr
        is_att_suffixed_instr_fpu
        add_att_suffix_instr

 These check if the given string parameter belongs to the specified
 class of registers or instructions or is a vaild addressing mode.
 The "convert*" functions can be used to convert the given instruction
  (including the operands)/addressing mode between AT&T and Intel syntaxes.
 The "_intel" and "_att" suffixes mean the Intel and AT&T syntaxes,
  respectively.
 No suffix means either Intel or AT&T.
 All subroutines work best given input after any pre-processing, i.e. after
  all macros, constants, etc. have been replaced by the real values.

 The following arrays are exported on request:
        @regs8_intel
        @regs16_intel
        @segregs_intel
        @regs32_intel
        @regs64_intel
        @regs_mm_intel
        @regs_fpu_intel
        @regs_opmask_intel
        @regs_intel

        @regs8_att
        @regs16_att
        @segregs_att
        @regs32_att
        @regs64_att
        @regs_mm_att
        @regs_fpu_att
        @regs_opmask_att
        @regs_att

        @instr_intel
        @instr_att
        @instr

 These contain all register and instruction mnemonic names as lower-case strings.
 The "_intel" and "_att" suffixes mean the Intel and AT&T syntaxes, respectively.
 No suffix means either Intel or AT&T.

DATA

@regs8_intel

 A list of 8-bit registers (as strings) in Intel syntax.

@regs8_att

 A list of 8-bit registers (as strings) in AT&T syntax.

@segregs_intel

 A list of segment registers (as strings) in Intel syntax.

@segregs_att

 A list of segment registers (as strings) in AT&T syntax.

@regs16_intel

 A list of 16-bit registers (as strings), including the segment registers,  in Intel syntax.

@regs16_att

 A list of 16-bit registers (as strings), including the segment registers, in AT&T syntax.

@regs32_intel

 A list of 32-bit registers (as strings) in Intel syntax.

@regs32_att

 A list of 32-bit registers (as strings) in AT&T syntax.

@regs_fpu_intel

 A list of FPU registers (as strings) in Intel syntax.

@regs_fpu_att

 A list of FPU registers (as strings) in AT&T syntax.

@regs64_intel

 A list of 64-bit registers (as strings) in Intel syntax.

@regs64_att

 A list of 64-bit registers (as strings) in AT&T syntax.

@regs_mm_intel

 A list of multimedia (MMX/3DNow!/SSEn) registers (as strings) in Intel syntax.

@regs_mm_att

 A list of multimedia (MMX/3DNow!/SSEn) registers (as strings) in AT&T syntax.

@regs_opmask_intel

 A list of opmask registers (as strings) in Intel syntax.

@regs_opmask_att

 A list of opmask registers (as strings) in AT&T syntax.

@regs_intel

 A list of all x86 registers (as strings) in Intel syntax.

@regs_att

 A list of all x86 registers (as strings) in AT&T syntax.

@instr_intel

 A list of all x86 instructions (as strings) in Intel syntax.

@instr_att

 A list of all x86 instructions (as strings) in AT&T syntax.

@instr

 A list of all x86 instructions (as strings) in Intel and AT&T syntax.

FUNCTIONS

is_reg_intel

 Checks if the given string parameter is a valid x86 register (any size) in Intel syntax.
 Returns 1 if yes.

is_reg_att

 Checks if the given string parameter is a valid x86 register (any size) in AT&T syntax.
 Returns 1 if yes.

is_reg

 Checks if the given string parameter is a valid x86 register (any size).
 Returns 1 if yes.

is_reg8_intel

 Checks if the given string parameter is a valid x86 8-bit register in Intel syntax.
 Returns 1 if yes.

is_reg8_att

 Checks if the given string parameter is a valid x86 8-bit register in AT&T syntax.
 Returns 1 if yes.

is_reg8

 Checks if the given string parameter is a valid x86 8-bit register.
 Returns 1 if yes.

is_reg16_intel

 Checks if the given string parameter is a valid x86 16-bit register in Intel syntax.
 Returns 1 if yes.

is_reg16_att

 Checks if the given string parameter is a valid x86 16-bit register in AT&T syntax.
 Returns 1 if yes.

is_reg16

 Checks if the given string parameter is a valid x86 16-bit register.
 Returns 1 if yes.

is_segreg_intel

 Checks if the given string parameter is a valid x86 segment register in Intel syntax.
 Returns 1 if yes.

is_segreg_att

 Checks if the given string parameter is a valid x86 segment register in AT&T syntax.
 Returns 1 if yes.

is_segreg

 Checks if the given string parameter is a valid x86 segment register.
 Returns 1 if yes.

is_reg32_intel

 Checks if the given string parameter is a valid x86 32-bit register in Intel syntax.
 Returns 1 if yes.

is_reg32_att

 Checks if the given string parameter is a valid x86 32-bit register in AT&T syntax.
 Returns 1 if yes.

is_reg32

 Checks if the given string parameter is a valid x86 32-bit register.
 Returns 1 if yes.

is_addressable32_intel

 Checks if the given string parameter is a valid x86 32-bit register which can be used
        for addressing in Intel syntax.
 Returns 1 if yes.

is_addressable32_att

 Checks if the given string parameter is a valid x86 32-bit register which can be used
        for addressing in AT&T syntax.
 Returns 1 if yes.

is_addressable32

 Checks if the given string parameter is a valid x86 32-bit register which can be used
        for addressing.
 Returns 1 if yes.

is_r32_in64_intel

 Checks if the given string parameter is a valid x86 32-bit register which can only be used
        in 64-bit mode (that is, checks if the given string parameter is a 32-bit
        subregister of a 64-bit register).
 Returns 1 if yes.

is_r32_in64_att

 Checks if the given string parameter is a valid x86 32-bit register in Intel syntax
        which can only be used in 64-bit mode (that is, checks if the given string
        parameter is a 32-bit subregister of a 64-bit register).
 Returns 1 if yes.

is_r32_in64

 Checks if the given string parameter is a valid x86 32-bit register in AT&T syntax
        which can only be used in 64-bit mode (that is, checks if the given string
        parameter is a 32-bit subregister of a 64-bit register).
 Returns 1 if yes.

is_reg64_intel

 Checks if the given string parameter is a valid x86 64-bit register in Intel syntax.
 Returns 1 if yes.

is_reg64_att

 Checks if the given string parameter is a valid x86 64-bit register in AT&T syntax.
 Returns 1 if yes.

is_reg64

 Checks if the given string parameter is a valid x86 64-bit register.
 Returns 1 if yes.

is_reg_mm_intel

 Checks if the given string parameter is a valid x86 multimedia (MMX/3DNow!/SSEn)
        register in Intel syntax.
 Returns 1 if yes.

is_reg_mm_att

 Checks if the given string parameter is a valid x86 multimedia (MMX/3DNow!/SSEn)
        register in AT&T syntax.
 Returns 1 if yes.

is_reg_mm

 Checks if the given string parameter is a valid x86 multimedia (MMX/3DNow!/SSEn) register.
 Returns 1 if yes.

is_reg_fpu_intel

 Checks if the given string parameter is a valid x86 FPU register in Intel syntax.
 Returns 1 if yes.

is_reg_fpu_att

 Checks if the given string parameter is a valid x86 FPU register in AT&T syntax.
 Returns 1 if yes.

is_reg_fpu

 Checks if the given string parameter is a valid x86 FPU register.
 Returns 1 if yes.

is_reg_opmask_intel

 Checks if the given string parameter is a valid x86 opmask register in Intel syntax.
 Returns 1 if yes.

is_reg_opmask_att

 Checks if the given string parameter is a valid x86 opmask register in AT&T syntax.
 Returns 1 if yes.

is_reg_opmask

 Checks if the given string parameter is a valid x86 opmask register.
 Returns 1 if yes.

is_instr_intel

 Checks if the given string parameter is a valid x86 instruction in Intel syntax.
 Returns 1 if yes.

is_instr_att

 Checks if the given string parameter is a valid x86 instruction in AT&T syntax.
 Returns 1 if yes.

is_instr

 Checks if the given string parameter is a valid x86 instruction in any syntax.
 Returns 1 if yes.

is_valid_16bit_addr_intel

 Checks if the given string parameter (must contain the square braces)
  is a valid x86 16-bit addressing mode in Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_16bit_addr_att

 Checks if the given string parameter (must contain the parentheses)
  is a valid x86 16-bit addressing mode in AT&T syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_16bit_addr

 Checks if the given string parameter (must contain the parentheses)
  is a valid x86 16-bit addressing mode in AT&T or Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_32bit_addr_intel

 Checks if the given string parameter (must contain the square braces)
  is a valid x86 32-bit addressing mode in Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_32bit_addr_att

 Checks if the given string parameter (must contain the parentheses)
  is a valid x86 32-bit addressing mode in AT&T syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_32bit_addr

 Checks if the given string parameter (must contain the parentheses)
  is a valid x86 32-bit addressing mode in AT&T or Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_64bit_addr_intel

 Checks if the given string parameter (must contain the square braces)
  is a valid x86 64-bit addressing mode in Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_64bit_addr_att

 Checks if the given string parameter (must contain the parentheses)
  is a valid x86 64-bit addressing mode in AT&T syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_64bit_addr

 Checks if the given string parameter (must contain the parentheses)
  is a valid x86 64-bit addressing mode in AT&T or Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_addr_intel

 Checks if the given string parameter (must contain the square braces)
  is a valid x86 addressing mode in Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_addr_att

 Checks if the given string parameter (must contain the braces)
  is a valid x86 addressing mode in AT&T syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_valid_addr

 Checks if the given string parameter (must contain the square braces)
  is a valid x86 addressing mode (Intel or AT&T syntax).
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns 1 if yes.

is_att_suffixed_instr

 Tells if the given instruction is suffixed in AT&T syntax.
 Returns 1 if yes.

is_att_suffixed_instr_fpu

 Tells if the given FPU non-integer instruction is suffixed in AT&T syntax.
 Returns 1 if yes

add_att_suffix_instr

 Creates the AT&T syntax instruction array from the Intel-syntax array.
 Returns the new array.

conv_att_addr_to_intel

 Converts the given string representing a valid AT&T addressing mode to Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns the resulting string.

conv_intel_addr_to_att

 Converts the given string representing a valid Intel addressing mode to AT&T syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns the resulting string.

conv_att_instr_to_intel

 Converts the given string representing a valid AT&T instruction to Intel syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns the resulting string.

conv_intel_instr_to_att

 Converts the given string representing a valid Intel instruction to AT&T syntax.
 Works best after any pre-processing of the input, i.e. after all macros,
  constants, etc. have been replaced by the real values.
 Returns the resulting string.

SUPPORT AND DOCUMENTATION

After installing, you can find documentation for this module with the perldoc command.

    perldoc Asm::X86

You can also look for information at:

    Search CPAN
        https://metacpan.org/release/Asm-X86
        http://search.cpan.org/dist/Asm-X86

    CPAN Request Tracker:
        https://rt.cpan.org/Public/Dist/Display.html?Name=Asm-X86
        http://rt.cpan.org/NoAuth/Bugs.html?Dist=Asm-X86

    CPAN Ratings:
        https://cpanratings.perl.org/dist/Asm-X86
        http://cpanratings.perl.org/d/Asm-X86

AUTHOR

Bogdan Drozdowski, <bogdro at cpan.org>

COPYRIGHT

Copyright 2008-2021 Bogdan Drozdowski, all rights reserved.

LICENSE

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.