Обработка целочисленного массива. - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д