A documentação é extremamente simples e de fácil entendimento. Foram usadas algumas notações da própria Intel para indicar, por exemplo, se uma instrução suporta certo modo de operação. Exemplo:
V - Supported. I - Not supported. N.E- Indicates an instruction syntax is not encodable in 64-bit mode (it may represent part of a sequence of valid instructions in other modes).
Pode ser que essa notícia soe um pouco estranha pra você, que pode se perguntar: Qual seria a utilidade de uma lista parseável de instruções? Um exemplo onde esta lista pode ser útil é num script que pode analisar estes dados e ti prover informações da propria documentação em um piscar de olhos. Para exemplificar isto fiz um código em Python que simplesmente abre o arquivo XML, lê seus campos e imprime seus valores na tela de uma forma -organizada-. Veja:
import xml.etree.ElementTree as x tree = x.parse('AZ.xml') root = tree.getroot() for child in root.iter('ins'): attr1 = child.attrib.get('x32m', None) attr2 = child.attrib.get('x64m', None) opc = child.attrib.get('openc', None) m = child.find('mnem').text arg = child.find('args').text dsc = child.find('dscrp').text print '32 bits Mode: ' + format(attr1) print '64 bits Mode: ' + format(attr2) print 'Mnemonic: ' + format(m) print 'Args: ' + format (arg) print 'Openc: ' + format(opc) print 'Description: ' + format(dsc) print '----------------------------'
A saída ficaria mais ou menos assim:
... 32 bits Mode:V 64 bits Mode:RVM Mnemonic:VPSRLD Args:ymm1,ymm2,xmm3/m128 Openc:None Description:Shift doublewords in ymm2 right by amount specified in xmm3/m128 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:VMI Mnemonic:VPSRLD Args:ymm1,ymm2,imm8 Openc:None Description:Shift doublewords in ymm2 right by imm8 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:RVM Mnemonic:VPSRLQ Args:ymm1,ymm2,xmm3/m128 Openc:None Description:Shift quadwords in ymm2 right by amount specified in xmm3/m128 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:VMI Mnemonic:VPSRLQ Args:ymm1,ymm2,imm8 Openc:None Description:Shift quadwords in ymm2 right by imm8 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBB Args:mm,mm/m64 Openc:None Description:Subtract packed byte integers in mm/m64 from packed byte integers in mm. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBB Args:xmm1,xmm2/m128 Openc:None Description:Subtract packed byte integers in xmm2/m128 from packed byte integers in xmm1. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBW Args:mm,mm/m64 Openc:None Description:Subtract packed word integers in mm/m64 from packed word integers in mm. ---------------------------- ...
Isso me lembrou uma ferramenta escrita pelo Fernando chamada bashacks(mais especificamente a função bh_asminfo), onde a ideia é a mesma.
Infelizmente o projeto que contém esta lista foi descontinuado agora no fim de 2017, mas o autor já foi rápido e iniciou um novo chamado opcodesDB, que pelo visto suporta JSON. Já pensou no tanto de coisas que poderíamos fazer com estes bancos de dados parseáveis?