Заполнить массив 3 элементами из массивов 1 и 2 по возрастанию - Assembler

Узнай цену своей работы

Формулировка задачи:

Программа заполняет массив 3, элементами из массива 1 и 2 по возрастанию, но где-то ошибка не могу найти, либо регистры не те для массива 3, либо 1 не те.
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. A db 0,3,4,6,7
  5. B db 1,2,5,8,10
  6. C db 10 dup (0)
  7. len equ 5
  8. .code
  9. start:
  10. mov ax, @data
  11. mov ds, ax
  12. xor si, si
  13. xor di, di
  14. xor bp, bp
  15. mov cx, len
  16. mov si, 0
  17. mov bp, 0
  18. minA:
  19. mov al, A[si]
  20. cmp ah, al
  21. jle min
  22. jmp pov
  23.  
  24. minB:
  25. mov ah, B[di]
  26. cmp bp, ax
  27. jle min
  28. jmp pov
  29.  
  30. min:
  31. cmp si, di
  32. jle minC
  33. minC:
  34. mov bp, si
  35. mov bp, di
  36. jmp pov
  37. pov:
  38. inc si
  39. inc di
  40. mov ax,4c00h
  41. int 21h
  42. end start

Решение задачи: «Заполнить массив 3 элементами из массивов 1 и 2 по возрастанию»

textual
Листинг программы
  1. .model  small
  2. .stack org 100h
  3. .data
  4. massA db  0,3,4,6,7
  5. sizeA equ $-dbA
  6. massB db  1,2,5,8,10
  7. sizeB equ $-dbB
  8. massC db  (sizeA+sizeB)dup (0)
  9. .code
  10. begin:
  11.      mov ax,@data
  12.      mov ds,ax
  13.            lea si,massA
  14.            lea di,massB
  15.            lea bx,massC
  16.            mov dx,sizeA
  17.            mov cx,sizeB
  18. l1:  
  19.     mov al,[si]
  20.     mov ah,[di]
  21.     cmp al,ah
  22.     jle l2
  23.     xchg    dx,cx
  24.     xchg    si,di
  25.     xchg    ah,al
  26. l2:   mov [bx],al
  27.         inc bx
  28.         inc si
  29.         loop    l1
  30.         mov cx,dx
  31.         mov si,di
  32. l3:  
  33.               mov al,[si]        
  34.               mov [bx],al
  35.               inc bx
  36.               inc si
  37.               loop    l3
  38.    
  39.    mov ax,4C00h
  40.         int 21h
  41.        
  42.         end begin

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

  1. Объявление переменной massA и инициализация массива значений: massA db 0,3,4,6,7
  2. Объявление переменной sizeA как размер массива massA: sizeA equ $-dbA
  3. Объявление переменной massB и инициализация массива значений: massB db 1,2,5,8,10
  4. Объявление переменной sizeB как размер массива massB: sizeB equ $-dbB
  5. Объявление переменной massC как массив суммарного размера sizeA+sizeB и инициализация его нулями: massC db (sizeA+sizeB)dup (0)
  6. Начало сегмента кода: .code
  7. Перемещение указателя данных в регистр ds: mov ax,@data и mov ds,ax
  8. Инициализация указателей на массивы: lea si, massA, lea di, massB, lea bx, massC
  9. Загрузка размерности массивов massA и massB в регистры: mov dx, sizeA, mov cx, sizeB
  10. Начало цикла l1
  11. Загрузка значений из массивов massA и massB в регистры al и ah
  12. Сравнение значений из массивов
  13. Переход к метке l2 если значение из massA больше значения из massB, иначе продолжение выполнения цикла
  14. Обмен значений и указателей, если значение из massB больше значения из massA
  15. Помещение значения из massA в массив massC и увеличение указателей и счетчика цикла
  16. Проверка окончания цикла l1 и переход к метке l3, если цикл ещё не завершен
  17. Переназначение размерности массива massB и указателя si для продолжения заполнения массива massC
  18. Помещение значений из massB в массив massC и увеличение указателей и счетчика цикла
  19. Проверка окончания цикла l3 и завершение сегмента кода: mov ax,4C00h и int 21h

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы