В поле с заданным начальным адресом заменить элементы нулями - Assembler

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

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

Нужно написать программу на Assembler по условиям. Хотя бы понять как делать. 2. В поле длиной 17510 с начальным адресом 0210 заменить нулем все элементы, значения которых меньше 2010.

Решение задачи: «В поле с заданным начальным адресом заменить элементы нулями»

textual
Листинг программы
;---- задание #2 ....
 
      mov   cx,17510     ; длина поля в байтах
      shr   cx,1         ; разделив её на 2, получим в словах
      mov   si,210       ; начальный адрес (источник)
      mov   di,si        ;     ..он-же приёмник
@1:   lodsw              ; читаем из SI (si=si+2)
      cmp   ax,2010      ; пропускаем, если больше
      ja    next         ;
      xor   ax,ax        ; иначе: AX = 0
next: stosw              ; перезаписываем элемент массива
      loop  @1           ; мотаем цикл СХ-раз..

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

В данном коде выполняется следующая задача:

  1. Изначально в поле с заданным начальным адресом (предположительно в памяти) находятся некоторые данные.
  2. Длина этого поля в байтах равна 17510.
  3. Далее, с помощью операции shr cx,1 длина поля делится на 2, и в результате в слове (слово — это 2 байта) получается значение 8705.
  4. Затем, с помощью операции mov si,210 начальный адрес (source) этого поля приравнивается к 210.
  5. Далее, с помощью операции mov di,si начальный адрес (destination) этого поля приравнивается к значению, равному его начальному адресу.
  6. С помощью операции lodsw из регистра SI (который увеличивается на 2 после каждой итерации цикла) считывается пара байтов.
  7. С помощью операции cmp ax,2010 проверяется, больше ли прочитанное значение, чем 2010.
  8. Если это так, то с помощью операции ja next выполнение кода переходит к следующему адресу.
  9. В противном случае с помощью операции xor ax,ax устанавливается значение AX равным 0.
  10. С помощью операции stosw в память по адресу, равному начальному адресу (destination), записывается значение 0.
  11. И, наконец, с помощью операции loop @1 начинается цикл, который выполняет шаги с 6 по 10 для каждого байта в поле. Таким образом, в результате выполнения данного кода, все элементы поля, начиная с заданного адреса, заменяются нулями.

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


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

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

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