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

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

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

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

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

textual
Листинг программы
.model tiny
 
.code
 
        org     100h
main    proc
 
        jmp     start
 
        ;Данные
        A               db      45, 47, 83, 17, 40, 12, 29, 53, 86, 77
 
        msgFirstElement db      'Index Of First Element: ', '$'
        msgLastElement  db      'Index Of Last Element: ', '$'
        CrLf            db      0Dh, 0Ah, '$'
 
start:
        ;программа
        mov     si,     0       ;индекс первого элемента, удовлетворяющего условиям
        mov     di,     0       ;индекс последнего элемента, удовлетворяющего условиям
 
        lea     bx,     A
        mov     cx,     10      ;цикл повторить 10 раз
        mov     dx,     1       ;текущее значение индекса
@@For:
        mov     al,     [bx]    ;считываем A[i]
        cmp     al,     A[0]    ;проверка условия A[1]<A[i]<A[10]
        jle     @@Next
        cmp     al,     A[9]
        jge     @@Next
 
        cmp     si,     0       ;проверка, что индекс первого числа уже найден
        jnz     @@IndexLastElement
        mov     si,     dx      ;сохраняем текущий индекс, как индекс первого
                                ;искомого элемента
        jmp     @@Next
@@IndexLastElement:
        mov     di,     dx      ;сохраняем текущий индекс, как индекс последнего
                                ;искомого элемента
@@Next:
        ;переход к следующему элементу массива
        inc     bx
        inc     dx
        loop    @@For
 
        ;вывод результатов на экран
        mov     ah,     09h
        lea     dx,     msgFirstElement
        int     21h
        mov     ax,     si
        call    OutInt
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
 
        mov     ah,     09h
        lea     dx,     msgLastElement
        int     21h
        mov     ax,     di
        call    OutInt
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
 
        int     20h
main    endp
 
; выводит число из регистра AX на экран
; входные данные:
; ax - число для отображения
OutInt proc
        push    ax
        push    dx
        aam
        add     ax,3030h
        mov     dl,ah
        mov     dh,al
        mov     ah,02
        int     21h
        mov     dl,dh
        int     21h
        pop     dx
        pop     ax
        ret
OutInt endp
 
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
Похожие ответы