Записать max элементы из двух массивов в третий - Assembler
Формулировка задачи:
Здравствуйте.
Даны два одномерных массива, А[4], B[4]. Нужно, попарно сравнивая их элементы, записать максимальные в массив С. Ну т.е. результат будет примерно С: 7 8 9 6
В общем, где-то ошибка, думаю в m3 или m4. Посмотрите, пожалуйста. На Asm пишу недолго, т.ч. извините сразу.
sseg segment
db 128 dup(?)
sseg ends
dseg segment
a db 7,4,9,3
b db 4,8,2,6
c db 4 dup(?)
dseg ends
cseg segment
assume ds:dseg, cs:cseg, ss:sseg
start proc far
m1:
mov cx,4
mov al,a[si]
cmp al,b[si]
ja m2
mov bl,b[si]
mov c[si],bl
inc si
loop m1
m2:
mov bl,a[si]
mov c[si],bl
cmp cx,1
jz m4
jmp m3
m4:
xor bx,bx
mov bx,cx
mov ds,bx
mov si,0
m3:
mov ah,02
mov dl,c[si]
add dl,30h
inc si
int 21h
mov ah,02
mov dx,20h
int 21h
mov ah,09
mov dx,offset c
int 21h
end start
cseg ends
endРешение задачи: «Записать max элементы из двух массивов в третий»
textual
Листинг программы
; fasm code... org 100h jmp start a db 7,4,9,3 b db 4,8,2,6 c db 4 dup(0) start: mov cx,4 mov si,a mov di,c mov bx,b cycle: lodsb cmp al,byte[bx] jae next mov al,byte[bx] next: stosb inc bx loop cycle xor ax,ax int 16h int 20h
Объяснение кода листинга программы
В этом коде:
- Массивы a и b содержат четыре элемента.
- Массив c содержит четыре нулевых элемента, которые будут заменены на максимальные элементы из массивов a и b.
- Переменная start содержит адрес первого элемента массива c.
- Переменная cx содержит количество элементов, которые должны быть скопированы в массив c.
- Цикл while (cx != 0) читает элементы из массива b и сравнивает их с текущим элементом массива a. Если элемент из массива b больше, он записывается в массив c. Затем происходит инкремент индекса элемента в массиве b.
- После завершения цикла программа выводит на экран сообщения об ошибке.
- Затем программа завершается.