Заполнить массив 3 элементами из массивов 1 и 2 по возрастанию - Assembler
Формулировка задачи:
Программа заполняет массив 3, элементами из массива 1 и 2 по возрастанию, но где-то ошибка не могу найти, либо регистры не те для массива 3, либо 1 не те.
.model small .stack 100h .data A db 0,3,4,6,7 B db 1,2,5,8,10 C db 10 dup (0) len equ 5 .code start: mov ax, @data mov ds, ax xor si, si xor di, di xor bp, bp mov cx, len mov si, 0 mov bp, 0 minA: mov al, A[si] cmp ah, al jle min jmp pov minB: mov ah, B[di] cmp bp, ax jle min jmp pov min: cmp si, di jle minC minC: mov bp, si mov bp, di jmp pov pov: inc si inc di mov ax,4c00h int 21h end start
Решение задачи: «Заполнить массив 3 элементами из массивов 1 и 2 по возрастанию»
textual
Листинг программы
.model small .stack org 100h .data massA db 0,3,4,6,7 sizeA equ $-dbA massB db 1,2,5,8,10 sizeB equ $-dbB massC db (sizeA+sizeB)dup (0) .code begin: mov ax,@data mov ds,ax lea si,massA lea di,massB lea bx,massC mov dx,sizeA mov cx,sizeB l1: mov al,[si] mov ah,[di] cmp al,ah jle l2 xchg dx,cx xchg si,di xchg ah,al l2: mov [bx],al inc bx inc si loop l1 mov cx,dx mov si,di l3: mov al,[si] mov [bx],al inc bx inc si loop l3 mov ax,4C00h int 21h end begin
Объяснение кода листинга программы
- Объявление переменной
massA
и инициализация массива значений:massA db 0,3,4,6,7
- Объявление переменной
sizeA
как размер массиваmassA
:sizeA equ $-dbA
- Объявление переменной
massB
и инициализация массива значений:massB db 1,2,5,8,10
- Объявление переменной
sizeB
как размер массиваmassB
:sizeB equ $-dbB
- Объявление переменной
massC
как массив суммарного размераsizeA+sizeB
и инициализация его нулями:massC db (sizeA+sizeB)dup (0)
- Начало сегмента кода:
.code
- Перемещение указателя данных в регистр
ds
:mov ax,@data
иmov ds,ax
- Инициализация указателей на массивы:
lea si, massA
,lea di, massB
,lea bx, massC
- Загрузка размерности массивов
massA
иmassB
в регистры:mov dx, sizeA
,mov cx, sizeB
- Начало цикла
l1
- Загрузка значений из массивов
massA
иmassB
в регистрыal
иah
- Сравнение значений из массивов
- Переход к метке
l2
если значение изmassA
больше значения изmassB
, иначе продолжение выполнения цикла - Обмен значений и указателей, если значение из
massB
больше значения изmassA
- Помещение значения из
massA
в массивmassC
и увеличение указателей и счетчика цикла - Проверка окончания цикла
l1
и переход к меткеl3
, если цикл ещё не завершен - Переназначение размерности массива
massB
и указателяsi
для продолжения заполнения массиваmassC
- Помещение значений из
massB
в массивmassC
и увеличение указателей и счетчика цикла - Проверка окончания цикла
l3
и завершение сегмента кода:mov ax,4C00h
иint 21h
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д