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