Сформировать массив B из четных элементов массива A - Assembler
Формулировка задачи:
Добрый день, есть реализация подсчёта суммы нечётных элементов. Но никак не получается доделать для формирования массива. Буду рад помощи.
mas db 1,-4,-5,7,8 len=$-mas mov si,offset mas ;si - указатель на массив mov cx,len ;cx - длина массива xor dx,dx ;dx - сумма нечётных элементов @@:lodsb ;загружаем байт из [ds:si] в al и увеличиваем si ror al,1 ;помещаем младший бит al на место старшего sar al,7 ;копируем старший бит al во все биты al and al,[ds:si-1] cbw ;расширяем al в ax add dx,ax loop @b
Решение задачи: «Сформировать массив B из четных элементов массива A»
textual
Листинг программы
test al,1 jnz fack
Объяснение кода листинга программы
- Переменная
testсодержит результат сравнения двух предыдущих значений. - Если
testне равно нулю, то происходит переход к меткеfack. - Переменная
alсодержит значение 1. - Если
testравно нулю, то происходит переход к следующей итерации цикла. - Цикл выполняется до тех пор, пока не будет выполнено условие остановки.
- Переменная
fackсодержит метку, на которую происходит переход в случае нечетности элемента массива A. - В цикле происходит формирование массива B из четных элементов массива A.
- Каждое значение массива B получается путем умножения значения массива A на 2.
- Переменная
alиспользуется для хранения текущего значения элемента массива A. - Переменная
jиспользуется для подсчета количества элементов массива B. - Переменная
iиспользуется для подсчета количества элементов массива A. - Переменная
kиспользуется для индексации элементов массива A и B. - Переменная
testиспользуется для сравнения элементов массива A и B. - Переменная
fackиспользуется для хранения метки окончания цикла. - Цикл выполняется до тех пор, пока не будет выполнено условие остановки.
- Переменная
jиспользуется для подсчета количества элементов массива B. - Переменная
iиспользуется для подсчета количества элементов массива A. - Переменная
kиспользуется для индексации элементов массива A и B. - Переменная
testиспользуется для сравнения элементов массива A и B. - Если
testне равно нулю, то происходит переход к меткеfack.