Вывод массива с определенным условием - Assembler

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

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

Есть массив, где две строчки и десять столбцов. Первая строка состоит из чисел, кратных пяти, а вторая, возводит их в квадрат, соответственно. т.е. 5 10 15 10 100 225 И так далее, до 50. Что в итоге получается снизу, первая строка заполняется по условиям, а вот со второй возникают проблемы. Или отдельно для нее писать циклы, или как-то нужно перепрыгивать со второй строчки наверх, а потом опять вниз, возводя в квадрат.. в этом возникла проблема.
Листинг программы
  1. .model small
  2. .stack 100h
  3. .386 ;Разрешение трансляции команд процессора 386
  4. .data
  5. mas db 100 dup (0) ;исходный массив
  6. .code
  7. start:
  8. mov ax, @data
  9. mov ds, ax
  10. mov ax, 0 ;обнуление ax
  11. mov cx, 20 ;значение счетчика цикла
  12. mov al, 1 ; счётчик для значений массива
  13. mov si, 0 ;индекс начального элемента в cx
  14. go: ;цикл инициализации
  15. mov mas[si], al ;запись в массив
  16. inc al ;увеличение значения следуещего элемента массива на 1
  17. inc si ;переход к следующему элементу
  18. loop go ;повторить цикл
  19. mov si, 0 ;переход к 1-му элементу
  20. mov cx, 1 ;ето строчки
  21. show1: ;цикл вывода элементов массива на экран
  22. push cx
  23. mov cx, 10 ;ето столбцы количество их
  24. show2:
  25. mov al, mas[si] ;значение элемента массива
  26. ;помещается в AL
  27. mov ah, 0 ;AH = 0
  28. imul ax,5
  29. call print ; вызов функции вывода числа в AX на экран
  30. inc si ;переход к следующему элементу
  31. loop show2
  32. pop cx
  33. mov dl, 0DDh ;переход на следующую строку
  34. call pr
  35. mov dl, 0DAh
  36. call pr
  37. show3:
  38. mov cx, 10
  39. mov si,4
  40. show4:
  41. mov al, mas[si] ;значение элемента массива
  42. ;помещается в AL
  43. mov ah, 0 ;AH = 0
  44. mul ax
  45. call print ; вызов функции вывода числа в AX на экран
  46. inc si ;переход к следующему элементу
  47. loop show4
  48. mov ax,4C00h ;завершение программы
  49. int 21h
  50. print proc
  51. ;процедура для вывода элеманта массива на экран
  52. pusha
  53. ;вывод пробелов перед каждым числом
  54. pusha
  55. mov bx, 0
  56. label0:
  57. inc bx
  58. mov dx, 0
  59. mov cx, 10
  60. div cx
  61. cmp ax, 1
  62. jnc label0
  63. neg bx
  64. add bx, 6
  65. mov cx, bx
  66. lab:
  67. mov dl, 0D0h
  68. call pr
  69. loop lab
  70. popa
  71. ;вывод символа на экран
  72. mov cx, 0
  73. label1:
  74. mov dx, 0
  75. mov bx, 10 ;Заносим основание системы счисления, равное 10, в регистр BX
  76. div bx ;деление AX на BX
  77. mov bx, 0
  78. push dx
  79. inc cx
  80. cmp ax, 0 ;сравнение AX с нулём
  81. jnz label1 ;если условие выполняется, то переход на метку label1
  82. label2:
  83. pop dx
  84. call pr ;вывод на экран символа
  85. inc bx
  86. loop label2 ;повторение с метки label2, пока значение CX не станет равно нулю
  87. popa
  88. ret
  89. print endp
  90. pr proc ;процедура, выводящая символ на экран
  91. mov ah, 02h
  92. add dl, 30h
  93. int 21h
  94. ret
  95. pr endp
  96. end start

