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.