Nasm

Disponível somente no TrabalhosFeitos
  • Páginas : 5 (1047 palavras )
  • Download(s) : 0
  • Publicado : 25 de novembro de 2011
Ler documento completo
Amostra do texto
Características
• Permite montar programas assembler

NASM – Netwide Assembler
NASM version 0.98.39 compiled on Jan 16 2005

– No DOS – No Windows (Win16 e Win32) – No Linux

• Formato das instruções diferente do MASM e do TASM

Prof. Sérgio L. Cechin

– MASM (Microsoft Assembler - Microsoft) – TASM (Turbo Assembler - Borland)

• Gratuito • Requer apenas um programa executável (omontador)
– Pode usar bibliotecas externas, caso seja requisitado – Pode gerar código a ser ligado com módulos compilados com compiladores de linguagem de alto nível (“C”, Pascal, etc)
2

Montagem
• Linha de comando
– nasm -f [-o ] – Exemplos
• nasm -f obj teste.asm • nasm -f bin teste.asm -o teste.com
– Monta o arquivo “teste.asm”

Nasm – Formatos de saída
• • • • • • • • • • “bin”“aout” “aoutb” “coff” “elf” “as86” “obj” “win32” “rdf” “ieee” flat-form binary files (e.g. DOS .COM, .SYS) Linux a.out object files NetBSD/FreeBSD a.out object files COFF (i386) object files (ex: DJGPP for DOS) ELF32 (i386) object files (e.g. Linux) Linux as86 (bin86 version 0.3) object files MS-DOS 16-bit/32-bit OMF object files Microsoft Win32 (i386) object files Relocatable Dynamic Object FileFormat v2.0 IEEE-695 (LADsoft variant) object file format
4

• Gerando a listagem do programa
– nasm -f coff teste.asm -l teste.lst teste.lst

– Monta o arquivo “teste.asm” e gera um executável do tipo “.com”

• Help

• Monta o arquivo “teste.asm” e também gera um arquivo “lst” (listagem)

– nasm –h (help geral) – nasm –hf (lista formatos de saída)
3

Nasm – Referência à memória
• Areferência à memória requer colchetes explícitos
– Não usa o mecanismo do MASM de alterar a codificação, dependendo da forma como as variáveis foram declaradas

OFFSET ?
• NASM não necessita do comando OFFSET, usado no MASM
– Se “var” é uma variável... – No MASM, usa-se “mov ax,OFFSET var” – No NASM, usa-se “mov ax,var”

• Exemplo
– mov ax,var
• Sempre gera modo imediato • “var” declaradocomo constante: coloca a constante • “var” declarado com variável: coloca o endereço da variável

– mov ax,[var]
• Acessa o conteúdo da variável
5 6

Formato Indireto/Indexado
• No MASM
– mov ax, table[bx]
• AX recebe MEM16(table+BX)

Definição de tipos
• O NASM
– Não suporta tipos de variáveis – Não suporta instruções que dependam do tipo do operando
• Ex: LODS, MOVS, STOS, SCAS,CMPS, INS, ou OUTS

– mov ax, es:[di]
• AX recebe MEM16(ES:DI)

• Em geral, uma instrução só estará completamente definida quando se sabe o tamanho (tipo) dos operandos
– No MASM, escreve-se apenas a parte do mnemônico que identifica a instrução
• O montador identifica o tamanho do operando • Eventualmente, é necessário indicar, explicitamente, o tamanho

• No NASM (formato mais próximo aoperação)
– mov ax, [table+bx] – mov ax, [es:di]

– No NASM, é necessário (sempre) acrescentar os sufixos de determinação de tamanho: B, W ou D
• Ex: LODSB, SCASW ou INSD
7 8

ASSUME ?
• O NASM não usa o ASSUME • O correto uso dos segmentos é de responsabilidade do programador

Acesso NEAR/FAR
• O programador deve indicar, explicitamente, se o acesso é NEAR ou FAR
– Na chamada desubrotinas – No acesso às variáveis – No retorno das subrotinas
• RETN (return NEAR)
– Pode ser usado, simplesmente, RET

• RETF (return FAR)
9 10

Espaço para variáveis
• Variáveis inicializadas
– Igual ao MASM: DB, DW, etc

Linha de fonte
• rótulo: instrução operandos ;comentários • Caracteres em rótulos
– letras, numeros, “_”, “$”, “#”, “@”, “~”, “.”, e “?”

• Área sem inicialização
–RESB – Equivalente ao DUP(?) usado no MASM – Ex:
• VAR: RESB 64
11

• Instrução
– Instruções do Pentium e P6, FPU, MMX e algumas não documentadas – Podem ser prefixadas com
• REP, REPE/REPZ ou REPNE/REPNZ • Registrador de segmento
– Ex: “es mov [bx],ax” é equivalente a “mov [es:bx],ax” – O segundo formato é o preferido
12

Variáveis inicializadas
• • • • • • • • • • • • db 0x55 db...
tracking img