maxvalue/MaxValue.asm

44 lines
1.6 KiB
NASM
Raw Normal View History

2016-05-24 16:49:59 +00:00
#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