Montagem de programas em assembly com o NASM Luciano José Senger 1 Montagem de programas em Assembly através do NASM section .data msg db 'Hello, World!',0Dh,0Ah,'$' O NASM é um montador de distribuição gratuita, que permite a montagem de programas em Assembly para diversas arquiteturas e sistemas operacionais. Nessa aula, será utilizado o montador para o sistema operacional Windows. Para realizar a montagem de um programa em Assembly com o NASM, considerando que o arquivo de origem é chamado de prog.asm: section .text _start: rotulo1: nasmw -o prog.com prog.asm org mov mov mov int dec cmp jne mov int 100h cx, 10 dx,msg ah,9 21h cx cx,0 rotulo1 ah,4Ch 21h Lembre-se que se o NASM não estiver na pasta corrente, é necesário especicar o caminho completo para o executável. Para a criação de programas em Assembly com o NASM, é interessante que sejam utilizados algumas palavras reservadas do compilador, que servem para ajudar o NASM Rótulos permitem especicar o alvo para instruções de a montar o código binário. Abaixo, segue um exemplo salto e para instruções de laços de repetição, como a de programa em Assemby, escrito em Assembly para o instrução LOOP: NASM, que utiliza tais palavras reservadas (consulte os textos das aulas prévias para uma descrição da função 9 INSTRUÇÃO LOOP Propósito: Gerar um laço no programa. da interrupção 21h): section .data msg db 'Hello, World!',0Dh,0Ah,'$' Sintaxe: LOOP símbolo A instrução LOOP decrementa CX de 1 e transfere a execução do programa para o símbolo que é dado como operador, caso CX ainda não seja 1. section .text _start: org mov mov int mov int 100h dx,msg ah,9 21h ah,4Ch 21h 3 1. Implemente os programas citados neste texto e execute a montagem com o NASM; 2. Implemente um programa que imprima uma mensagem 10 vezes em tela utilizando a instrução LOOP Verique os números em hexadecimal deve ser escritos utilizando a letra h juntamente ao número, para informar ao NASM em qual base o número encontra-se. A section .data serve para a declaração de variáveis, como é o caso da variável msg, que contém a mensagem "Hello, World!". 2 Exercícios 3. Crie um programa em Assembly que imprima a tabela ASCII, utilizando a instrução LOOP 4. Utilize o desmontador de programas em Assembly do NASM para vericar o código em Assembly gerado a partir da desmontagem dos programas binários. Rótulos A utilização de um montador permite a utilização de rótulos para endereços do programa, que facilitam a programação. No programa abaixo, é utilizado o rotulo rotulo1 para especicar o endereço da instrução mov ah,9. 1