Обработка целочисленного массива. - 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
Объяснение кода листинга программы
- Организация программы:
- Код написан на ассемблере и помещен в файл с расширением .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
(точка входа в программу).
- Цель программы: Целью программы является обработка целочисленного массива и вывод на экран информации о первом и последнем элементах, удовлетворяющих определенному условию.
- Условие поиска:
Условие поиска представлено в блоке
@@For
. В каждой итерации цикла, проверяется условиеA[1]<A[i]<A[10]
. Это означает, что программа ищет элементы массива, которые большеA[1]
и меньшеA[10]
. - Вывод результатов на экран:
Результаты работы программы выводятся на экран с помощью функции
int 21h
. В частности, выводятся сообщения об индексе первого и последнего элементов, удовлетворяющих условию, и затем выводится символ перевода строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д