Записать 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

Объяснение кода листинга программы

В этом коде:

  1. Массивы a и b содержат четыре элемента.
  2. Массив c содержит четыре нулевых элемента, которые будут заменены на максимальные элементы из массивов a и b.
  3. Переменная start содержит адрес первого элемента массива c.
  4. Переменная cx содержит количество элементов, которые должны быть скопированы в массив c.
  5. Цикл while (cx != 0) читает элементы из массива b и сравнивает их с текущим элементом массива a. Если элемент из массива b больше, он записывается в массив c. Затем происходит инкремент индекса элемента в массиве b.
  6. После завершения цикла программа выводит на экран сообщения об ошибке.
  7. Затем программа завершается.

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы