Comunidade OSDevBrasil.net
Maio 20, 2012, 03:49:07 *
Bem-vindo, Visitante. Por favor faça o Login ou Registro.

Login com nome de usuário, senha e duração da sessão
Notícias: Anuncie a nossa comunidade a amigos, fóruns...
 
   Home   Ajuda Pesquisa Login Registrar  
Páginas: [1]
  Imprimir  
Autor Tópico: Compiladores  (Lida 691 vezes)
anthony collucci
it not exist
Moderador Global
OS Full Member
*****

Karma: 3
Mensagens: 100


Ver Perfil WWW Email
« : Novembro 12, 2008, 07:22:07 »

Eae,,

Estou com uma duvida, segui todo o tutorial sobre compiladores disponivel em compiladores.osdevbrasil.net, porem queria saber o seguinte depois de gerado o codigo em assembly como meu compilador conseguiria gerar o codigo de maquina?

att,
Registrado

anthony collucci
it not exist
Moderador Global
OS Full Member
*****

Karma: 3
Mensagens: 100


Ver Perfil WWW Email
« Responder #1 : Novembro 13, 2008, 02:53:58 »

Bom segue o resultado de algumas pesquisas

http://en.wikibooks.org/wiki/X86_Assembly/Machine_Language_Conversion
http://www.jgcampbell.com/caos/html/node8.html#SECTION00830000000000000000
http://www.halcode.com/archives/2008/04/28/encoding-intel-x86ia-32-assembler-instructions/

Mas a resposta mesmo esta aqui

http://download.intel.com/design/intarch/manuals/24319101.pdf

O primeiro link ensina a usar os recursos disponiveis nesse manual para codificar em linguagem de maquina.

Basicamente e o seguinte cada instrução em assembly e um mnemonico e possui um opcode, o dificil e juntar os opcodes de forma a completar as instruçoes, no manual da intel tem todos os opcodes do tutorial da wikipedia tem a forma de uni -los... Espero ajudar alguem com minha duvida.

Opcode - http://pt.wikipedia.org/wiki/Opcode

Flw
Registrado

anthony collucci
it not exist
Moderador Global
OS Full Member
*****

Karma: 3
Mensagens: 100


Ver Perfil WWW Email
« Responder #2 : Novembro 18, 2008, 10:22:12 »

Bom acho que ninguem se interessa muito por isso, mas adaptei o tutorial vejam so:

http://anthonycollucci.com/site/index.php?option=com_content&view=article&id=60:traduzindo-assembly-para-binario&catid=35:assembly&Itemid=55

flws
Registrado

anthony collucci
it not exist
Moderador Global
OS Full Member
*****

Karma: 3
Mensagens: 100


Ver Perfil WWW Email
« Responder #3 : Novembro 26, 2008, 11:27:05 »

Retirado do livro pc Assembler, segue a lista dos opcodes !!! Sorridente

