0

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
tiger123
  • 23
  • 7
  • 1
    Learn to use a debugger. Hint: your `.printMax` has no ending. – Jester Nov 05 '17 at 17:52
  • I'd never heard of `strupr`. Turns out MS defines it. https://stackoverflow.com/questions/26327812/strupr-and-strlwr-in-string-h-part-are-of-the-ansi-standard (and for a while claimed that it was defined by POSIX, but that's not true.) – Peter Cordes Nov 05 '17 at 18:40

0 Answers0