Oi povo, estou procurando alguma especificação quanto ao tipo de operando NEG_NUMBER e não estou achando uma definição. O código diz que NEG_NUMBER pode ser negativo, mas parece que não é uma obrigação. Como vou distinguir um BYTE2 de um NEG_NUMBER? Quantos bytes ocupará um NEG_NUMBER? EXISTE VIDA EM OUTROS PLANETAS!!???
Oi Bruno,
Como vou distinguir um BYTE2 de um NEG_NUMBER?
Hmm.
Acho que não precisa.
A primeira regra é tentar fazer algo simples que funcione e depois ir adicionando os pedaços.
O negócio é o seguinte. No parse():
- percorrendo a string
sencontramos um operadorop(pode ou não haver label antes, uma coisa por vez); -
só sabemos que é um operador pois pegamos um string e utilizamos a função
/* Return pointer to operator given its name. If the operator is in the table, returns NULL. */ const Operator *optable_find(const char *name);Não precisamos saber disso, mas essa função está implementada em
optable.ce consulta uma sua tabela privada (static) bem legalstatic const Operator operators[] = { { .name = "ADD", .opcode = ADD, .opd_types = { REGISTER, REGISTER, IMMEDIATE } }, { .name = "ADDU", .opcode = ADDU, .opd_types = { REGISTER, REGISTER, IMMEDIATE } }, [...] - Essa função nos retorna tudo que precisamos saber sobre o operador, inclusive seu código e qual o tipo de seu operandos
- continuando a percorrer a nossa string
sdescobrimos o início de um número (pode ser umblá,$blá,#blá, sei lá o queblá; -
podemos agora pedir a ajuda de uma função da biblioteca
stdlibcomoTRTOL(3) Linux Programmer's Manual STRTOL(3) NAME strtol, strtoll, strtoq - convert a string to a long integer SYNOPSIS #include <stdlib.h> long int strtol(const char *nptr, char **endptr, int base); long long int strtoll(const char *nptr, char **endptr, int base); - uma função como essa tranforma o nossa em um, digamos,
long intchamadoval - considerando o tipos esperados como argumentos e
valdevemos saber como proceder.
Não deixem de ler os tópicos iniciados pela Bruna e pela Nathalia:
Ufa!
Acho que por enquanto é só
Estava refletindo sobre números negativos, e se o cara me der um número negativo em hexadecimal?
Pra ser sincero eu nem sei direito como é hexadecimal negativo. Eu imagino que não se usa o sinal de '-' pois a graça dos números hexadecimais é convertê-los pra binário facilmente, então deve ser relacionado com o complemento de dois.
O que vocês acham?