Я пытаюсь найти C-эквивалент следующего фрагмента сборки:
.section .text
.globl mystery
.type mystery, @function
mystery:
pushl %ebp
movl %esp, %ebp
xorl %eax, %eax
xorl %exc, %ecx
movl 8(%ebp), %edx
begin:
cmpl 12(%ebp), %ecx
jge done
addl (%edx, %ecx, 4), %eax
incl %ecx
jump begin
done:
movl %ebp, %esp
popl %ebp
ret
Я получаю раздел «начало». Это похоже на цикл, который берет параметр из функции и сравнивает его с тем, что находится в %ecx. Если условие jge выполнено, функция возвращает значение, если нет, то добавляет %edx на 4%ecx, перемещает его в %eax, увеличивает %ecx и повторяет цикл снова.
Я действительно не понимаю "загадочной" части. В частности, операторы xorls и movl. Если в %eax или %ecx ничего нет для запуска, что делает xorl. Я предполагаю, что movl берет параметр из функции и перемещает его в% edx?
Любое понимание полезно и ценно.