Определить количество нулей в матрице - Assembler
Формулировка задачи:
Надо написать программу в языке ассемблера 8086 которая определяет количество нулей в матрице и размер матрицы даётся с клавиатуры и числа тоже с клавиатуры
Решение задачи: «Определить количество нулей в матрице»
textual
Листинг программы
array db 9,5,10,16,80,103 ; массив len = $ - array ; его длина start: ; mov si,array ; адрес массива в SI mov bp,len ; BP - длина xor bx,bx ; здесь будет результат begin: ; lodsb ; берём байт из SI mov cx,8 ; сколько раз выдвигать @1: shl al,1 ; сдвиг влево на 1 jc @2 ; пропуск, если CF=1 inc bx ; считаем нули @2: loop @1 ; следующий бит.. dec bp ; весь массив проверили? jnz begin ; нет - берём сл.байт с массива ; да - результат в BX!
Объяснение кода листинга программы
- В начале кода определен массив, его длина вычисляется как разность между символом '$' и адресом массива в переменной
array
. - Затем, используя метку
start
, создаются начальные условия: регистр SI содержит адрес первого элемента массива, а BP - его длину. - Переменная BX инициализируется нулем.
- Используя метку
begin
, происходит основная часть работы:- Забирается байт из массива с помощью команды
lodsb
. - Байт сдвигается влево на 1 позицию с помощью команды
shl al,1
. - Если после сдвига в старшем бите остаётся единица (это проверяется с помощью команды
jc @2
), то этот байт не считается нулём, и мы переходим к следующему биту с помощью командыinc bx
. - Если после сдвига в старшем бите остаётся ноль, то этот байт считается нулём, и мы увеличиваем значение переменной BX на единицу.
- Забирается байт из массива с помощью команды
- Если весь массив проверен (это проверяется с помощью команды
dec bp
), и в нём ещё остались нули (это проверяется с помощью командыjnz begin
), то мы возвращаемся к началу цикла. - Если весь массив проверен и не содержит нулей, то результат (количество нулей) сохраняется в переменной BX.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д