Przekazywanie wartości pływaka od programu C do programów na poziomie asemblera stosując tylko całkowitą rejestrów?

głosy
0

Dla mojej klasie piszemy prosty program asm (z C i AT & T x86-64), który drukuje wszystkie bity liczby całkowitej lub pływaka. Mam całkowitą grzywny częścią roboczą. Dla części pływaka mój profesor polecił nam przekazać wartość pływaka tylko przy użyciu Integer rejestrów. Nie jestem pewien, dlaczego nie wolno nam rejestrów zastosowanie pływaka. Niezależnie od tego, czy ktoś ma pomysły na to, jak go o to?

Utwórz 02/12/2019 o 23:50
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

mój profesor polecił nam przekazać wartość pływaka tylko przy użyciu Integer rejestrów.

Podejście jest prosty, aby skopiować floatdo liczby całkowitej stosującmemcpy()

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

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

Innym jest użycie union. Może przy użyciu dosłownym związek .

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 ------- ^
}

Obydwa wymagają, żeby całkowita typu stosowane i floatsą tej samej wielkości.

Inne kwestie obejmują ubezpieczenia prawidłowej endian z dwóch, ale bardzo często te endians Spośród floati całkowitą będzie pasował.

Odpowiedział 08/12/2019 o 01:37
źródło użytkownik

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