[ASM]+[C] przerobienie kodu

0

Program ma obliczać log_2(x), gdzie x jest podany przez użytkownika.

Mam kod taki jak poniżej, jak go przerobić żeby nie było tych 0x17, 0x7e itd.
Asm kompilowane w nasm c w gcc
Kod asm:

[section .text]
global log2
log2:
	push	ebp
	mov	ebp, esp

	mov	eax, [ebp+8]	; pierwszy argument
	and	eax, 0x7F800000	; eax = wykladnik
	sar	eax, 0x17
	sub	eax, 0x7F	; eax = czesc calkowita log2(x)
	push	eax		; zachowuje na stosie

	mov	eax, [ebp+8]
	and	eax, 0x007FFFFF	; eax = mantysa
	sar	eax, 0x14

	mov	ebx, 0x04
	mul	ebx
	add	eax, mantysa

	finit	
	fld	dword [eax]	; wrzucam na stos x87 mantyse
	fild	dword [ebp-4]	; wrzucam czesc calkowita
	add	esp, 0x04	; wyrownuje stos x86 :>
	faddp	st1		; st0 = mantysa + czesc calkowita

	mov	eax, [ebp+12]
	fstp	dword [eax]	; zapisuje wynik

	mov	esp, ebp
	pop	ebp
	ret

[section .data]
mantysa:
	dd 0
	dd 0.169925
	dd 0.321928
	dd 0.459432
	dd 0.584963
	dd 0.700440
	dd 0.807355
	dd 0.906891

Kod w c:

#include <stdio.h>

extern void log2(float, float *);

int main(void)
{
	float a, b;

	printf("Podaj liczbe: ");
	scanf("%f", &a);

	log2(a, &b);
	printf("Logarytm binarny z %f to %f\n", a, b);

	return 0;
}
0

W innym systemie maja byc te liczby zapisane, czy w ogole ma ich nie byc ?

0

nie było tych 0x17, 0x7e itd.

można jaśniej?

1 użytkowników online, w tym zalogowanych: 0, gości: 1