Определить количество нулей в матрице - 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!

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

  1. В начале кода определен массив, его длина вычисляется как разность между символом '$' и адресом массива в переменной array.
  2. Затем, используя метку start, создаются начальные условия: регистр SI содержит адрес первого элемента массива, а BP - его длину.
  3. Переменная BX инициализируется нулем.
  4. Используя метку begin, происходит основная часть работы:
    • Забирается байт из массива с помощью команды lodsb.
    • Байт сдвигается влево на 1 позицию с помощью команды shl al,1.
    • Если после сдвига в старшем бите остаётся единица (это проверяется с помощью команды jc @2), то этот байт не считается нулём, и мы переходим к следующему биту с помощью команды inc bx.
    • Если после сдвига в старшем бите остаётся ноль, то этот байт считается нулём, и мы увеличиваем значение переменной BX на единицу.
  5. Если весь массив проверен (это проверяется с помощью команды dec bp), и в нём ещё остались нули (это проверяется с помощью команды jnz begin), то мы возвращаемся к началу цикла.
  6. Если весь массив проверен и не содержит нулей, то результат (количество нулей) сохраняется в переменной BX.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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