В поле с заданным начальным адресом заменить элементы нулями - 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 ; мотаем цикл СХ-раз..
Объяснение кода листинга программы
В данном коде выполняется следующая задача:
- Изначально в поле с заданным начальным адресом (предположительно в памяти) находятся некоторые данные.
- Длина этого поля в байтах равна 17510.
- Далее, с помощью операции
shr cx,1длина поля делится на 2, и в результате в слове (слово — это 2 байта) получается значение 8705. - Затем, с помощью операции
mov si,210начальный адрес (source) этого поля приравнивается к 210. - Далее, с помощью операции
mov di,siначальный адрес (destination) этого поля приравнивается к значению, равному его начальному адресу. - С помощью операции
lodswиз регистра SI (который увеличивается на 2 после каждой итерации цикла) считывается пара байтов. - С помощью операции
cmp ax,2010проверяется, больше ли прочитанное значение, чем 2010. - Если это так, то с помощью операции
ja nextвыполнение кода переходит к следующему адресу. - В противном случае с помощью операции
xor ax,axустанавливается значение AX равным 0. - С помощью операции
stoswв память по адресу, равному начальному адресу (destination), записывается значение 0. - И, наконец, с помощью операции
loop @1начинается цикл, который выполняет шаги с 6 по 10 для каждого байта в поле. Таким образом, в результате выполнения данного кода, все элементы поля, начиная с заданного адреса, заменяются нулями.