The goal of this function is to replicate the strupr C function. It's stuck in an infinite iteration and I cannot figure out why, it doesn't seem to end. The way I'm looking at it is the argv from the command line is sent as a single array of chars, I simply try to access it and determine if it has to be changed and then printed - or simply just printed. It receives a single parameter which is that very same argv value.
void lowerToUpper (char *msg);
   .globl    lowerToUpper
   .type    lowerToUpper, @function
  lowerToUpper:
      mov $0,%r12
      lea (%rdi), %rdx
      jmp .restartLoop
  .restartLoop:
      add $8, %rdx
      cmp $0,%r13
      jne .isValid
      ret
  .isValid:
      cmp $97, %r13
      jbe .printValue
      jg .changeValue
  .changeValue:
      #sub $32, %r13
      jmp .printValue
  .printValue:
      mov $format2, %edi
      mov %r13, %rsi
      mov $0, %eax
      call printf
      add $1,%rdx
      jmp .restartLoop
The goal of this function is to print the highest number in an array. It receives a pointer to an unsigned int (an array of numbers) and it's length.
void printHigher (unsigned int *data, int len);
  printHigher:
    mov $0,%r14
    mov $0,%r15
    jmp .Loop
    ret
.Loop:
    mov (%rdi), %r8
    cmp %r8,%rdi
    jl .calculateMax
    jmp .printMax
.calculateMax:
    cmp %r8, %r15
    jg .assignMax
    add $1,%r14
    add $8,(%rdi)
    jmp .Loop
.assignMax:
    mov %r8, %r15
.printMax:
    mov $format, %edi
    mov %r15, %rsi
    mov $0, %eax
    call printf
