Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Assembly] Operatore MOD

    Ciao a tutti, devo fare un programma che dica se il numero inserito e' primo(Ris=1) o no(Ris=0)

    Ecco il codice:

    codice:
    	
    #include <stdio.h>
    
    void main () {
    	
    	unsigned int Num=2;
    	int Ris; // 1 se e' primo, 0 altrimenti 
    
    	__asm {
    
                    SUB EAX,EAX
    		SUB EBX,EBX
    		SUB ECX,ECX
    		SUB EDX,EDX
    
    		CMP Num,2
    		JZ J1			;Salta se Num=2
    
    		CMP Num,2
    		JNGE J2			;Salta se Num<2
    
    		MOV EAX,Num
    		MOV EDX,2
    		DIV	EDX			;EAX=MaxDiv=Num/2
    		MOV EBX,2		;EBX=D=2
    
    L1:
    
    		MOV ECX, Num MOD EBX	;Resto=ECX= Num MOD D --- MOD restituisce il resto della divisione Num/D // non funziona-errore di compilazione
    
    		CMP ECX,0
    		JZ J3:				;Salta se ECX=0
    
    		INC EBX				;D++
    
    		CMP EBX,EAX
    		JG J4				;Salta se D>MaxDiv
    
    		JMP L1				;Loop
    J1:
    J4:
    		MOV Ris,1
    
    		
    		JMP J5
    J3:
    J2:		MOV Ris,0
    
    J5: 
    
            }
    
    	printf ("Ris:%d\n",Ris);
    }
    Vorrei sapere come posso utilizzare l'operatore MOD, perche' il compilatore mi da' errore se scrivo in questo modo:

    codice:
    MOV ECX, Num MOD EBX
    PS: non posso cambiare l'algoritmo e il codice in c.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Se nn ricordo male, il quoziente in un registro ed il resto in un'altro... EAX e EDX credo.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Si e' vero (EDX) ma il mio professore vuole per forza che il resto lo calcolo con "MOD".

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'operatore MOD lo puoi usare solo se il secondo parametro è costante, altrimenti devi fare una divisione e prendere il resto.

    Ti consiglio le modifiche in rosso nel sorgente

    codice:
            SUB EAX,EAX
    	SUB EBX,EBX
    	SUB ECX,ECX
    	SUB EDX,EDX
    
    	CMP Num,2
    	JZ J1			;Salta se Num=2
    
    	CMP Num,2
    	JNGE J2			;Salta se Num<2
    
    	MOV EAX,Num
    	SHR EAX,1
    	MOV EBX,2		;EBX=D=2
    
    L1:
    	PUSH EAX
    	MOV EAX,Num
    	SUB EDX,EDX
    	DIV EBX
    	POP EAX
    
    	CMP EDX,0
    	JZ J3				;Salta se EDX=0
    
    	INC EBX				;D++
    
    	CMP EBX,EAX
    	JG J4				;Salta se D>MaxDiv
    
    	JMP L1				;Loop
    J1:
    J4:
    	MOV Ris,1
    
    		
    	JMP J5
    J3:
    J2:	MOV Ris,0
    
    J5:
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    grazie mille oregon, senti, ti posso chiedere come funziona l'operatore MOD di preciso??

    Es: Resto <- Num MOD D

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Forse c'è un po' di confusione ... l'operatore MOD (quello del MASM) è utilizzabile *in compilazione* non a runtime.

    Puoi scrivere

    expr1 MOD expr2

    ma expr1 ed expr2 sono espressioni valutate in tempo di compilazione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.