PR04 - Operador IS

Re: PR04 - Operador IS

por José Coelho de Pina -
Número de respostas: 0

Aqui vai mais um exemplo de um cliente simples que pega as instruções em linguagem de montagem da linha de comando.
Esse cliente chama parse() e coloca os apelidos definids através de IS na tabela de apelidos (alias_table).
Para exibir a tabela de símbolos fiz a chamada:

stable_visit(alias_table, &visite_st);

onde visite_st é a função que ensina stable_visit() como imprimir o conteúdo de um item de alias_table.

Fora isso, todas as linhas abaixo foram foram impressas pelo cliente.


meu_prompt> ./parse_test "m IS \$1 ; linha 0" \
                         "n IS \$1; linha 1"  \
                         "rx IS \$252 ; linha 2" \
                         "euclid DIVU rx,n,m ; linha 3"

Instrucao 0 = 'm IS $1 ; linha 0'
parse(): instrucao valida
   pos    = 0
   lineno = 0
   label  = 'm' 
   operador =
   {
       name   = 'IS'
       opcode = 0xffffffff
       opd_types =
       {
            opds[0] == REGISTER ($1)
            opds[1] == NULL
            opds[2] == NULL
       }
   }
Instrucao 1 = 'n IS $1; linha 1'
parse(): instrucao valida
   pos    = 0
   lineno = 0
   label  = 'n' 
   operador =
   {
       name   = 'IS'
       opcode = 0xffffffff
       opd_types =
       {
            opds[0] == REGISTER ($1)
            opds[1] == NULL
            opds[2] == NULL
       }
   }
Instrucao 2 = 'rx IS $252 ; linha 2'
parse(): instrucao valida
   pos    = 0
   lineno = 0
   label  = 'rx' 
   operador =
   {
       name   = 'IS'
       opcode = 0xffffffff
       opd_types =
       {
            opds[0] == REGISTER ($252)
            opds[1] == NULL
            opds[2] == NULL
       }
   }
Instrucao 3 = 'euclid DIVU rx,n,m ; linha 3'
parse(): instrucao valida
   pos    = 0
   lineno = 0
   label  = 'euclid' 
   operador =
   {
       name   = 'DIVU'
       opcode = 0x36
       opd_types =
       {
            opds[0] == REGISTER ($252)
            opds[1] == REGISTER ($1)
            opds[2] == REGISTER ($1)
       }
   }

Conteudo da ST alias_stable:
0: key = 'rx', (REGISTER) $252

1: key = 'n', (REGISTER) $1

2: key = 'm', (REGISTER) $1