Найти количество чисел меньших 10h. Массив байт - Assembler
Формулировка задачи:
Найти количество чисел меньших 10h. Массив байт
Здравствуйте, дали задание а я на нём застрял. А точнее я не знаю в чём ошибка .Помогите пожалуйста.
data segment
max db ?
mass db 10,24,76,-105,-25,103,-24,70,124,97
data ends
code segment
assume cs: code, ds: data
start:
mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, mass ; Загрузить адрес смещения массива
xor al,al ; обнуляем al
mov cx, 10 ; Установить счетчик повторений цикла
beg: mov ah, [bx] ; элемент массива в Аккумулятор
cmp ah, 10h ; сравниваем < с 0AF
jae no ; jae - выше или равно
inc al ; в al - результат
no: inc bx ; Следующий элемент
loop beg
mov max, al
quit: mov ax,4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end startРешение задачи: «Найти количество чисел меньших 10h. Массив байт»
textual
Листинг программы
mov [max], ah mov al, ah aam add ax, 3030h cmp ah, 30h jz @F xchg ah, al int 29h xchg ah, al @@: int 29h quit: mov ax,4C00h ; Код завершения 0
Объяснение кода листинга программы
1. mov [max], ah — в регистре max сохраняется значение al 2. mov al, ah — в регистре al сохраняется значение max 3. aam — деление al на 10 с остатком, результат в ah, остаток в al 4. add ax, 3030h — прибавление к ax значения 3030h 5. cmp ah, 30h — сравнение значения ah с 30h 6. jz @F — если ah меньше или равно 30h, то переход к метке @F 7. xchg ah, al — обмен значениями между ah и al 8. int 29h — ввод/вывод, вывод значения al в соответствующее устройство 9. xchg ah, al — обмен значениями между ah и al 10. int 29h — ввод/вывод, вывод значения al в соответствующее устройство 11. mov ax,4C00h — завершение работы программы с кодом 0