Использование встроенной сборки в c для проверки наибольшего значения в 32-битном целочисленном массиве - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь найти максимальный элемент в целочисленном массиве, используя встроенную сборку в c. Ниже приведена моя попытка решения с прикрепленными комментариями, показывающая мою логику c.

Моя попытка:

static inline int max_elem()
{
  int list[] = {1,8,6,2,3};
  int max, temp;
  int length = 5;

 asm volatile(
  /* initialize max */
  "init:    mov (%1), %0;"
  "         jmp start;

  /* increment arr to point to next int in memory (4-bytes) */
  "start:   add $4, %1;"

  /* check if you looped through all elements */       
  "         sub $1, %3;"
  "         cmp $0, %3;"
  "         je done;"

  /* compare max with current element in list */
  "         mov (%1), %2;"
  "         cmp %2, %0;"
  "         jl new_max;"

  "new_max: mov %2, %0;"
  "         jmp start;"

  "done: ;"
  : "=a" (max) /* assign max to traditional return register */
  : "r" (list), "r" (temp), "r" (length) /* compiler picks the assignment of input variables */
 );
}

Моя попытка решения, похоже, вызывает ошибку сегментации, несмотря на мою логику c кажется мне правильным. Буду признателен за любую дополнительную помощь или вклад, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...