Обработка целочисленного массива. - Assembler (223249)

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

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

Данный целочисленный массив А размера 10. Вывести номер первого и последнего из его элементов А [і], удовлетворяющих двойной неравенства: А [1] <A [і] <А [10]. Если таких элементов нет, то вывести 0. Написать программу на ассемблере.

Решение задачи: «Обработка целочисленного массива.»

textual
Листинг программы
  1. .model tiny
  2.  
  3. .code
  4.  
  5.         org     100h
  6. main    proc
  7.  
  8.         jmp     start
  9.  
  10.         ;Данные
  11.         A               db      45, 47, 83, 17, 40, 12, 29, 53, 86, 77
  12.  
  13.         msgFirstElement db      'Index Of First Element: ', '$'
  14.         msgLastElement  db      'Index Of Last Element: ', '$'
  15.         CrLf            db      0Dh, 0Ah, '$'
  16.  
  17. start:
  18.         ;программа
  19.         mov     si,     0       ;индекс первого элемента, удовлетворяющего условиям
  20.         mov     di,     0       ;индекс последнего элемента, удовлетворяющего условиям
  21.  
  22.         lea     bx,     A
  23.         mov     cx,     10      ;цикл повторить 10 раз
  24.         mov     dx,     1       ;текущее значение индекса
  25. @@For:
  26.         mov     al,     [bx]    ;считываем A[i]
  27.         cmp     al,     A[0]    ;проверка условия A[1]<A[i]<A[10]
  28.         jle     @@Next
  29.         cmp     al,     A[9]
  30.         jge     @@Next
  31.  
  32.         cmp     si,     0       ;проверка, что индекс первого числа уже найден
  33.         jnz     @@IndexLastElement
  34.         mov     si,     dx      ;сохраняем текущий индекс, как индекс первого
  35.                                 ;искомого элемента
  36.         jmp     @@Next
  37. @@IndexLastElement:
  38.         mov     di,     dx      ;сохраняем текущий индекс, как индекс последнего
  39.                                 ;искомого элемента
  40. @@Next:
  41.         ;переход к следующему элементу массива
  42.         inc     bx
  43.         inc     dx
  44.         loop    @@For
  45.  
  46.         ;вывод результатов на экран
  47.         mov     ah,     09h
  48.         lea     dx,     msgFirstElement
  49.         int     21h
  50.         mov     ax,     si
  51.         call    OutInt
  52.         mov     ah,     09h
  53.         lea     dx,     CrLf
  54.         int     21h
  55.  
  56.         mov     ah,     09h
  57.         lea     dx,     msgLastElement
  58.         int     21h
  59.         mov     ax,     di
  60.         call    OutInt
  61.         mov     ah,     09h
  62.         lea     dx,     CrLf
  63.         int     21h
  64.  
  65.         int     20h
  66. main    endp
  67.  
  68. ; выводит число из регистра AX на экран
  69. ; входные данные:
  70. ; ax - число для отображения
  71. OutInt proc
  72.         push    ax
  73.         push    dx
  74.         aam
  75.         add     ax,3030h
  76.         mov     dl,ah
  77.         mov     dh,al
  78.         mov     ah,02
  79.         int     21h
  80.         mov     dl,dh
  81.         int     21h
  82.         pop     dx
  83.         pop     ax
  84.         ret
  85. OutInt endp
  86.  
  87. end     main

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

  1. Организация программы:
    • Код написан на ассемблере и помещен в файл с расширением .asm.
    • Программа начинается с метки main.
    • В начале кода, в сегменте данных, определены переменные: A (целочисленный массив), msgFirstElement и msgLastElement (строки сообщений), CrLf (строка символов перевода строки).
    • Далее, определены две переменные: si (индекс первого элемента, удовлетворяющего условиям) и di (индекс последнего элемента, удовлетворяющего условиям).
    • Затем, в блоке start, происходит инициализация переменных si и di нулевыми значениями.
    • Следующий блок @@For содержит цикл, который повторяется 10 раз. В каждой итерации цикла, происходит чтение элемента массива A[i], проверка условия A[1]<A[i]<A[10], и при необходимости, обновление значений переменных si и di.
    • Если индекс первого числа уже найден (проверяется условие si != 0), то выполняется блок @@IndexLastElement, который сохраняет индекс последнего числа.
    • После цикла, выполняется блок @@Next, который переходит к следующему элементу массива.
    • В конце программы, определены две процедуры: OutInt (вывод числа на экран) и main (точка входа в программу).
  2. Цель программы: Целью программы является обработка целочисленного массива и вывод на экран информации о первом и последнем элементах, удовлетворяющих определенному условию.
  3. Условие поиска: Условие поиска представлено в блоке @@For. В каждой итерации цикла, проверяется условие A[1]<A[i]<A[10]. Это означает, что программа ищет элементы массива, которые больше A[1] и меньше A[10].
  4. Вывод результатов на экран: Результаты работы программы выводятся на экран с помощью функции int 21h. В частности, выводятся сообщения об индексе первого и последнего элементов, удовлетворяющих условию, и затем выводится символ перевода строки.

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


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

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

13   голосов , оценка 4 из 5

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

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

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