asembler , problem przy kompilacji

lukasz18101988
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 13 kwie 2008, o 22:37
Płeć: Mężczyzna
Lokalizacja: małogoszcz

asembler , problem przy kompilacji

Post autor: lukasz18101988 »

czesc. Oto podprogram, który ma wyliczać silnię (wejście i wyjśćie obsługuje moduł w C ), przy kompilacji (NASM, GCC) wyrzuca mi taki błąd: " INVALID COMBINATION OF OPCODE AND OPERANDS" tyczy się on 21 linijki, czyli :
imul [ebp-4], ecx


prosze o pomoc

oto kod :

Kod: Zaznacz cały


%include "asm_io.inc"
segment .data

segment .bss

segment .text
        
	  global _silnia

_silnia:
    
      enter   4,0 
	push ebx
	
	mov dword [ebp-4],1
	mov ecx,1
petla:
	cmp ecx, [ebp+8]
	jnle end_petla

	imul [ebp-4], ecx       ; BŁĄD !!!
	inc ecx
	jmp short petla

end_petla:
	mov ebx, [ebp+12]
	mov eax, [ebp-4]
	mov [ebx], eax
	
	pop ebx
	leave
	ret    
         
[/quote]
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

asembler , problem przy kompilacji

Post autor: spajder »

pewności nie mam, ale na pierwszy rzut oka to kompilator traktuje tę pamięć jak słowo albo bajt. spróbuj zamiast tej linijki dać:

Kod: Zaznacz cały

imul dword ptr [ebp-4], ecx
lukasz18101988
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 13 kwie 2008, o 22:37
Płeć: Mężczyzna
Lokalizacja: małogoszcz

asembler , problem przy kompilacji

Post autor: lukasz18101988 »

teraz wyskakuje mi taki błąd :
COMMA OR END OF LINE EXPECTED
nadal co do tej linijki
Awatar użytkownika
N4RQ5
Użytkownik
Użytkownik
Posty: 421
Rejestracja: 15 lis 2006, o 16:22
Płeć: Mężczyzna
Lokalizacja: Suwałki/Wawa
Pomógł: 104 razy

asembler , problem przy kompilacji

Post autor: N4RQ5 »

Co do instrukcji IMUL to nie jestem pewien czy nie musi ona jako pierwszego parametru dostać rejestru. Spróbuj najpierw zawartość pamięci przepisać do któregoś z rejestrów i dopiero mnożyć. Ewentualnie dodaj na początku prefix dword by zaznaczyć rozmiar danych.
lukasz18101988
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 13 kwie 2008, o 22:37
Płeć: Mężczyzna
Lokalizacja: małogoszcz

asembler , problem przy kompilacji

Post autor: lukasz18101988 »

wklejam tu kod z poprawkami, nie ma błędu przy kompilacji
ale jakiej liczby bym nie wprowadził, to silnia wyskakuje zawsze 0

Kod: Zaznacz cały

%include "asm_io.inc"
segment .data

segment .bss

segment .text
        
	  global _silnia

_silnia:
    
      enter   4,0 
	push ebx
	
	mov dword [ebp-4],0
	mov ecx,1
	
petla:
	cmp ecx, [ebp+8]
	jnle end_petla

          mov eax, dword[ebp-4]     

	imul eax, ecx 
	inc ecx
	jmp short petla

end_petla:
	mov ebx, [ebp+12]
	mov eax, [ebp-4]
	mov [ebx], eax
 
	lea eax, [ebp-8]

	
	
	leave	
	ret   
ODPOWIEDZ