uso de SHL (=SAL) e SHR (= SAR) para multiplicar e dividir por
potências de 2
mesmo truque pode ser usado em C/C++ com operadores >> e
<<.
Interface entre programas em Montagem e em C
A seção 5.1 do Linux Assembly HOWTO explica como fazer chamar C
de montagem e vice-versa:
32-bit arguments are pushed down stack in reverse syntactic order
(hence accessed/popped in the right order), above the 32-bit near return
address. %ebp, %esi, %edi, %ebx are callee-saved, other registers are
caller-saved; %eax is to hold the result, or %edx:%eax for 64-bit
results.
Ligação de programas em linguagem de montagem e C:
Inserindo a opção -g na linha de comando do gcc, do nasm ou do as, instruimos o programa a incluir informações de depuração no executável final.
Escrever um programa em C bem simples, compilar com gcc -S
prog.c e ver saida prog.s
Depois gerar o executável com gcc -g prog.s -o prog
Rastrear a execuçao do programa com o Data Display Debugger do
Linux:
ddd prog
Ative a opção Status->Registers... para visualizar os registradores
Problema no gdb (e ddd): nao consegui colocar breakpoint na primeira
instrucao, so' a partir da segunda :-(
Vamos ver como fica um programa que calcula médias de inteiros passados como parâmetro
Para casa: se quiser, experimentar depurar o mesmo programa usando o gdb.
No gdb, use o comando l para listar o codigo, o comando break
N para colocar um breakpoint na linha N, o comando run para
executar o programa e o comando s para executar passo a passo, o
comandoinfo registers para ver os registradores, etc.