# This code has been originally copied from max.s # It has been modified to: # - Find the smallest value, instead of the largest # - Use Start/End addresses to delimit the boundaries of the number list # # %rax - holds the current element being examined # %rbx - Holds the smallest number .section .data # This version has 2 labels, one to point to the start of the list, and another # to point to the address right after it, so we can use it to search the list # boundary. data_items: .quad 234,10,9,230,66,77,23,66,101,69,100 data_end: .section .text .globl _start _start: # Using immediate mode with a label, will give you the ADDRESS of the # instruction/data it points to. Once the label itself contains an ADDRESS, the # immediate mode will give you the ADDRESS itself. # Using direct mode with a label, will give you the DATA into the address the # label points to. Once the label itself contains an address, the direct mode, # as expected will give you the DATA into the address pointed by the label. movq $data_items, %rax cmpq $data_end, %rax # We need this check here in case je exit_loop_empty # the items list is empty movq (%rax), %rbx loop_start: addq $8, %rax # We are using QuadWords, so 8 bytes cmpq $data_end, %rax je exit_loop cmpq (%rax), %rbx jle loop_start movq (%rax), %rbx jmp loop_start exit_loop_empty: movq $255, %rbx exit_loop: movq $1, %rax int $0x80