Passant valeur flottante du programme C assembleur programme de niveau en utilisant uniquement des registres entier?

voix
0

Pour ma classe, nous écrivons un programme simple asm (avec C et AT & T x86-64) qui imprime tous les bits d'un entier ou flottant. J'ai la partie entière fin de travail. Pour la partie flottante mon professeur nous a demandé de passer la valeur flottante uniquement à l'aide des registres entiers. Pas trop sûr pourquoi nous ne sommes pas autorisés aux registres de flotteur d'utilisation. Peu importe, ce que quelqu'un a des idées sur la façon d'aller à ce sujet?

Créé 02/12/2019 à 23:50
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

mon professeur nous a demandé de passer la valeur flottante uniquement à l'aide des registres entiers.

Une approche simple consiste à copier le floatdans un entier en utilisantmemcpy()

float f = ...;
assert(sizeof f == sizeof(uint32_t));

uint32_t u;
memcpy(&u, &f, sizeof u);
foo(u);

Une autre est d'utiliser un union. Peut-être en utilisant un littéral composé .

void foo (uint32_t);

int main() {
  float f;
  assert(sizeof f == sizeof(uint32_t));

  //  v----------- compound literal -----------v
  foo((union { float f; uint32_t u; }) { .f = f}.u);
  //   ^------ union object ------- ^
}

Ils exigent que le type entier utilisé et floatsont de la même taille.

D' autres problèmes comprennent l' assurance la endian correcte des deux, mais très souvent les Boutiens du floatet entier correspondra.

Créé 08/12/2019 à 01:37
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more