Ir para conteúdo
  • Lista de instruções Intel e AMD para fácil "parsing"


    Leandro Fróes

    No final de 2015 o programador Mahdi Safsafi decidiu listar todas as instruções da Intel e da AMD e colocar num repositório no github vários conjuntos de instruções, incluindo SSE5 e 3DNow! Estas  estão listadas em formato XML. Segundo o autor a ideia principal é justamente essa, ter um repositório com uma lista de fácil parsing, ou seja, simples de ser lida por um script ou programa.

     

    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? :D

     

     

    Editado por Leandro Fróes


    Feedback do Usuário

    Comentários Recomendados

    Não há comentários para mostrar.



    Participe da conversa

    Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

    Visitante
    Adicionar um comentário...

    ×   Você colou conteúdo com formatação.   Remover formatação

      Apenas 75 emojis são permitidos.

    ×   Seu link foi automaticamente incorporado.   Mostrar como link

    ×   Seu conteúdo anterior foi restaurado.   Limpar o editor

    ×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.


×
×
  • Criar Novo...