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
s
encontramos 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.c
e 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
s
descobrimos 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
stdlib
comoTRTOL(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 int
chamadoval
- considerando o tipos esperados como argumentos e
val
devemos 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?