Найти число положительных четных элементов массива masm32 - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго вечера. Помогите пожалуйста найти ошибку. Задача: найти число положительных четных элементов массива. Только почему-то это число всегда равно количеству элементов в массиве. Программа под masm32. Наперед спасибо.
.586
.model flat, stdcall
option casemap: none
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
include \masm32\include\user32.inc
 
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
includelib \masm32\lib\user32.lib
 
.data
Arr dd 1,2,3,4,5,6,-7,-8,9,10
numb db 0
 
.code
start:
    mov ecx, 10
    begin:
        mov eax, [Arr+ecx*4-4]
        jns signed
        signed:
            jp parn
            parn:
                inc numb
                dec ecx
                cmp ecx, 0
                jnz begin
    PrintDec numb, "Kol"
    invoke ExitProcess, NULL
end start

Решение задачи: «Найти число положительных четных элементов массива masm32»

textual
Листинг программы
.586
.model flat, stdcall
option casemap: none
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
include \masm32\include\user32.inc
 
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
includelib \masm32\lib\user32.lib
 
.data
Arr dd 1,2,3,4,5,6,-7,-8,9,10
numb db 0
 
.code
start:
    mov ecx, 10
    begin:
        mov eax, [Arr+ecx*4-4]
        test    eax, eax    ; отрицательное?
        js next                 ; да, дальше
        test    eax,1           ; нечётное?
        jp next                 ; да, дальше
                inc [numb]
next:            dec ecx
                 cmp ecx, 0
                jnz begin
    PrintDec numb, "Kol"
    invoke ExitProcess, NULL
end start

Объяснение кода листинга программы

  1. Переменная Arr содержит 10 элементов: 1, 2, 3, 4, 5, 6, -7, -8, 9, 10.
  2. Переменная numb инициализирована нулем и используется для подсчёта числа положительных чётных элементов.
  3. Цикл начинается с переменной ecx равной 10.
  4. Ecx уменьшается на 1 на каждой итерации.
  5. Каждый элемент массива проверяется на отрицательность (тест eax, eax) и чётность (тест eax, 1).
  6. Если элемент отрицательный или нечётный, то на следующей итерации будет проверен следующий элемент.
  7. Если элемент положительный и чётный, то к переменной numb прибавляется единица.
  8. Цикл продолжается до тех пор, пока ecx больше нуля.
  9. Выводится значение переменной numb.
  10. Вызывается функция ExitProcess.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы