ESERCIZIO IN ASSEMBLY

di il
1 risposte

ESERCIZIO IN ASSEMBLY

Salve a tutti, finalmente ho appena incominciato a studiare l'Assembly però mi sono gia imbattuto in un esercizio che aimé é errato..
L'esercizio è semplice, si tratta di un ciclo che dovrebbe salvare nel registro %ebp il valore piu grande di un array di .long

Posto il codice:

.section .data

data_items:          #These are the data items

   .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0

.section .text
.globl _start
_start:
   nop
   movl $0, %edi          # move 0 into the index registerz
   movl data_items(,%edi,4), %eax    # load the first byte of data
   movl $0, %ebx         # since this is the first item, %eax is the biggest
   
   start_loop:          # start loop
   cmpl $0, %eax       # check to see if we’ve hit the end
   je loop_exit
   incl %edi                  # load next value
   movl data_items(,%edi,4), %eax
   movl %eax, %ebx
   cmpl %ebx, %eax       # compare values
   jle loop_exit          # jump to loop beginning if the new
                       # one isn’t bigger
   movl %eax, %ebx       # move the value as the largest
   jmp start_loop            # jump to loop beginning
loop_exit:
                        # %ebx is the status code for the exit system call
                        # and it already has the maximum number
   movl $1, %eax #1 is the exit() syscall
   int $0x80
In teoria al compilarlo e linkarlo il comando echo $? dovrebbe stampare in output il valore dello status di %ebp che secondo il prog dovrebbe essere 222 essendo il valore maggiore, ma invece si ferma a 67..

Gia lo so che tra le righe 35 e 37 , e perche no anche la 39 forse, c'è un bell'errore di logica, ma sono alle prime armi con l'Assembly e dovrei forse conoscere piu istruzioni?
Qualcuno mi può aiutare a capire come correggere questo piccolo errore? Ho provato a modificarlo varie volte ma sono ancora un po newbie a riguardo...

Chi ha letto il libro Programming from the Ground Up magari lo conosce, è il secondo esempio del libro..


Grazie mille a tutti.

1 Risposte

  • Re: ESERCIZIO IN ASSEMBLY

    Non è movl data_items(,%edi,4), %eax
    ma è movl data_items(,%edi,4), %ebx
    perchè se vedi bene caricavi sempre %eax cosi che confrontavi sempre lo stesso numero con se stesso.

    spero di esserti stato d'aiuto saluti smalldragon
Devi accedere o registrarti per scrivere nel forum
1 risposte