2.2.4 Multiplicação de dois números reais

float asm_vezes(float multiplicador, float multiplicando)

A função float asm_vezes(float multiplicador, float multiplicando) retorna o produto do multiplicador pelo multiplicando.

/**
 * @file    asm_vezes.s
 * @author  Reficio
 * @version 1.0
 *
 * @section DESCRIPTION
 *
 * Multiplicação de dois números reais
 *
 * A função "float asm_vezes(float multiplicador, float multiplicando)"
 * retorna o produto do multiplicador pelo multiplicando.
 *
 *            Nome      Tipo    Descrição           Registrador
 * @param       x       float   multiplicador           (S0)
 * @param       y       float   multiplicando           (S1)
 * @return              float   produto (x vezes y)     (S0)
 *
 * A instrução FMULS (multiplicação de ponto flutuante, precisão simples)
 * multiplica dois registradores de precisão simples e grava o resultado
 * em um terceiro registrador de precisão simples.
 * Também pode executar uma versão vetorial desta operação.
 *
 * @see Multiplicação https://pt.wikipedia.org/wiki/Multiplicação
 */

// Nova sintaxe unificada

.syntax unified

// Dados

.data

// Código

.text
.global asm_vezes
.type asm_vezes, %function

asm_vezes:

        FMULS  S0, S0, S1   // S0 = multiplicação dos parâmetros = S0 x S1

end:

        MOV     PC, LR      // Retornar

Programa em C para testar a função:

/**
 * @file    vezes.c
 * @author  Reficio
 * @version 1.0
 * 
 * @section DESCRIPTION
 * 
 * Este programa tem por finalidade chamar a função "asm_vezes",
 * que retorna o resultado da multiplicação de seus dois parâmetros,
 * para fins de teste da função.
 * 
 */

#include <stdio.h>

extern float asm_vezes(float multiplicador, float multiplicando);

void print(float x, float y, float r) {
        printf("%f x %f = %f\n", x, y, r);
        return;
}

void main () {
        float x = 4.5;
        float y = 3.5;
        float r;
        r = asm_vezes(x, y);
        print(x , y, r);
}

Makefile:

vezes: vezes.c asm_vezes.s
        gcc -o vezes vezes.c asm_vezes.s
clean:
        rm vezes

Construção e execução:

pi@raspberrypi:~/raspbered/assembly/vezes $ make clean
rm vezes

pi@raspberrypi:~/raspbered/assembly/vezes $ make
gcc -o vezes vezes.c asm_vezes.s

pi@raspberrypi:~/raspbered/assembly/vezes $ ./vezes 
4.500000 x 3.500000 = 15.750000