title: Reversing an array in assembly
body: <p>I'm trying to figure out how to reverse an array in assembly in a way that makes it as flexible as possible. The code I have so far is this:</p>
  
  <pre><code>; This program takes an integer array and reverses it's elements, using a loop, the SIZE, TYPE and LENGTHOF
  ; operators.
  
  TITLE lab4              (lab4.asm)
  
  INCLUDE Irvine32.inc
  
  .data
  
      arr DWORD 1h, 2h, 3h, 4h, 5h, 6h    ; Array of integers with 6 elements.
      len DWORD LENGTHOF arr / 2          ; The length of the array divided by 2.
      ;rng    DWORD LENGTHOF arr          ; The complete length of the array.
  
  .code
  main PROC
  
      mov eax, len    ; Moves the length (divided by 2) into the eax register.
      mov ebx, len    ; Sets the ebx register to 0 to serve as the counter.
      mov ecx, len    ; Loads the length of the array into the ecx register.
      mov edx, len    ; Sets a counter that starts at the end of the array.
  
      dec edx
  
      ; Start of the loop
      L1: 
  
      mov eax, arr[esi + (TYPE arr * ebx)]    ; Assigns to eax the value in the current beginning counter.
  
      xchg eax, arr[esi + (TYPE arr * edx) ]  ; Swaps the value in eax with the value at the end counter.
  
      mov arr[esi + (TYPE arr * ebx)], eax    ; Assigns the current beginning counter the value in eax.
  
      dec edx                 ; Decrements the end counter by 1.
      inc ebx                 ; Increments the beginning counter by 1.
      loop    L1              
      ; end of the loop
  
      mov ecx, LENGTHOF arr
      mov ebx, 0
  
      ; Start of loop
      L2:                                     ; Loop that runs through the array to check and make sure
      mov eax, arr[esi + (TYPE arr * ebx)]    ; the elements are reversed.
      inc     ebx
      call    DumpRegs
      loop    L2          
      ; End of loop
  
      exit
  main ENDP
  
  END main
  </code></pre>
  
  <p>This works, but only if the array has an even number of elements. What should I do to make it work for an odd number as well?</p>