ESERCIZIO NUMERI A 32 BIT

di il
9 risposte

ESERCIZIO NUMERI A 32 BIT

Ciao a tutti, sono nuovo qui.
Devo svolgere questo esercizio in assembly:
Scrivere un programma che accetti in ingresso un numero X compreso fra 0 e 1.000.000.
Il programma acquisisca un numero k compreso fra 0 e 250
e stampi tutti i numeri tutti i numeri compresi nell’intervallo X e X+100 che siano multipli di k.
io acquisisco da tastiera il mio numero X come stringa per poi trasformarlo in decimale. Però dato che devo utilizzare i registri a 16bit (non so che assembly è, ma non riconosce registri come EAX) non riesco a capire come fare. HELP ME!!!!!

9 Risposte

  • Re: ESERCIZIO NUMERI A 32 BIT

    Si puo' fare ...

    C'e' qualcosa di errato nel modo in cui tu utillizzi l'assembler
  • Re: ESERCIZIO NUMERI A 32 BIT

    Se utilizzi registri a 16 bit devi usarne due come se fosse uno a 32.

    Dato che dovrai fare delle divisioni ti consiglio di convertire il valore di X nei registri DX:AX

    Mostraci la conversione in decimale che hai scritto
  • Re: ESERCIZIO NUMERI A 32 BIT

    Grazie per le risposte, questa è la funzione che uso per convertire. La stringa acquisita è in BUFFER, funziona per la parte bassa del numero, ma mi perde la parte alta...
    CONVERTI   PROC  NEAR
             
    		   MOV   WORD PTR X[0],0        ;inizializzazione delle variabili X e POT
    		   MOV   WORD PTR X[2],0
    		   MOV   WORD PTR POT[0],1
    		   MOV   WORD PTR POT[2],0
    		   MOV   CH,0                   ;imposta il contatore 
               MOV   CL,BUFFER[1]           ;al numero di caratteri inseriti
    		   MOV   BX,CX                  ;imposta il registro BX, usato per scorrere il numero inserito,
    		   INC   BX                     ;in modo da posizionarsi sulla cifra delle unità
    		   	   
    CICLO:     MOV   AL,BUFFER[BX]          ;copia la cifra corrente della stringa inserita
               SUB   AL,30H                 ;la converte in cifra
    	       MOV   AH,0  
    		   MUL   WORD PTR POT[0]		;DX:AX=AX*POT --> la moltiplica per POT	  
    		   ADD   WORD PTR X[0], AX      ;aggiunge il parziale alla variabile che contiene il numero da calcolare
    		   MOV   RIPORTO, DX
    		  
    		   MOV   AL,BUFFER[BX]          ;copia la cifra corrente della stringa inserita
               SUB   AL,30H                 ;la converte in cifra
    	       MOV   AH,0
    		   MUL   WORD PTR POT[2]
    		   ADD   AX, RIPORTO      ;aggiunge il parziale alla variabile che contiene il numero da calcolare
    		   
    		   ADD   WORD PTR X[2], AX
               MOV   AL,10                  
    		   MOV   AH,0
    		   MOV   DX,0
               MUL   WORD PTR POT[0]                    ;calcola la potenza di 10 successiva
               MOV   WORD PTR POT[0],AX	                ;la copia in POT
    		   MOV   RIPORTO,DX
    		   MOV   AL,10                  
    		   MOV   AH,0
    		   MOV   DX,0
    		   MUL   WORD PTR POT[2]                    ;calcola la potenza di 10 successiva
                                                        ;la copia in POT
    		   ADD   AX,RIPORTO
    		   MOV   WORD PTR POT[2],AX	
               DEC   BX				        ;decremento BX
    		   LOOP  CICLO                  ;ripete	
              
    		   RET                          ;ritorno alla procedura chiamante
    		   
    CONVERTI   ENDP
  • Re: ESERCIZIO NUMERI A 32 BIT

    Se partiamo da un buffer terminato da zero, come questo

    BUFFER DB '12345678', 0

    con queste variabili

    TMP DW 0,0,0,0
    TEN DW 10,0
    RES DW 0,0

    e il codice che segue avrai il risultato a 32 bit (16 bassi e 16 alti) in RES
    
    MULT32	PROC NEAR
    		MOV AX,RES
            MUL TEN
            MOV TMP,AX
            MOV TMP+2,DX
    
            MOV AX,RES+2
            MUL TEN
            ADD TMP+2,AX
            ADC TMP+4,DX
            ADC TMP+6,0
    
            MOV AX,RES
            MUL TEN+2
            ADD TMP+2,AX
            ADC TMP+4,DX
            ADC TMP+6,0
    
            MOV AX,RES+2
            MUL TEN+2
            ADD TMP+4,AX
            ADC TMP+6,DX
    		
    		RET
    MULT32	ENDP
    
    
    CONVERTI  PROC  NEAR
    		MOV SI,0
    		
    LP:		XOR BX,BX
    		MOV BL,BUFFER[SI]
    		CMP BL,00h
    		JZ ELP
    
    		CALL MULT32
    		
    		MOV AX,TMP
    		MOV RES,AX
    		MOV AX,TMP+2
    		MOV RES+2,AX
    		
    		SUB BL,'0'
            ADD RES,BX
    		ADC RES+2,0
    		
    		INC SI
    		JMP LP
    		
    ELP:    RET                          
    CONVERTI  ENDP
    
  • Re: ESERCIZIO NUMERI A 32 BIT

    Grazie mille per l'aiuto!!! Ho risolto!!
    La mia funzione funziona, avevo sbagliato a dichiarare buffer... purtroppo quando le cose non vengono spiegate all'università...
  • Re: ESERCIZIO NUMERI A 32 BIT

    pev ha scritto:


    Grazie mille per l'aiuto!!! Ho risolto!!
    La mia funzione funziona, avevo sbagliato a dichiarare buffer... purtroppo quando le cose non vengono spiegate all'università...
    Si studiano sui libri ....
  • Re: ESERCIZIO NUMERI A 32 BIT

    Ragazzi adesso ho un altro problema, ho il numero da 32bit diviso in 2 registri, e dovreti stamparlo a video in decimale, come dovrei fare???
  • Re: ESERCIZIO NUMERI A 32 BIT

    Altro problema altro thread.
  • Re: ESERCIZIO NUMERI A 32 BIT

    oregon ha scritto:


    Altro problema altro thread.
    OK chiedo scusa!!
Devi accedere o registrarti per scrivere nel forum
9 risposte