Revision history for Asm-X86
2024-06-26 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.70
Updated the instruction list. Updated the register list. Fixed
converting some instructions. Added support for new data size
suffixes. Performance optimizations. Fixed tests for Perl
interpreters without taint support. Other small updates.
* lib/Asm/X86.pm (@instr_intel): Updated the instruction list from
NASM version 2.16.02. Removed 'equ' from the instruction list.
* lib/Asm/X86.pm (@regs_bound_intel, @regs_bound_att, @regs_intel,
@regs_att, is_reg_bound_intel, is_reg_bound_att, is_reg_bound),
t/zz_regs_att.t, t/zz_regs_intel.t: Added support for the bound
registers.
* lib/Asm/X86.pm: Changed names of some variables. Fixed a typo in
the documentation. Updated the copyright and version. Updated the
links and deleted the inactive cpanratings.perl.org link (thanks to
Peter John Acklam for reporting).
* lib/Asm/X86.pm (_remove_size_qualifiers_add_dollar,
conv_intel_instr_to_att): Added new size suffixes.
* lib/Asm/X86.pm (conv_att_instr_to_intel): Convert the instructions
only if necessary (better performance). Fixed converting jmp/call,
FPU and MOV[S/Z]X instructions.
* t/zz_conv.t: Added tests for the jmp/call, FPU and size conversion
(like "cbw", etc.) instructions.
* t/*.t: Removed "-T" from the command line for Perl interpreters
without taint support.
* lib/Asm/X86.pm, t/zz*.t, Makefile.PL: Added license blocks and
mentioned Project Asmosis in them.
* README: Updated the links and deleted the inactive link pointing to
cpanratings.perl.org.
2023-01-08 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.65
Updated the instruction list. Simplified and updated the code in
address validation, bringing back 100% test coverage. More unit
tests. Other small updates.
* lib/Asm/X86.pm (@instr_intel): Updated the instruction list from
NASM version 2.16.01.
* lib/Asm/X86.pm (_validate_16bit_addr_parts_intel,
_validate_16bit_addr_parts_att, _validate_32bit_addr_parts_intel,
_validate_32bit_addr_parts_att, _validate_64bit_addr_parts_intel,
_validate_64bit_addr_parts_att): Commented-out parameters and
statement tests which are always true or are not needed.
* lib/Asm/X86.pm (_validate_32bit_addr_parts_att,
_validate_32bit_addr_parts_intel, _validate_64bit_addr_parts_att,
_validate_64bit_addr_parts_intel): Changed testing the scale as a
number to testing as a string to prevent errors.
* lib/Asm/X86.pm, README: Bump the year in the copyright notices.
* KEY.asc: renamed from "KEY" to help the web POD viewer.
* t/{zz_addr_att.t,zz_addr_intel.t}: More tests.
* t/zz_duplicates.t: Display the found duplicates, if any, and
changed the message.
2021-09-19 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.62
* Changes, Makefile.PL, META.*, MYMETA.*: Fix the e-mail addresses.
* lib/Asm/X86.pm (conv_intel_addr_to_att): remove unnecessary
variables, change regexes to variables and qr// for better
readability and reduced code duplication.
* lib/Asm/X86.pm (_change_to_intel_addr_if_applicable): a new private
subroutine to convert an applicable expression to an intel memory
reference.
* lib/Asm/X86.pm (conv_att_instr_to_intel): call the new subroutine
_change_to_intel_addr_if_applicable to simplify, remove duplicated
code, change regexes to variables and qr// for better readability
and reduced duplication.
* lib/Asm/X86.pm (_remove_size_qualifiers_add_dollar): a new private
subroutine to remove any size qualifiers and leading or trailing
whitespace from the parameter, prefixing it with a dollar-sign when
necessary.
* lib/Asm/X86.pm (conv_intel_instr_to_att): call the new subroutine
_remove_size_qualifiers_add_dollar to simplify and remove
duplicated code, change regexes to variables and qr// for better
readability and reduced duplication.
2021-06-19 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.61
Fixed compatibility issues.
* Makefile.PL: Corrected hash keys and values to be strings.
* t/zz_regs_{att,intel}.t: Fixed passing parameters and hash usage.
2021-06-16 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.60
Fixed compatibility issues. Significant code simplification in the
module. Better checks in address validation, especially in AT&T
syntax. More code clean-up in unit tests.
* lib/Asm/X86.pm (is_valid_16bit_addr_intel, is_valid_32bit_addr_intel,
is_valid_64bit_addr_intel, is_valid_16bit_addr_att,
is_valid_32bit_addr_att, is_valid_64bit_addr_att): moved common
validation code to private subroutines, saving on duplication
* lib/Asm/X86.pm (is_valid_16bit_addr_att): some expressions have been
widened to allow more matches.
* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att,
is_valid_64bit_addr_att): disallow sign characters inside
parentheses (rejected by GNU as).
* lib/Asm/X86.pm (_add_percent, _remove_duplicates, _nopluses): removed
"my sub" and added an underscore to the name to mark the subroutines
as private and still make POD coverage tests skip them.
* lib/Asm/X86.pm (is_reg_intel, is_reg_att, is_reg8_intel, is_reg8_att,
is_reg16_intel, is_reg16_att, is_segreg_intel, is_segreg_att,
is_reg32_intel, is_reg32_att, is_addressable32_intel,
is_addressable32_att, is_r32_in64_intel, is_r32_in64_att,
is_reg64_intel, is_reg64_att, is_reg_mm_intel, is_reg_mm_att,
is_reg_fpu_intel, is_reg_fpu_att, is_reg_opmask_intel,
is_reg_opmask_att, is_instr_intel, is_instr_att): use new private
subroutines to search though the arrays and simplify the code
* t/{zz_regs_att.t,zz_regs_intel.t}: re-write and simplify the code
* t/{zz_addr_att.t,zz_addr_intel.t}: added testing the invalidity of
addresses containing one of the xmm, ymm, zmm or opmask registers
* t/zz_{addr_att,addr_intel,conv,duplicates,regs_att,regs_intel}.t:
added prototypes to subroutines and fixed the tests where necessary
2021-06-05 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.50
Fixed some defects found by comparing new test results and GNU as
output. Significant rewrite of the unit tests.
* lib/Asm/X86.pm (is_valid_16bit_addr_intel): checking the sign in
more cases, corrected one regex
* lib/Asm/X86.pm (is_valid_16bit_addr_att): disallow %segreg:var(var)
%segreg:number(number) constructs. Check if %xxx names are registers
* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att,
is_valid_64bit_addr_att): check if %xxx names are registers in some
cases
* lib/Asm/X86.pm (is_valid_32bit_addr_att): disallow %esp as the index
register in more cases (following GNU as). Allow 16-bit addressing
in 32-bit mode.
* lib/Asm/X86.pm (is_valid_64bit_addr_att): disallow %rsp and %rip as
the index register in more cases (following GNU as).
* lib/Asm/X86.pm (is_reg_intel, is_reg_att, is_reg8_intel, is_reg8_att,
is_reg16_intel, is_reg16_att, is_segreg_intel, is_segreg_att,
is_reg32_intel, is_reg32_att, is_addressable32_intel,
is_addressable32_att, is_r32_in64_intel, is_r32_in64_att,
is_reg64_intel, is_reg64_att, is_reg_mm_intel, is_reg_mm_att,
is_reg_fpu_intel, is_reg_fpu_att, is_reg_opmask_intel,
is_reg_opmask_att, is_instr_intel, is_instr_att): added a pre-check
to check the syntax of the expression before checking the list
* lib/Asm/X86.pm (is_valid_32bit_addr_att, is_valid_64bit_addr_att):
allow '(, reg)' modes
* lib/Asm/X86.pm (add_percent, remove_duplicates, nopluses): made the
subroutines 'my' and removed them from the manual
* lib/Asm/X86.pm: layout fixes for the POD documentation and man page.
Added information that some of the subroutines work best on input
after all preprocessing.
* Makefile.PL: added a variable with the module name
* MANIFEST, KEY: added the GnuPG key used to sign the module
* t/*.t, Makefile.PL: fixed the interpreter line
* t/*.t: significant re-write of tests - using generating procedures,
arrays and loops
* t/zz_addr_mixed.t: partially merged into zz_addr_att.t and
zz_addr_intel.t with a possibility to extend
* t/zz_regs_mixed.t: merged into zz_regs_att.t and zz_regs_intel.t and
deleted the file
2021-05-09 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.40
Fixed many defects revealed by new unit tests. 100% code is now
covered by unit tests. Updated documentation and metadata.
* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att):
fixed accepting invalid addresses: 'zzz(yyy)' and 'zzz(-yyy)',
removed unnecessary conditions
* lib/Asm/X86.pm (is_valid_64bit_addr_intel): allowing valid 64-bit
addressing modes: '[r32]', 'segreg:[r32]', '[segreg:r32]'.
* lib/Asm/X86.pm (is_valid_64bit_addr_att): allowing valid 64-bit
addressing modes with only 32-bit registers.
* lib/Asm/X86.pm (add_att_suffix_instr): added suffixes for 64-bit
instructions
* lib/Asm/X86.pm (conv_intel_addr_to_att): fixed regular expressions
and substitutions
* lib/Asm/X86.pm (conv_att_instr_to_intel): removed unnecessary
conditions
* lib/Asm/X86.pm (conv_intel_instr_to_att): added a missing default
case for instruction suffixes, typo fix, improved changing the
argument order, moved processing MOV[Z/S]X before removing the size
keywords and changing the operand order, added more conditions to
processing MOV[Z/S]X, fixed replacing 'byte', 'word' and similar
size keywords, added 64-bit suffixes
* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att,
is_valid_64bit_addr_intel): removed unnecessary conditions
* lib/Asm/X86.pm (is_valid_16bit_addr_intel): added checking the sign
in some cases
* t/*.t: many more unit tests, much more complex and covering 100%
* README: updated the links and copyright
2020-07-19 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.33
* X86.pm: Updated the instruction list from NASM version 2.15.03.
* Makefile.PL: added the minimum Perl version of '5.006' (arbitrarily
chosen based on the version of the Exporter module on my system)
2020-05-20 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.32
Fix some build/distribution errors in the previous version (README,
missing META.*). Added a digital signature.
* Makefile.PL: added detecting the "tar" utility type. In case of
detecting BSD tar (default on some systems), use GNU tar mode.
Added a parameter to sign the package.
* CONTRIBUTING: added, for metacpan.
2020-05-13 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.31
* X86.pm: Updated the instruction list from FASM version 1.73.24.
2019-12-23 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.30
* X86.pm: Updated the instruction list from FASM version 1.73.21.
2019-11-24 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.29
* X86.pm: Updated the instruction list from FASM version 1.73.18.
2019-08-16 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.28
* X86.pm: Updated the instruction list from FASM version 1.73.16.
2019-01-03 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.27
* Makefile.PL: remove hard-coded INSTALLDIRS, allowing it to be set
during the RPM package build or manual installation.
* X86.pm: Updated copyright inside the module.
* README: updated copyright inside the file.
2018-11-18 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.26
* X86.pm: Updated the register and instruction list from NASM version
2.14. Updated copyright inside the module.
* README: updated copyright inside the file.
* Makefile.PL: fixed some rpmlint errors.
2017-05-06 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.25
* X86.pm: Updated the register and instruction list from NASM version
2.13.01. Updated copyright inside the module.
* README: updated copyright inside the file.
2016-03-22 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.24
* X86.pm: Updated the register and instruction list from FASM version
1.71.51 and NASM version 2.12.01. Updated copyright inside the
module.
* README: updated copyright inside the file, quoted module names.
2015-11-01 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.23
* X86.pm: Updated the register and instruction list from FASM version
1.71.46. Updated copyright inside the module.
2014-11-15 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.22
* X86.pm: Updated the register and instruction list from NASM version
2.11.06.
2014-03-01 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.21
* X86.pm: Updated the register and instruction list from NASM version
2.11.02.
2014-01-11 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.20
* X86.pm: Updated the register and instruction list from NASM version
2.11. Added more XMM and YMM registers, added ZMM and opmask
(K[0-7]) registers. Added subroutines to check for opmask registers.
Upgraded tests.
2013-12-07 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.16
* X86.pm: Updated the register list with YMM registers.
2012-09-16 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.15
* X86.pm: Updated the instruction list from NASM version 2.10.05.
2012-07-21 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.14
* X86.pm: Updated the instruction list from NASM version 2.10.02.
2012-03-31 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.13
* X86.pm: Updated the instruction list from NASM version 2.10 and
FASM version 1.69.50. Made is_addressable32_intel,
is_addressable32_att, is_addressable32, is_r32_in64_intel
is_r32_in64_att, is_r32_in64, is_att_suffixed_instr
is_att_suffixed_instr_fpu and add_att_suffix_instr public.
* X86.pm (conv_intel_instr_to_att): corrected removing double percent
character that may be created during the conversion.
* X86.pm (conv_intel_addr_to_att): removing double percent character
that may be created during the conversion.
2012-01-22 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.12
* X86.pm: Removed duplicates from the instruction and mnemonic list.
Fixed the private subroutine add_att_suffix_instr (some AT&T
instructions were not generated). Added one new register, CR8
(available only in 64-bit mode).
* X86.pm, README: Bump the year in the copyright notices.
* README: Update with external dependencies required during manual
installation.
* zz_duplicates.t: a new test to detect duplicate entries in all the
arrays exported by the module.
2011-12-30 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.11:
Updated the instruction and mnemonic list from FASM version 1.69.35.
2010-09-08 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.10:
Updated the instruction list from NASM version 2.09.01.
2010-04-18 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.09:
Updated the instruction list from NASM version 2.08.01. Minor
whitespace changes in the source, for better readability.
2009-07-05 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.08:
Updated the instruction list from NASM version 2.06. Changed one
private procedure's name.
2008-11-09 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.07:
Documentation fixes.
Verified instruction list to be complete with fasm-1.67.28 and
updated it from nasm-2.05.01.
2008-10-24 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.06:
Updated instruction list from fasm-1.67.27. Changed double to
single quotes in one place.
2008-05-18 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.05:
A bit better coding style.
Added the tests to the package.
2008-04-17 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.04:
Added functions checking if the given string represents a register
in AT&T syntax. Renamed the previous functions with an "_intel"
suffix and the new functions with an "_att" suffix. Old
functions (the ones with no suffixes) now check for either Intel
or AT&T syntax, so they remain valid.
Added return value to function descriptions.
Added arrays with AT&T-style register names.
Updated instruction list from the latest FASM source.
Added AT&T-style instruction mnemonic array.
Added functions for checking if a given string represents a
valid 16-/32-/64-bit addressing mode in AT&T syntax.
Renamed the previous functions with an "_intel" suffix and the
new functions with an "_att" suffix. Old functions (the ones
with no suffixes) now check for either Intel or AT&T syntax,
so they remain valid.
Changed Intel syntax addressing analysis to check if the whole given
string is correct (using ^ and $ in regular expressions).
Added functions to convert an addressing mode or instruction (with
all its operands) between AT&T and Intel syntaxes.
Added functions to convert an instruction or memory addressing mode
between Intel and AT&T syntaxes.
Converted subroutine names to prototypes.
Added the compile-once flag where applicable.
Added PRIVATE to documentation of private non-exported subroutines.
2008-03-29 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.03:
Fixed a bug with 64-bit addressing, where valid addresses of the
form [ebx+r10d] were not recognised properly.
Added the "SUPPORT AND DOCUMENTATION" section from the README file
to the module.
2008-03-27 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.02:
Fixed a bug with the 'fs' segment register.
Added a list of segment registers and a function for checking
if a given string represents a segment register.
Added functions for checking if a given string represents a
valid 16-/32-/64-bit addressing mode.
Added a list of FPU registers and a function for checking
if a given string represents an FPU register.
2008-03-08 Bogdan Drozdowski <bogdro \at\ cpan . org>
* Version 0.01:
Includes all known by FASM instruction mnemonics and registers.
Includes functions that check if a given string is a register
(any type or explicit: 8-, 16-, 32-, 64-bit or multimedia) and
functions that check if a given string is a mnemonic.