Я пытаюсь найти максимальный элемент в целочисленном массиве, используя встроенную сборку в 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 кажется мне правильным. Буду признателен за любую дополнительную помощь или вклад, спасибо!