i am working on an asm tutorial book, and the second sample program will not work for me
it is linux assembler and this code is supposed to return the largest value in a list
the first time i ran it it returned 250, and after some changes it returns 136, i dont know why
Code:
# PURPOSE: Find a maximum value form a set of
# data items.
#
# VARIABLES: Registers:
#
# %edi - Holds the index of the item being examined
# %ebx - Larges data item found
# %eax - Current data item
#
# Memory locations:
#
# data_items - Contains the item data. A 0 is used
# as the end value
#
.section .data
data_items: #The data items
.long 3,56,43,65,200,1,506,943,32,4,90,5000,78,0
.section .text
.globl _start
_start:
movl $0, %edi #set the position to 0
movl data_items(,%edi,4), %eax #load the first byte of data
movl %eax, %ebx #since it is the first item it is automatically the biggest
start_loop:
cmpl $0, %eax #check if the end has been reached
je loop_exit
incl %edi #set to next data value
movl data_items(,%edi,4), %eax #load the current data value
cmpl %ebx, %eax #compare the values
jle start_loop #next loop iteration if the new value is not bigger
movl %eax, %ebx #otherwise replace the largest value
jmp start_loop #restart loop
loop_exit:
# %ebx now holds the highest vlaue and will be returned as a status\
# after an exit system call
movl $1, %eax #set exit system call
int $0x80 #run system call