2015-03-30 1 views
0

Я продолжаю получать ошибку сегментации во второй раз, когда я иду через цикл, и введите E (предназначенный для выхода из цикла). Если я вхожу в E в первый раз, он полностью прекратится. Надеюсь, я просто здесь немой, и кто-то может предложить легкое решение!Ошибка сегментации NASM (сбоку) на итерации 2-го цикла

Спасибо за ваше время.

Объявления:

segment .bss 
     a resd 1 
     b resd 1 
     op resb 2 

Главная:

loop: 

    call read_int ;read two integers, then a char 
    mov [a], eax 
    call read_int 
    mov [b], eax 
    call read_char 
    call read_char ;takes newline input 

    cmp al, 'E'  ;if char is E, then exit 
    je exit 

    call loop  ;start over 

exit: 
    dump_regs 0  ;completes, but then seg faults if the loop has run more than once 

ответ

3

Я вижу несколько проблем/потенциальные проблемы сразу плохо:

1), когда вы "называть" подпрограммой, вам обычно необходимо: a) обновить стек (в вашей подпрограмме) и b) очистить стек (после возврата).

Вы не показали нам «read_int» или «read_char», но я подозреваю, что это, вероятно, так.

2) ПЛОХО: call loop. ЛУЧШЕ: jmp loop.

Вы можете найти несколько хороших примеров NASM здесь: http://www.csee.umbc.edu/portal/help/nasm/sample.shtml

+0

ВЫ удивительны. Какая глупая ошибка с моей стороны. Очень ценю помощь! Я буду повышать и проверять, как только моя новая учетная запись позволяет это. – blythe83