Я думаю, что я должен изменить эту строку:Что следует изменить для выхода из цикла?
inc byte [nr]
для выхода из цикла, и моя программа должна печатать 512.
%include "io.inc"
section .data
nr: db 0x88, 0x1
section .text
global CMAIN
CMAIN:
for:
inc byte [nr]
jnc for
inc byte [nr + 1]
PRINT_UDEC 2, nr
xor eax, eax
ret
Если вы посмотрите на набор инструкций ссылки на инструкции [INC] (http://www.felixcloutier.com/x86/INC.html) вы увидите, что ИНК не изменить флаг Carry. Ссылка на набор команд говорит _ ** Флаг CF не влияет **. Флаги OF, SF, ZF, AF и PF устанавливаются в соответствии с результатом. Из-за этого ваш цикл никогда не заканчивается с тех пор, как вы используете _JNC_ (Jump no carry). Может быть, вы хотите _JNZ_ (прыгать не ноль) вместо _JNC_? –
Если вы хотите увеличить на 1 и установить флагов Carry, вы можете использовать инструкцию [_ADD_] (http://www.felixcloutier.com/x86/ADD.html), например 'add byte [nr], 1' –
Side заметка. Существует один из двух возможных результатов для этого кода, который вы используете _INC_. Если флаг переноса был очищен до начала цикла, он будет бесконечно циклически (это, скорее всего, то, что вы видите). Если это было установлено перед циклом, тогда оно будет печатать 649 (0x200 + 0x89) –