Apêndice - Instruções x Códigos
=================================

    As instruções do 8088 correspondem a um,  dois, tres, quatro,
    cinco ou até seis bytes, organizados da seguinte forma:

          instrução      1 ou 2 bytes
          dados          1 ou 2 bytes
          endereço       1, 2 ou 4 bytes

    O  segundo  byte da instrução,  se existir,  segue  sempre  o
    seguinte formato:

          mod xxx r/m

    onde

          mod  indica de onde é obtido o operando:

               00   memória, deslocamento zero (*)
               01   memória,  deslocamento aramzenado em um byte,
                    estendido com sinal para 16 bits
               10   memória, deslocamento armazenado em um word
               11   registrador (r/m = reg)

          r/m  seleciona modo de endereçamento ou registrador:

               se memória

                  000  BX + SI + deslocamento
                  001  BX + DI + deslocamento
                  010  BP + SI + deslocamento
                  011  BP + DI + deslocamento
                  100  SI + deslocamento
                  101  DI + deslocamento
                  110  BP + deslocamento (*)
                  111  BX + deslocamento

          reg (registrador)

                  16 bits   8 bits   segmento
                  000  AX   000 AL    00  ES
                  001  CX   001 CL    01  CS
                  010  DX   010 DL    10  SS
                  011  BX   011 BL    11  DS
                  000  SP   000 AH
                  001  BP   001 CH
                  010  SI   010 DH
                  010  DI   010 BH

          (*) se  mod=00  e  r/m=110  entao  o  deslocamento   do
              operando é o contido na instrução, em 2 bytes.

          xxx varia conforme a instrução

    Na descrição são também utilizados os seguintes símbolos:

          w    0  operação de 8 bits
               1  operação de 16 bits
          s    se w=1 0 dois bytes de operando imediato
                      1 um  byte de operando imediato,  estendido
                        com sinal para 16 bits
               se w=0 não importa

    Alguns exemplos:

          MOV  reg,reg   1000100w mod reg r/m
          MOV  AX,BX     10001001  11 011 000

          MOV  reg,imed  100000sw mod 000 r/m
          MOV  BX,1      10000011  11 000 011  00000001
          MOV  BX,256    10000001  11 000 011  00000000 00000001

          MOV  reg,mem   1000101w mod reg r/m
          MOV  AL,[5]    10001010  00 000 110  00000101 00000000
          MOV  AL,[BX]   10001010  00 000 111
          MOV  AL,[BX+5] 10001010  01 000 111  00000101

---------------------------------------------------------------
A   AAA                  00110111   
    AAD                  11010101    00001010
    AAM                  11010100    00001010
    AAS                  00111111
    ADC   reg,reg        000100dw    11 reg reg
          mem,reg        0001000w   mod reg r/m
          reg,mem        0001001w   mod reg r/m
          reg,imed       100000sw    11 010 reg
          mem,imed       100000sw   mod 010 r/m
          AL,imed        00010100
          AX,imed        00010101
    ADD   reg,reg        000000dw    11 reg reg
          mem,reg        0000000w   mod reg r/m
          reg,mem        0000001w   mod reg r/m
          reg,imed       100000sw    11 000 reg
          mem,imed       100000sw   mod 000 r/m
          AL,imed        00000100
          AX,imed        00000101
    AND   reg,reg        001000dw    11 reg reg
          mem,reg        0010000w   mod reg r/m
          reg,mem        0010001w   mod reg r/m
          reg,imed       100000sw    11 100 reg
          mem,imed       100000sw   mod 100 r/m
          AL,imed        00100100
          AX,imed        00100101
---------------------------------------------------------------
C   CALL  rótulo near    11101000
          rótulo far     10011010
          reg            11111111    11 010 reg
          mem word       11111111   mod 010 r/m
          mem dword      11111111   mod 011 r/m
    CBW                  10011000
    CLC                  11111000
    CLD                  11111100
    CLI                  11111010
    CMC                  11110101
    CMP   reg,reg        001110dw    11 reg reg
          mem,reg        0011100w   mod reg r/m
          reg,mem        0011101w   mod reg r/m
          reg,imed       100000sw    11 111 reg
          mem,imed       100000sw   mod 111 r/m
          AL,imed        00111100
          AX,imed        00111101
    CMPS                 1010011w
    CWD                  10011001
---------------------------------------------------------------
D   DAA                  00100111
    DAS                  00111111
    DEC   reg            1111111w    11 001 reg
          mem            1111111w   mod 001 r/m
          regword        01001reg
    DIV   reg            1111011w    11 110 reg
          mem            1111011w   mod 110 r/m

---------------------------------------------------------------
E   ESC   imed           11011iii   mod iii r/m
---------------------------------------------------------------
H   HLT                  11110100
---------------------------------------------------------------
I   IDIV  reg            1111011w    11 111 reg
          mem            1111011w   mod 111 r/m
    IMUL  reg            1111011w    11 101 reg
          mem            1111011w   mod 101 r/m
    IN    AL,imed        11100100
          AX,imed        11100101
          AL,DX          11101100
          AX,DX          11101101
    INC   reg            1111111w    11 000 reg
          mem            1111111w   mod 000 r/m
          regword        01000reg
    INT   3              11001100
          imed           11001101
    INTO                 11001110
    IRET                 11001111
