Hello I'm new in assembly language. I read a book to improve my knowledge (Programming from the ground up).
I understand the following example, there is a question which demand to modify the program and make it stop when reaches an ending address. I don't know how to print the current address in assembly or to compare it with a number. And is it correct to use cmpl $13, %edi to detect when end of data_items has been reached ?
.section .data
data_items:             #These are the 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, %eax is
                                # the biggest
start_loop:                     # start loop
#cmpl $22, %eax                 # check to see if we’ve hit the end using Value
#cmpl $13, %edi                 # Using Length to break loop
#I have to add a condition here  to use an ending address 
#rather than the number 0 to know when to stop.
je loop_exit
incl %edi                       # load next value
movl data_items(,%edi,4), %eax
cmpl %ebx, %eax                 # compare values
jle start_loop                  # jump to loop beginning if the new
                                # one isn’t bigger
movl %eax, %ebx                 # move the value as the largest
jmp start_loop                  # jump to loop beginning
loop_exit:
    # %ebx is the status code for the exit system call
    # and it already has the maximum number
            movl $1, %eax   #1 is the exit() syscall
            int $0x80
 
     
    