Montagem - Sintaxe Básica

Um programa de montagem pode ser dividido em três seções -

  • o data seção,

  • o bss seção, e

  • o text seção.

A seção de dados

o dataseção é usada para declarar dados ou constantes inicializados. Esses dados não mudam em tempo de execução. Você pode declarar vários valores constantes, nomes de arquivo ou tamanho do buffer, etc., nesta seção.

A sintaxe para declarar a seção de dados é -

section.data

A seção bss

o bssseção é usada para declarar variáveis. A sintaxe para declarar a seção bss é -

section.bss

A seção de texto

o textseção é usada para manter o código real. Esta seção deve começar com a declaraçãoglobal _start, que informa ao kernel onde a execução do programa começa.

A sintaxe para declarar a seção de texto é -

section.text
   global _start
_start:

Comentários

O comentário da linguagem assembly começa com um ponto e vírgula (;). Ele pode conter qualquer caractere imprimível, incluindo espaços em branco. Pode aparecer em uma linha por si só, como -

; This program displays a message on screen

ou, na mesma linha junto com uma instrução, como -

add eax, ebx     ; adds ebx to eax

Declarações da linguagem assembly

Os programas de linguagem assembly consistem em três tipos de declarações -

  • Instruções executáveis ​​ou instruções,
  • Diretivas Assembler ou pseudo-ops, e
  • Macros.

o executable instructions ou simplesmente instructionsdiga ao processador o que fazer. Cada instrução consiste em umoperation code(Código de operação). Cada instrução executável gera uma instrução em linguagem de máquina.

o assembler directives ou pseudo-opsdiga ao montador sobre os vários aspectos do processo de montagem. Eles não são executáveis ​​e não geram instruções em linguagem de máquina.

Macros são basicamente um mecanismo de substituição de texto.

Sintaxe de declarações da linguagem Assembly

As instruções da linguagem assembly são inseridas uma instrução por linha. Cada declaração segue o seguinte formato -

[label]   mnemonic   [operands]   [;comment]

Os campos entre colchetes são opcionais. Uma instrução básica tem duas partes, a primeira é o nome da instrução (ou o mnemônico), que deve ser executada, e a segunda são os operandos ou parâmetros do comando.

A seguir estão alguns exemplos de declarações típicas de linguagem assembly -

INC COUNT        ; Increment the memory variable COUNT

MOV TOTAL, 48    ; Transfer the value 48 in the 
                 ; memory variable TOTAL
					  
ADD AH, BH       ; Add the content of the 
                 ; BH register into the AH register
					  
AND MASK1, 128   ; Perform AND operation on the 
                 ; variable MASK1 and 128
					  
ADD MARKS, 10    ; Add 10 to the variable MARKS
MOV AL, 10       ; Transfer the value 10 to the AL register

O Programa Hello World em Assembleia

O seguinte código de linguagem assembly exibe a string 'Hello World' na tela -

section	.text
   global _start     ;must be declared for linker (ld)
	
_start:	            ;tells linker entry point
   mov	edx,len     ;message length
   mov	ecx,msg     ;message to write
   mov	ebx,1       ;file descriptor (stdout)
   mov	eax,4       ;system call number (sys_write)
   int	0x80        ;call kernel
	
   mov	eax,1       ;system call number (sys_exit)
   int	0x80        ;call kernel

section	.data
msg db 'Hello, world!', 0xa  ;string to be printed
len equ $ - msg     ;length of the string

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Hello, world!

Compilando e vinculando um programa de montagem em NASM

Certifique-se de ter definido o caminho de nasm e ldbinários em sua variável de ambiente PATH. Agora, execute as seguintes etapas para compilar e vincular o programa acima -

  • Digite o código acima usando um editor de texto e salve-o como hello.asm.

  • Certifique-se de que você está no mesmo diretório onde salvou hello.asm.

  • Para montar o programa, digite nasm -f elf hello.asm

  • Se houver algum erro, você será informado sobre isso neste estágio. Caso contrário, um arquivo objeto do seu programa denominadohello.o Será criado.

  • Para vincular o arquivo objeto e criar um arquivo executável chamado hello, digite ld -m elf_i386 -s -o hello hello.o

  • Execute o programa digitando ./hello

Se você fez tudo corretamente, será exibido 'Olá, mundo!' na tela.