[Asembler+C] Zamiana dec na bin

0

Muszę napisać program do zamiany liczby dziesiętnej na binarną.
Sęk w tym, że musi być on połączeniem asemblera z C :/
Chodzi o to, aby funkcja zamiany systemu napisana była w asemblerze, natomiast program w C wczytywałby liczbę wywoływał tę funkcję (extern) i wypisywał zamienioną liczbę na ekranie.
Ogólnie mam napisany już cały program w asm, ale muszę go jakoś przerobić, żeby zlinkować to z C. Proszę o pomoc co z tego pliku asm zostawić, a co dokładnie zaimplementować w C, żeby to sprawnie działało?

.686

_TEXT		SEGMENT	dword public  'CODE' use32
ASSUME	cs:_TEXT

_wczytaj32 PROC		; procedura wczytujaca liczbę z klawiatury
				; w postaci kodów ascii i zapisująca do eax
				; w postaci binarnej
					
    push		ebx
    push		esi
    push		edi
	
	
    push		11
    push		OFFSET liczba_ascii
    push		0				;uchwyt (klawiatura) 
    call		__read
    add			esp,12			      ; usunięcie parametrów ze stosu
    mov			esi,0			       ; dotychczas obliczona wartosc
    mov			ebx,0			      ; modyfikator
 
 ptl_liczba: 
    mov			al,liczba_ascii[ebx]		
    inc			ebx				; zwiekszanie o 1
    cmp			al, 10				; czy był enter
    je			byl_enter			; jesli tak to przechodzimy do byl_enter
    sub			al, '0'				; zamiana na liczbe
    movzx		edi, al				; zamiana na 32bit
    mov			eax,10				; mnozna
    mul			esi				; mnozenie razy 10, wynik w eax				
    add			eax, edi			; dodanie liczby jednosci
    mov			esi, eax			; zapamietanie aktualnej wartosci
    jmp			ptl_liczba			; procedura obsługi przerwania

byl_enter: 
mov			eax, esi	; wartosc zwracana przez funkcje jest w eax
	
pop			edi		; zdejmujemy dane ze stosu do danego rejestru
	pop			esi
	pop			ebx
    ret
_wczytaj32 ENDP

_wyswietl_dec PROC			; procedura pobierajaca liczbę ze zmiennej liczba_bin
						 ; i wypisujaca ją jako liczbę dziesiętną
	push	ebx
	push	ebp
	push	esi
	push	edi
	push	edx
	
	mov		eax, liczba_bin         ; załadowanie wprowadzonej z klawiatury liczby
	mov		ecx,10	                ; licznik obiegow petli 
	mov		ebx,9	                ; indeks poczatkowy w tablicy wynikowej
	mov		esi,10	                ; dzielnik
	
ptl:
	mov		edx,0			; zerowanie starszej czesci dzielnej
	div		esi			   ; dzielenie przez 10, reszta w edx, iloraz w eax
	add		dl,30h			 ; zamiana na kod ascii
	mov		liczba_ascii[ebx],dl	; odeslanie cyfry
	dec		ebx
	loop	ptl						; sterowanie petla
	
	mov		ecx, koniec_d - info_dec	;dlugosc opisu
	push	ecx							; liczba znaków
	push	OFFSET info_dec
	push	1						; uchwyt
	
	call	__write
	add		esp,12			; usuniecie parametrow ze stosu
	
	push	10					; liczba znaków
	push	OFFSET liczba_ascii
	push	1							; uchwyt
		
	call	__write
	add		esp,12			; usuniecie parametrow ze stosu
	
	pop		edx
	pop		edi
	pop		esi
	pop		ebp
	pop		ebx
	ret
	
_wyswietl_dec ENDP

_wyswietl_bin PROC
	push	ebx
	push	ebp
	push	esi
	push	edi
	
	mov		eax, liczba_bin		; załadowanie wprowadzonej z klawiatury liczby
	mov		ecx,32			  ; licznik obiegow petli 
	mov		ebx,31			  ; indeks poczatkowy w tablicy wynikowej
	mov		esi,2			    ; dzielnik

ptl:
	mov		edx,0				; zerowanie starszej czesci dzielnej
	div		esi				; dzielenie przez 2, reszta w edx, iloraz w eax
	add		dl,30h			; zamiana na kod ascii
	mov		liczba_ascii_bin[ebx],dl		; odeslanie cyfry
	dec		ebx
	loop	ptl							; sterowanie petla
	
	mov		ecx, koniec_b - info_bin
	push	ecx						; liczba znaków
	push	OFFSET info_bin
	push	1						; uchwyt
	
	call	__write
	add		esp,12				; usuniecie parametrow ze stosu
	
	push	33						; liczba znaków, zmiana!
	push	OFFSET liczba_ascii_bin
	push	1						; uchwyt
	
	call	__write
	add		esp,12				; usuniecie parametrow ze stosu
	
	pop		edi
	pop		esi
	pop		ebp
	pop		ebx
	ret
	
_wyswietl_bin ENDP


_TEXT		ENDS
END
0

Na oko to jest kod w asemblerze MASM czyli w czymś zupełnie innym niż MIPS.

0

Pewnie ze tak, ale trzeba by znać obie składnie ;) No i wątpię żeby to miało sens bo ten kod wyżej pewnie nigdy nie działał i wygląda zresztą na mega przekombinowany. Lepiej po prostu napisać to od 0.

0

Polecam zacząć od kursu tego twojego asemblera, bo ewidentnie nie potrafisz napisać w nim nawet hello world. Jak już to zrobisz to wróć za jakiś miesiąc, dwa i możemy wtedy pomyśleć o tym jak napisać program do konwersji dec na bin.

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