Обработка целочисленного массива. - Assembler (223120)
Формулировка задачи:
1. Задать в программе массив из 5 элементов.
2. Последовательно заполнить элементы массива результатом целочисленного деления/умножения выбранного числа на «2»/«4» (использовать операторы побитового сдвига).
3. Проведите циклический сдвиг каждого элемента массива на величину, равную его номеру
Решение задачи: «Обработка целочисленного массива.»
textual
Листинг программы
LOCALS .model small .stack 100h .data A dw 5 dup (?) .code main proc mov ax, @data mov ds, ax ;заполнение массива lea si, A mov cx, 5 mov ax, 7 ;выбранное число @@For1: shl ax, 1 ;умножение на 4 shl ax, 1 mov [si], ax add si, 2 loop @@For1 ;циклический сдвиг каждого элемента массива на величину, ;равную его номеру lea si, A mov cx, 5 mov dx, 1 ;номер элемента массива @@For2: push cx mov cx, dx ror word ptr [si], cl pop cx add si, 2 inc dx loop @@For2 mov ax, 4C00h int 21h main endp end main
Объяснение кода листинга программы
- Указание локальных переменных
- Установка модели памяти
small - Выделение стека размером 100h
- Объявление секции данных
- Объявление массива
Aразмером 5 элементов типа word (целочисленный массив)
- Объявление массива
- Объявление секции кода
- Объявление процедуры
main- Загрузка адреса сегмента данных в регистр
ax - Перемещение значения
axв регистрds - Заполнение массива
A - Загрузка адреса массива
Aв регистрsi - Установка счетчика цикла в значение 5
- Загрузка значения 7 в регистр
ax - Исполнение цикла
For1:- Сдвиг значения в
axналево на два бита (умножение на 4) - Сохранение значения в память по адресу
si - Увеличение адреса
siна 2 (размер элемента массива) - Уменьшение счетчика цикла
- Сдвиг значения в
- Циклический сдвиг каждого элемента массива на величину, равную его номеру
- Загрузка адреса массива
Aв регистрsi - Установка счетчика цикла в значение 5
- Установка значения
dxв 1 (номер элемента массива) - Исполнение цикла
For2:- Сохранение значения счетчика цикла в стек
- Загрузка значения
dxв регистрcx - Циклический сдвиг значения по адресу
siналево на значение регистраcl - Извлечение значения счетчика цикла из стека
- Увеличение адреса
siна 2 (размер элемента массива) - Увеличение значения
dxна 1 - Уменьшение счетчика цикла
- Завершение программы
- Загрузка адреса сегмента данных в регистр
- Объявление процедуры
- Завершение процедуры
main - Завершение программы
main