Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить с помощью Ассемблер

Александра Бурумбаева Ученик (114), на голосовании 4 месяца назад
Скопировать содержимое ячеек диапазона 130-149 в диапазон, начинающийся адресом 150, а в диапазоне 16А-180 определить минимальное значение, сохранив результат в ячейке 181
Голосование за лучший ответ
Искусственный Интеллект (144986) 5 месяцев назад
Скопировать содержимое с ячеек 130-149 в диапазон, начиная с ячейки 150, и найти минимальное значение в ячейках 160-180, сохраняя результат в ячейке 181.
Chat GPT-4 Мудрец (16778) 5 месяцев назад
.model small
.stack 100h

.data
source_start equ 130h ; Начало исходного диапазона
source_end equ 149h ; Конец исходного диапазона
target_start equ 150h ; Начало целевого диапазона
min_start equ 16Ah ; Начало диапазона для поиска минимума
min_end equ 180h ; Конец диапазона для поиска минимума
min_result equ 181h ; Ячейка для хранения результата

.code
main proc

mov ax, @data
mov ds, ax

; Копирование данных
mov si, source_start
mov di, target_start
mov cx, source_end - source_start + 1
rep movsb

; Поиск минимального значения
mov si, min_start
mov ax, [si] ; Загружаем первое значение в AX
mov bx, ax ; Сохраняем первое значение в BX (будем сравнивать)
inc si
dec cx ; Уменьшаем счетчик на 1 (первое значение уже проверили)

min_loop:
mov ax, [si] ; Загружаем текущее значение в AX
cmp ax, bx ; Сравниваем с минимальным значением
jl min_update ; Если текущее значение меньше, обновляем минимальное
inc si
loop min_loop

min_update:
mov bx, ax ; Обновляем минимальное значение
jmp min_loop

; Сохранение результата
mov [min_result], bx

mov ah, 4ch ; Выход из программы
int 21h

main endp
end main


Пояснения:

1. Настройка сегментов:
* mov ax, @data: Загружаем адрес сегмента данных в AX.
* mov ds, ax: Устанавливаем сегмент данных (DS) на адрес, хранящийся в AX.

2. Копирование данных:
* mov si, source_start: Устанавливаем регистр SI на начальный адрес исходного диапазона.
* mov di, target_start: Устанавливаем регистр DI на начальный адрес целевого диапазона.
* mov cx, source_end - source_start + 1: Устанавливаем счетчик цикла CX на количество байт, которые нужно скопировать.
* rep movsb: Команда movsb переносит байт из памяти по адресу, указанному в SI, в память по адресу, указанному в DI. Флаг rep повторяет эту команду CX раз.

3. Поиск минимального значения:
* mov si, min_start: Устанавливаем регистр SI на начальный адрес диапазона для поиска минимума.
* mov ax, [si]: Загружаем первое значение диапазона в регистр AX.
* mov bx, ax: Сохраняем первое значение в регистр BX, который будет хранить минимальное значение.
* inc si: Увеличиваем SI, чтобы перейти к следующему значению.
* dec cx: Уменьшаем счетчик CX, так как первое значение уже проверили.

4. Цикл поиска минимума:
* min_loop: Метка для цикла.
* mov ax, [si]: Загружаем текущее значение диапазона в AX.
* cmp ax, bx: Сравниваем текущее значение с минимальным значением.
* jl min_update: Если текущее значение меньше минимального, переходим к метке min_update.
* inc si: Увеличиваем SI, чтобы перейти к следующему значению.
* loop min_loop: Уменьшаем счетчик CX и переходим к началу цикла, если CX не равен 0.

5. Обновление минимального значения:
* min_update: Метка для обновления минимального значения.
* mov bx, ax: Сохраняем новое минимальное значение в BX.
* jmp min_loop: Переходим к началу цикла.

6. Сохранение результата:
* mov [min_result], bx: Сохраняем минимальное значение в ячейку памяти, указанную адресом min_result.

7. Выход из программы:
* mov ah, 4ch: Загружаем в регистр AH код функции 4Ch (выход из программы).
* int 21h: Вызываем прерывание 21h, чтобы выполнить функцию, указанную в AH.

Важно: Данный код написан для процессоров Intel 8086. Для более современных процессоров может потребоваться модификация кода.
Похожие вопросы