Как подсчитать нечетное количество чисел в массиве - Assembler

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

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

Подскажите пожалуйста как можно подсчитать количество нечетных чисел в массиве из 15 целых чисел?

Решение задачи: «Как подсчитать нечетное количество чисел в массиве»

textual
Листинг программы
; masm dos exe #
.286
.model small
.data
MAS db 0,1,5,8,9,9,7,9,8,5,1,0,1,5,8,9,5,1
Num = $ - MAS
sum db 0
.code
org 100h
start:  mov ax,@data
    mov ds,ax
    mov ax,3
    int 10h;очищаем экран
    mov si,offset MAS
    mov cx,Num
@0: lodsb
    shr al,1
    adc sum,0
    loop @0
    mov al,sum
    aam
    add ax,'00'
    ror ax,8
    int 29h
    ror ax,8
    int 29h 
    mov ah,0; ждем нажатия на клавиатуру
    int 16h
    mov ah,4Ch; завершаем программу 
    int 21h
end start

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

В этом коде выполняется подсчет нечетного количества чисел в массиве. Список действий, которые происходят в коде, можно оформить в виде последовательности:

  1. Задаются начальные значения регистрам и памяти:
    • Регистр AX получает значение @data (адрес области данных).
    • Регистр DS получает значение AX (адрес области данных).
    • Регистр AX получает значение 3.
    • Выполняется команда int 10h, очищающая экран.
    • Регистр SI получает значение MAS (адрес начала массива).
    • Регистр CX получает значение Num (размер массива).
  2. Выполняется цикл по всем элементам массива:
    • Команда lodsb загружает в регистр AL значение следующего элемента массива.
    • Команда shr al,1 выполняет операцию побитового сдвига вправо на 1 бит (для получения значения следующего бита).
    • Команда adc sum,0 добавляет к сумме значение бита (если он равен 1) и выполняет обратный сдвиг на 1 бит.
    • Команда loop @0 выполняет повтор цикла, пока не будет выполнено условие (регистр CX не равен 0).
  3. Выполняется обработка результата:
    • Регистр AL получает значение суммы.
    • Команда aam преобразует десятичное значение в шестнадцатеричное.
    • Команда add ax,'00' добавляет к значению суммы ведущие нули до 2-х цифр.
    • Команда ror ax,8 выполняет обратный сдвиг на 8 бит (для получения старшего бита).
    • Выполняется два интеракта с сервисом ввода/вывода (int 29h), для сохранения результата в файл.
  4. Программа ожидает нажатия на клавиатуру (регистр AH получает значение 0) и завершается (команда int 4Ch).

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

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