Ir para conteúdo

Dúvidas básicas (Iniciante)


JorgeLuizGouveiaSousa

Posts Recomendados

Depende do que você interpreta por "variável". Um valor numérico pode ser armazenado na memória ou num registrador... Ela pode ser inteira ou ponto flutuante... Para mostrar, na sintaxe do NASM, eis alguns exemplos:

section .data

; define uma região de 4 bytes no segmento de dados contendo o valor 0x0000000A (10), nomeado 'myvar'
myvar:  dd  10

Daqui para frente, a referência à memória é feita através desse "identificador" 'myvar'. Por exemplo:

mov eax,[myvar]   ; Lê 4 bytes da memória, na posição de 'myvar', no segmento de dados, e coloca em EAX.

Note que poderíamos colocar o valor 10 diretamente em EAX e, nesse caso, o registrador EAX seria sua "variável":

mov eax,10

No caso do NASM, valores numéricos em ponto flutuante podem ser atribuídos da mesma forma, na memória:

section .data

myvar2:	 dd  3.141592

Esse 'myvar2' é um float, ocupando 4 bytes, da mesma forma que um 'int', no exemplo anterior. E, assim como no exemplo anterior, ele pode ser acessado por uma instrução, mas o 'registrador' será diferente... Por exemplo, via SSE:

movss xmm0,[myvar2]

Outro lugar onde suas varíaveis podem ser colocadas é na pilha. É o caso de variáveis 'locais'. Mas, isso exige alguma manipulação do "apontador de pilha" (ESP ou RSP, dependendo do modo de operação). Por exemplo:

sub  rsp,8  ; reserva espaço na pilha (precisa estar alinhada de 8 em 8 bytes!).

mov dword [rsp],10  ; escreve 10 na pilha.
...

add rsp,8  ; recupera o espaço reservado anteriormente...

Bons compiladores de alto nível (C, por exemplo) tentam manter as variáveis locais em registradores sempre que podem para evitar esse tipo de manipulação da pilha (e gastar menos espaço na memória, ganhando velocidade de processamento também).

Link para o comentário
Compartilhar em outros sites

Está dando erro, meu CPU é ADM e não consigo o comando da placa mãe ADM.

Erro:

C:\nasm>nasm -fwin64 variavel_inteiro.asm.txt -o variavel_inteiro.exe

C:\nasm>variavel_inteiro
Esta versão de C:\nasm\variavel_inteiro.exe não é compatível com a versão do Windows sendo executada. Verifique as informações de sistema do computador e contate o fornecedor do software.

Link para o comentário
Compartilhar em outros sites

Existem diferenças óbvias entre "dúvida" e "ignorância" (no sentido estrito da palavra). Não saber alguma coisa não é uma "dúvida"...
Recomendo que procure material para estudo e estude...

Eis alguns pontos:

  • Não existe linguagem "ASSEMBLER"... Assembler é o nome dado ao compilador da linguagem "Assembly" (com 'y'). Vem do inglês, "montador";
  • Não existe UMA linguagem assembly: Cada família de processadores tem a sua... Intel/AMD x86 é diferente dos ARM, que é diferente dos Risc-V, que é diferente dos MIPS, PowerPC, etc...;
  • Existem vários "sabores" de ASSEMBLERs (montadores);
  • Existem vários modos de operação nos x86-64... Um programa feito para DOS não funciona no Windows e vice-versa (especialmente no Win10);
  • Um "hello world" em assembly dependerá do sistema operacional em uso e do modo de operação... Assembly não é, por definição, portável.

 

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...