Can someone help me find what is wrong with the following program? I'm reading 'Programming from the Ground Up' and attempting to translate the examples into x86-64 assembly. The following program finds the largest number in a set of data. But when I assemble, link, and run it I get 0. Which is obviously not the largest number. It runs fine with 32-bit registers/instructions, but not 64-bit.
# PURPOSE: This program finds the largest value in a set of data. # # # VARIABLES: %rax holds the current value. %rdi holds the largest # value. %rbx holds the current index. data_items is the # actual set of data. The data is terminated with a 0. # .section .data data_items: .long 76, 38, 10, 93, 156, 19, 73, 84, 109, 12, 21, 0 .section .text .globl _start _start: movq $0, %rbx movq data_items(, %rbx, 4), %rax movq %rax, %rdi loop_start: cmpq $0, %rax # Have we reached the end? je loop_end incq %rbx # Increment the index. movq data_items(, %rbx, 4), %rax # Load the next value. cmpq %rdi, %rax # Is new value larger? jle loop_start movq %rax, %rdi # New val is larger, store # it. jmp loop_start loop_end: # The largest value is already in %rdi and will be returned as # exit status code. movq $60, %rax syscall