Найти все элементы массива, которые больше левого соседа как минимум в два раза - Assembler

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

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

На языке Ассемблера 1) Дан массив целых чисел. Найти все элементы, которые больше левого соседа как минимум в два раза. 2) Дан массив целых чисел. Найти номер элемента, сумма цифр которого максимальна. Буду признателен!

Решение задачи: «Найти все элементы массива, которые больше левого соседа как минимум в два раза»

textual
Листинг программы
  1. .model small
  2. .386
  3.  
  4. .data
  5. arr db 11,35,70,9,87,9,46,98,3,15
  6. len dw $-arr
  7.  
  8. .stack
  9. db 255 dup(?)
  10.  
  11. .code
  12. start:
  13. mov ax,@data
  14. mov ds,ax
  15.  
  16. mov si,1
  17. xor di,di
  18. mov cx,len
  19. dec cx
  20. check:
  21. mov al,byte ptr [arr+si]
  22. cbw
  23. mov bl,byte ptr [arr+di]
  24. div bl
  25.  
  26. cmp al,2
  27. jl skip
  28.  
  29. push ax
  30. push bx
  31. push cx
  32. push dx
  33.  
  34. mov bx,10
  35. mov al,byte ptr [arr+si]
  36. cbw
  37. xor cx,cx
  38. del:
  39. xor dx,dx
  40. div bx
  41. push dx
  42. inc cx
  43. or ax,ax
  44. jnz del
  45.  
  46. digit:
  47. mov ah,02h
  48. pop dx
  49. add dx,30h
  50. int 21h
  51. loop digit
  52.  
  53. mov ah,02h
  54. mov dl,' '
  55. int 21h
  56.  
  57. pop dx
  58. pop cx
  59. pop bx
  60. pop ax
  61.  
  62. skip:
  63. inc si
  64. inc di
  65. loop check
  66.  
  67. mov ah,4Ch
  68. mov al,00h
  69. int 21h
  70. end start

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

В этом коде выполняется следующая последовательность действий:

  1. Задаётся начальное значение регистра SI равным 1, а регистр DI равен 0.
  2. Устанавливается начальное значение регистра CX равным длине массива (len) минус 1.
  3. Затем выполняется цикл проверки, в котором происходит сравнение текущего элемента массива (arr[si]) с последующим элементом (arr[di]). Если первый элемент больше второго как минимум в два раза, то выполняется следующий блок кода.
  4. В этом блоке кода сначала происходит вывод на экран текущего элемента массива, затем выполняется цикл digit, который выводит на экран цифры этого элемента.
  5. После завершения цикла digit, происходит вывод на экран пробела, затем значение регистра DL сбрасывается обратно в ' ', а затем происходит переход к следующему элементу массива.
  6. Если текущий элемент массива не больше последующего, то происходит переход к следующему блоку кода.
  7. В этом блоке кода происходит вывод на экран текущего элемента массива, затем происходит переход к следующей итерации цикла проверки.
  8. После завершения цикла проверки, происходит завершение работы программы.

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


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

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

10   голосов , оценка 4.1 из 5

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

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

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