Обработка целочисленного массива. - 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
. В частности, выводятся сообщения об индексе первого и последнего элементов, удовлетворяющих условию, и затем выводится символ перевода строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д