Решение задачи: «Вывод массива с определенным условием»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .386 ;Разрешение трансляции команд процессора 386
  4. .data
  5.     mas dw 2*10 dup (0) ;исходный массив
  6. .code
  7.  
  8. start:
  9.     mov ax, @data
  10.     mov ds, ax
  11.  
  12.     mov ax, 0 ;обнуление ax
  13.     mov cx, 10 ;значение счетчика цикла
  14.  
  15.     mov ax, 5 ; счётчик для значений массива
  16.     mov si, 0 ;индекс начального элемента в cx
  17.  
  18.     mov bx, 2*10 ;смещение на следующую строку массива
  19.  
  20. go: ;цикл инициализации
  21.     mov mas[si], ax ;запись в массив
  22.     push ax
  23.     push dx
  24.     mul ax      ;возведение числа в квадрат
  25.     mov mas[si+bx], ax ;сохранение квадрата числа во второй строке матрицы
  26.     pop dx
  27.     pop ax
  28.     add ax, 5 ;увеличение значения следуещего элемента массива на 5
  29.     add si, 2 ;переход к следующему элементу
  30. loop go ;повторить цикл
  31.  
  32.     mov si, 0 ;переход к 1-му элементу
  33.     mov cx, 2 ;ето строчки
  34.  
  35. show1: ;цикл вывода элементов массива на экран
  36.     push cx
  37.     mov cx, 10 ;ето столбцы количество их
  38.  
  39. show2:
  40.     mov ax, mas[si]     ;значение элемента массива
  41.                         ;помещается в AX
  42.  
  43.     call print ; вызов функции вывода числа в AX на экран
  44.     add si, 2 ;переход к следующему элементу
  45. loop show2
  46.     pop cx
  47.  
  48.     mov dl, 0Dh-30h ;переход на следующую строку
  49.     call pr
  50.  
  51.     mov dl, 0Ah-30h
  52.     call pr
  53.  
  54. loop show1
  55.  
  56.     mov ax,4C00h ;завершение программы
  57.     int 21h
  58.  
  59. print proc
  60. ;процедура для вывода элеманта массива на экран
  61.     pusha
  62. ;вывод пробелов перед каждым числом
  63.     pusha
  64.     mov bx, 0
  65.  
  66. label0:
  67.     inc bx
  68.  
  69.     mov dx, 0
  70.     mov cx, 10
  71.     div cx
  72.     cmp ax, 1
  73.     jnc label0
  74.     neg bx
  75.     add bx, 6
  76.     mov cx, bx
  77.  
  78. lab:
  79.     mov dl, 0D0h
  80.     call pr
  81. loop lab
  82.     popa
  83. ;вывод символа на экран
  84. mov cx, 0
  85.  
  86. label1:
  87.     mov dx, 0
  88.     mov bx, 10 ;Заносим основание системы счисления, равное 10, в регистр BX
  89.  
  90.     div bx ;деление AX на BX
  91.     mov bx, 0
  92.  
  93.     push dx
  94.     inc cx
  95.  
  96.     cmp ax, 0 ;сравнение AX с нулём
  97.     jnz label1 ;если условие выполняется, то переход на метку label1
  98.  
  99. label2:
  100.     pop dx
  101.     call pr ;вывод на экран символа
  102.  
  103.     inc bx
  104.     loop label2 ;повторение с метки label2, пока значение CX не станет равно нулю
  105.  
  106.     popa
  107.     ret
  108. print endp
  109.  
  110. pr proc ;процедура, выводящая символ на экран
  111.     mov ah, 02h
  112.     add dl, 30h
  113.  
  114.     int 21h
  115.     ret
  116. pr endp
  117.  
  118. end start

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

В этом коде представлен калькулятор, который вычисляет квадраты чисел и выводит их на экран. Список действий, которые выполняет код:

  1. Инициализация сегмента данных и кода.
  2. Объявление и заполнение исходного массива.
  3. Цикл, в котором каждое число в массиве возводится в квадрат и записывается в следующую строку матрицы.
  4. Цикл вывода элементов матрицы на экран.
  5. Процедура вывода числа на экран.
  6. Процедура вывода символа на экран.
  7. Завершение программы.

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


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

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

8   голосов , оценка 4.125 из 5

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

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

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