Member 12674320 Ответов: 0

Ассемблерный код для алгоритма високосного года


При запуске этого кода каждый год, который я вставляю, вывод возвращается как "это високосный год", когда на самом деле некоторые строки не являются високосными годами.

Может ли кто-нибудь помочь найти логическую ошибку?

Что я уже пробовал:

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, и я буду рад еще раз взглянуть на него.

0 Ответов