@fsociety_one

Почему идёт бесконечный цикл?

Привет всем сборщикам, кто подскажет, почему cellValues уходит в бесконечный цикл?
section .text
        global _start    

_start:
        mov     edx, lenBT
        mov     ecx, borderTop
        mov     ebx, 1
        mov     eax, 4
        int     0x80

        mov     cx, 3
cellValues:
        mov     edx, lenBM
        mov     ecx, borderMiddle
        mov     ebx, 1
        mov     eax, 4
        int     0x80
        loop    cellValues

        mov     edx, lenBB
        mov     ecx, borderBottom
        mov     ebx, 1
        mov     eax, 4
        int     0x80

        mov     eax, 1   
        int     0x80  

section .data
        field times 9 db 'X'

        borderTop db    '***** ***** *****', 0dh, 0ah, '*   * *   * *   *', 0xa
        lenBT equ $ - borderTop
        
        borderMiddle db '* '
        lenBM equ $ - borderMiddle

        borderBottom db '*   * *   * *   *', 0dh, 0ah, '***** ***** *****', 0xa
        lenBB equ $ - borderBottom

        num resb 2
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
mov     cx, 3
cellValues:
        mov     edx, lenBM
        mov     ecx, borderMiddle
        mov     ebx, 1
        mov     eax, 4
        int     0x80
        loop    cellValues

Думал, терётся cx от ecx

Трётся, и не cx, а ecx. И инициализировать и сохранять/восстанавливать надо ecx, потому что в 32-битном коде ecx работает счётчиком для опкода loop.
С другой стороны, использование опкода loop в наше время выглядит анахронизмом. Если есть регистр который не меняется системным вызовом лучше использовать его и делать явный dec и jnz.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы