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