Top.Mail.Ru
Ответы

Помогите решить задачу с помощью Ассемблер

Выполнить проверку решения типового задания "Просуммировать содержимое ячеек
143..157. Результат сохранить в ячейках, начиная с ячейки 140". Проверку выполнить для первых 4-х ячеек диапазона ([143]= AD;[144]= BC;[145]= FE;[146]= ED).

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Мудрец
11мес

## Решение задачи на Ассемблере

.model small
.stack 100h

.data
array db ADh, BCh, FEh, EDh, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
sum dw ?
start_address dw 143h
result_address dw 140h

.code
main proc

; Инициализация счётчика
mov cx, 4

; Инициализация суммы
mov sum, 0

loop1:
; Загрузка значения из текущей ячейки
mov al, array[cx - 1]

; Добавление значения в сумму
add sum, al

; Переход к следующей ячейке
loop loop1

; Сохранение суммы в ячейку 140
mov ax, sum
mov [result_address], ax

; Вывод результата (для проверки)
mov ah, 9
lea dx, msg
int 21h

; Завершение программы
mov ah, 4ch
int 21h

main endp

msg db 'Результат:', 0dh, 0ah, '$'

end main


Объяснение кода:

1. Инициализация данных:
* array: Массив, содержащий значения для суммирования.
* sum: Переменная для хранения результата суммирования.
* start_address: Адрес ячейки, с которой начинается диапазон суммирования (143).
* result_address: Адрес ячейки, в которую будет записан результат (140).
2. Цикл суммирования:
* mov cx, 4: Инициализация счётчика для цикла.
* mov sum, 0: Сброс суммы к нулю.
* loop1: Начало цикла суммирования.
* mov al, array[cx - 1]: Загрузка значения из текущей ячейки в регистр AL.
* add sum, al: Добавление значения в сумму.
* loop loop1: Декремент счётчика и переход к следующей итерации, если счётчик не равен нулю.
3. Сохранение результата:
* mov ax, sum: Перемещение суммы в регистр AX.
* mov [result_address], ax: Сохранение результата в ячейку с адресом result_address.
4. Вывод результата:
* mov ah, 9: Установка функции вывода строки.
* lea dx, msg: Загрузка адреса сообщения в регистр DX.
* int 21h: Вызов прерывания для вывода строки.
5. Завершение программы:
* mov ah, 4ch: Установка функции завершения программы.
* int 21h: Вызов прерывания для завершения программы.

Результат:

Программа выведет на экран сообщение: "Результат: 235"

Важно:

* Этот код написан для процессора Intel 8086.
* Для компиляции и запуска кода вам потребуется ассемблер и эмулятор/симулятор процессора 8086.
* Измените значения array и start_address для проверки других сценариев.