---------------------------------------------------------------
J   JA                   01110111
    JAE                  01110011
    JB                   01110010
    JBE                  01110110
    JCXZ                 11100011
    JE                   01110100
    JG                   01111111
    JGE                  01111101
    JL                   01111100
    JLE                  01111110
    JMP   rótulo short   11101011
          rótulo near    11101001
          rótulo far     11101010
          reg            11111111    11 100 reg
          mem word       11111111   mod 100 r/m
          mem dword      11111111   mod 101 r/m
    JNA                  01110110
    JNAE                 01110010
    JNB                  01110011
    JNBE                 01110111
    JNE                  01110101
    JNG                  01111110
    JNGE                 01111100
    JNL                  01111101
    JNLE                 01111111
    JNO                  01110001
    JNP                  01111011
    JNS                  01111001
    JNZ                  01110101

    JO                   01110000
    JP                   01111010
    JPE                  01111010
    JPO                  01111011
    JS                   01111000
    JZ                   01110100
---------------------------------------------------------------
L   LAHF                 10011111
    LDS   reg,mem        11000101   mod reg r/m
    LEA   reg,mem        10001101   mod reg r/m
    LES   reg,mem        11000100
    LOCK                 11110000
    LODS                 1010110w
    LOOP                 11100010
    LOOPE                11100001
    LOOPNE               11100000
    LOOPNZ               11100000
    LOOPZ                11100001
---------------------------------------------------------------
M   MOV   reg,reg        100010dw    11 reg reg
          reg,mem        1000101w   mod reg r/m
          mem,reg        1000100w   mod reg r/m
          reg,imed       1100011w    11 000 reg
          mem,imed       1100011w   mod 000 r/m
          reg,imed       1011wreg
          AL,mem         10100000  (endereco direto)
          AX,mem         10100001  (endereco direto)
          segreg,reg     10001110    11 0rg reg
          segreg,mem     10001110   mod 0rg r/m
          reg,segreg     10001100    11 0rg reg
          mem,segreg     10001100   mod 0rg r/m
    MOVS                 1010010w
    MUL   reg            1111011w    11 100 reg
          mem            1111011w   mod 100 r/m
---------------------------------------------------------------
N   NEG   reg            1111011w    11 011 reg
          mem            1111011w   mod 011 r/m
    NOP                  10010000
    NOT   reg            1111011w    11 010 reg
          mem            1111011w   mod 010 r/m
 ---------------------------------------------------------------
O   OR    reg,reg        000010dw    11 reg reg
          mem,reg        0000100w   mod reg r/m
          reg,mem        0000101w   mod reg r/m
          reg,imed       100000sw    11 001 reg
          mem,imed       100000sw   mod 001 r/m
          AL,imed        00001100
          AX,imed        00001101
    OUT   imed,AL        11100110
          imed,AX        11100111
          DX,AL          11101110
          DX,AX          11101111

---------------------------------------------------------------
P   POP   reg            10001111    11 000 reg
          mem            10001111   mod 000 r/m
          regword        01011reg
          segreg         000rg111
    POPF                 10011101
    PUSH  reg            11111111    11 110 reg
          mem            11111111   mod 110 r/m
          regword        01010reg
          segreg         000rg110
    PUSHF                10011100
---------------------------------------------------------------
R   RCL   reg,1          1101000w    11 010 reg
          mem,1          1101000w   mod 010 r/m
          reg,CL         1101001w    11 010 reg
          mem,CL         1101001w   mod 010 r/m
    RCR   reg,1          1101000w    11 011 reg
          mem,1          1101000w   mod 011 r/m
          reg,CL         1101001w    11 011 reg
          mem,CL         1101001w   mod 011 r/m
    REP                  11110011
    REPE                 11110011
    REPNE                11110010
    REPNZ                11110010
    REPZ                 11110011
    RET   near           11000011
          imed near      11000010
          far            11001011
          imed far       11001010
    ROL   reg,1          1101000w    11 000 reg
          mem,1          1101000w   mod 000 r/m
          reg,CL         1101001w    11 000 reg
          mem,CL         1101001w   mod 000 r/m
    ROR   reg,1          1101000w    11 001 reg
          mem,1          1101000w   mod 001 r/m
          reg,CL         1101001w    11 001 reg
          mem,CL         1101001w   mod 001 r/m
