Ассемблерный код для алгоритма високосного года
При запуске этого кода каждый год, который я вставляю, вывод возвращается как "это високосный год", когда на самом деле некоторые строки не являются високосными годами.
Может ли кто-нибудь помочь найти логическую ошибку?
Что я уже пробовал:
section .data msg db 'Enter a year ' , 10 msglen equ $-msg leapYear db ' is a leap year.', 10 leapYearLenght equ $-leapYear noLeapYear db ' is not a leap year.', 10 noLeapYearLenght equ $-noLeapYear section .bss year resd 1 section .text global main main: mov eax,4 mov ebx, 0 mov ecx, msg mov edx, msglen int 0x80 mov eax, 3 mov ebx, 0 mov ecx, year mov edx, 4 int 0x80 mov eax, 4 mov ebx, 1 int 0x80 mov edx, 0 mov eax, ecx mov ebx, 4h div ebx ; step 3 mov eax, edx cmp eax, 0 jne NoLeapYear je L1 L1: mov edx, 0 mov eax, ecx mov ebx, 64h div ebx ; step 2 mov eax, edx cmp eax, 0 je L2 jne LeapYear L2: mov edx, 0 mov eax, ecx mov ebx, 190h div ebx ;step 1 mov eax, edx cmp eax, 0 je LeapYear jne NoLeapYear LeapYear: ; step4 mov eax, 4 mov ebx, 1 mov ecx, leapYear mov edx, leapYearLenght int 0x80 jmp Exit NoLeapYear: ; step 5 mov eax, 4 mov ebx, 1 mov ecx, noLeapYear mov edx, noLeapYearLenght int 0x80 jmp Exit Exit: mov eax, 1 mov ebx, 0 int 0x80
jeron1
Можете ли вы сделать один шаг с помощью отладчика?
C-P-User-3
Вот ваша ошибка номер один: вы не комментируете свой код.
Отредактируйте этот источник с полезным комментарием к каждой инструкции и...
* Вы сразу же обнаружите свою собственную ошибку
* Если нет, я уверен, что другие быстро найдут его
Действительно, напишите мне сообщение после добавления комментариев adquate, и я буду рад еще раз взглянуть на него.