44 lines
1.6 KiB
NASM
44 lines
1.6 KiB
NASM
#PURPOSE: This program finds the maximum number of a set of data items.
|
|
#
|
|
|
|
#VARIABLES: The registers have the following uses:
|
|
#
|
|
# %edi - Holds the index of the data item being examined
|
|
# %ebx - Largest data item found
|
|
# %eax - Current data item
|
|
#
|
|
# The following memory locations are used:
|
|
#
|
|
# data_items - contains the item data. A 0 is used to terminate the data
|
|
#
|
|
|
|
.section .data
|
|
data_items:
|
|
.long 3,67,34,222,45,75,54,34,44,33,22,11,66,0
|
|
|
|
.section .text
|
|
.globl _start
|
|
|
|
_start:
|
|
movl $0, %edi # move 0 into the index register
|
|
movl data_items(,%edi,4), %eax # load the first byte of data
|
|
movl %eax, %ebx # since this is the first item it
|
|
# is the biggest (duh)
|
|
|
|
start_loop: # start the loop
|
|
cmpl $0, %eax # check to see if end value 0
|
|
je loop_exit
|
|
incl %edi # increase index
|
|
movl data_items(,%edi,4),%eax # load the next byte of data
|
|
cmpl %ebx, %eax # compare values
|
|
jle start_loop # jump to the loop beginning if the
|
|
# new value isn't bigger
|
|
movl %eax, %ebx # move the value as the largest
|
|
jmp start_loop # jump to loop beginning
|
|
|
|
loop_exit:
|
|
# since %ebx is already the set as the largest value in the data
|
|
# simply return it in the exit system call since it's already %ebx
|
|
movl $1, %eax # 1 tell the kernel to exit
|
|
int $0x80
|