Jump to content
  • 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

     

     

    Edited by Leandro Fróes


    User Feedback

    Recommended Comments

    There are no comments to display.



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...