Considere o programa abaixo:
#include <stdio.h> char S2[] = {65, 108, 111, 32, 123, 103, 97, 108, 101, 114, 97, 125, 33, 0}; int main (void) { char *pc = S2; while (*pc) printf ("%c", *pc++); printf("\n"); return 0; }Traduza o programa para assembly usando as regras vistas em sala. "Cole" o início (prólogo) e o final (finalização) do programa visto no laboratório 6. Copie de lá também o trecho de código que imprime o valor de %eax. Esse código utiliza a uma string de formatação criada com endereço Sf. Você terá que criar duas strings de formatação parecidas no novo programa!
Atenção: Nos próximos exercícios, escreva PRIMEIRO o código C para resolver o que se pede, e em seguida traduza-o para assembly. (Os dois códigos são necessários na entrega.)
Modifique o programa C anterior para imprimir somente as letras diferentes de 'a' (minúsculo). (Consulte a tabela ascii se necessário.) Teste-o em C e depois faça a mesma modificação no código assembly.
Agora modifique o programa C para calcular (e imprimir) o comprimento da string
S2
.
Traduza-o para assembly.
(Lembre-se de usar a string de formatação correta para imprimir um inteiro.)
Escreva em C um programa que imprima os quadrados dos números de 1 a 10 e depois traduza-o para assembly. (Esse programa não utiliza array global!) Para multiplicar um número por si mesmo em assembly, use a instrução imull.
Traduza agora para assembly o programa abaixo, lembrando o que foi visto em sala sobre cálculo do endereço de cada posição de um array (esse programa não é igual ao visto no laboratório 6!) :
#include <stdio.h> int nums[4] = {65, -105, 111, 34}; int main (void) { int i; int s = 0; for (i=0;i<4;i++) s = s+nums[i]; printf ("soma = %d\n", s); return 0; }