Определить количество нулей в матрице - Assembler

Узнай цену своей работы

Формулировка задачи:

Надо написать программу в языке ассемблера 8086 которая определяет количество нулей в матрице и размер матрицы даётся с клавиатуры и числа тоже с клавиатуры

Решение задачи: «Определить количество нулей в матрице»

textual
Листинг программы
  1. array  db  9,5,10,16,80,103    ; массив
  2. len    =   $ - array           ; его длина
  3.  
  4. start:                         ;
  5.      mov   si,array            ; адрес массива в SI
  6.      mov   bp,len              ; BP - длина
  7.      xor   bx,bx               ; здесь будет результат
  8. begin:                         ;
  9.      lodsb                     ; берём байт из SI
  10.      mov   cx,8                ; сколько раз выдвигать
  11. @1:  shl   al,1                ; сдвиг влево на 1
  12.      jc    @2                  ; пропуск, если CF=1
  13.      inc   bx                  ; считаем нули
  14. @2:  loop  @1                  ; следующий бит..
  15.      dec   bp                  ; весь массив проверили?
  16.      jnz   begin               ; нет - берём сл.байт с массива
  17.                                ; да - результат в 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы