Найти количество четных чисел - Assembler
Формулировка задачи:
Помогите,пожалуйста. Нужно доделать счетчик "Найти количество четных чисел" основа кода должна быть такой,индекс-база адрессирование. В ответе должно быть 4
.model tiny
.code
.startup
Org 100h
Jmp Short Start
Vector Dw 2, 7, -1, 16, 15
N Equ 5
Start:
Xor Bx, Bx
Xor Si, Si
Mov Cx, N
S:
Mov Ax, Vector[Bx][Si]
Test Dx, 00000001B
Jnz _Last
Inc Bx
Inc Si
_Last:
Add Bx,2
Loop S
.exit 0
endРешение задачи: «Найти количество четных чисел»
textual
Листинг программы
.model tiny .code .startup Org 100h Jmp Short Start Vector Dw 2, 7, -1, 16, 15 N Equ 5 Count dw 0 Start: lea bx, [Vector] Xor Si, Si mov [Count], 0 Mov Cx, N S: mov ax, [bx+si] shr ax, 1 cmc adc [Count], 0 add si, 2 Loop S .exit 0 end
Объяснение кода листинга программы
- .model tiny — указывает на модель памяти, в данном случае tiny, что означает, что будут использоваться только регистры
- .code — сегмент кода
- .startup — сегмент инициализации
- Org 100h — указание на начальный адрес сегмента
- Jmp Short Start — переход на начало программы
- Vector Dw 2, 7, -1, 16, 15 - массив чисел, с которыми будет производиться проверка на четность
- N Equ 5 - константа, используемая в качестве счётчика для цикла
- Count Dw 0 - счётчик для подсчёта четных чисел
- Start: — метка начала программы
- lea bx, [Vector] — загрузка базового адреса массива в bx
- Xor Si, Si — инициализация счётчика для прохождения по массиву
- mov [Count], 0 - инициализация счётчика для подсчёта четных чисел
- Mov Cx, N — установка счётчика для цикла
- S: — метка начала цикла
- mov ax, [bx+si] — загрузка очередного числа из массива в ax
- shr ax, 1 - выделение четного бита из числа
- cmc — проверка чётности числа, если число чётное, то результат будет отрицательным
- adc [Count], 0 - прибавление единицы к счётчику, если число чётное
- add si, 2 - переход к следующему числу в массиве
- Loop S — продолжение цикла до тех пор, пока счётчик не станет равным нулю
- .exit 0 - завершение программы