Как прыгнуть обратно в al oop после прыжка из одного - NASM - PullRequest
0 голосов
/ 17 февраля 2020

Я использую NASM и застрял на том, как вернуться в al oop после прыжка с одного.

В _start я использовал call loop1, чтобы запустить l oop. L oop успешно выполняется, и первая итерация l oop выводит a, что я и хочу. Цель этого l oop состоит в том, чтобы перебрать значение в edi и распечатать каждый символ, если это буква a. В настоящее время он печатает только один a, если находит хотя бы один a в edi, и ничего, если не может его найти.

Да, все метки, используемые в этом коде, определены так что это не проблема. Пожалуйста, прокомментируйте, если мне нужно опубликовать мой полный код.

Вот мой код:

loop1:
    cmp  [edi], byte 0
    je   endloop

    cmp  byte [edi], 'a'
    je   istrue1

    add  edi, dword 1
    add  [n], dword 1
    jmp  loop1
endloop:
    ret

istrue1:
    mov  ecx,edi
    mov  edx,1
    call print
    jmp  loop1

Причина, по которой я использую этот подход, заключается в том, что я ранее делал это с .loop внутри _start и это не сработало так, как я задумал, поэтому я подумал, что не будет никаких проблем, если я включу это в процедуру.

Спасибо всем, кто может мне помочь с этим:)

1 Ответ

0 голосов
/ 17 февраля 2020

Обе ошибки были исправлены с помощью Jester .

Первая ошибка была исправлена ​​добавлением ret в конец моей функции print, и ошибка сегментации была исправлено путем изменения первой строки моей loop1 функции с:

cmp [edi], byte 0

На это:

cmp byte [edi], byte 0

I'm точно не знаю, почему добавление byte к этой строке исправило это, но я рад, что это сработало.

...