---------------------------------------------------------------
S   SAHF                 10011110
    SAL   reg,1          1101000w    11 100 reg
          mem,1          1101000w   mod 100 r/m
          reg,CL         1101001w    11 100 reg
          mem,CL         1101001w   mod 100 r/m
    SAR   reg,1          1101000w    11 111 reg
          mem,1          1101000w   mod 111 r/m
          reg,CL         1101001w    11 111 reg
          mem,CL         1101001w   mod 111 r/m
    SBB   reg,reg        000110dw    11 reg reg
          mem,reg        0001100w   mod reg r/m
          reg,mem        0001101w   mod reg r/m
          reg,imed       100000sw    11 011 reg
          mem,imed       100000sw   mod 011 r/m
          AL,imed        00011100
          AX,imed        00011101

    SCAS                 1010111w
    SHL   reg,1          1101000w    11 100 reg
          mem,1          1101000w   mod 100 r/m
          reg,CL         1101001w    11 100 reg
          mem,CL         1101001w   mod 100 r/m
    SHR   reg,1          1101000w    11 101 reg
          mem,1          1101000w   mod 101 r/m
          reg,CL         1101001w    11 101 reg
          mem,CL         1101001w   mod 101 r/m
    STC                  11111001
    STD                  11111101
    STI                  11111011
    STOS                 1010101w
    SUB   reg,reg        001010dw    11 reg reg
          mem,reg        0010100w   mod reg r/m
          reg,mem        0010101w   mod reg r/m
          reg,imed       100000sw    11 101 reg
          mem,imed       100000sw   mod 101 r/m
          AL,imed        00101100
          AX,imed        00101101
---------------------------------------------------------------
T   TEST  reg,reg        1000010w    11 reg reg
          mem,reg        1000010w   mod reg r/m
          reg,mem        1000010w   mod reg r/m
          reg,imed       1111011w    11 000 reg
          mem,imed       1111011w   mod 000 r/m
          AL,imed        10101000
          AX,imed        10101001
---------------------------------------------------------------
W   WAIT                 10011011
---------------------------------------------------------------
X   XCHG  reg,reg        1000011w    11 reg reg
          reg,mem        1000011w   mod reg r/m
          mem,reg        1000011w   mod reg r/m
          AX,reg         100010rg
    XLAT                 11010111
    XOR   reg,reg        001100dw    11 reg reg
          mem,reg        0011000w   mod reg r/m
          reg,mem        0011001w   mod reg r/m
          reg,imed       100000sw    11 110 reg
          mem,imed       100000sw   mod 110 r/m
          AL,imed        00110100
          AX,imed        00110101
Registrado

Mounter
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« Responder #4 : Novembro 28, 2008, 10:30:08 »

E ae Anthony.

Pelo que vejo essa tabela é realmente os códigos de instruções, na verdade não é tão dificil assim produzir código Assembly para Hexadecimal, só é necessário dedicação...

Aqui tem uns links com material sobre isso:

http://www.posix.nl/linuxassembly/nasmdochtml/nasmdoca.html
http://home.comcast.net/~fbkotler/nasmdocb.html

Os documentos são muito parecidos (quase identicos), acredito que possam na verdade haver algumas instruções a mais do que no outro...

Ainda estou pensando em montar uma classe em C++ ou um código em C, que faça esse tipo de conversão de códigos, seria interessante!
Registrado

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

Mounter
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« Responder #5 : Novembro 28, 2008, 10:55:07 »

Acho que essa lib possa lhe interessar também!

http://udis86.sourceforge.net/
Registrado

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

Páginas: [1]
  Imprimir  
 
Ir para:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines XHTML 1.0 Válido! CSS Válido!