Ввести массив, найти разницу между наибольшим и последним элементами массива - Assembler

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

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

Ввести массив, найти разницу между наибольшим и последним элементами массива. Может кто-нибудь помочь с вот такой программкой? Заранее спасибо!

Решение задачи: «Ввести массив, найти разницу между наибольшим и последним элементами массива»

textual
Листинг программы
.model small
.386
 
.data
arr db 10 dup (?)
msg db 'enter elements of array: ',0Ah,0Dh,'$'
max db ?
res db 'result: $'
 
.stack 
    db 255 (?)
    
.code
start:
    mov ax,@data
    mov ds,ax
    
    mov ah,09h
    lea dx,msg
    int 21h
    
    xor si,si
    mov cx,10
    input:
        mov ah,02h
        mov dl,0Dh
        int 21h
    
        mov ah,01h
        int 21h
        
        cmp al,'0'
        jb input
        
        cmp al,'9'
        ja input
        
        or al,30h
        mov arr[si],al
        inc si
        
        mov ah,02h
        mov dl,0Ah
        int 21h
    loop input
    
    xor si,si
    mov al,arr[si]
    
    mov cx,9
    search:
        cmp al,arr[si]
        jge next
        
        mov al,arr[si]
 
        next:
        inc si
    loop search
    
    cmp al,arr[9]
    jg one
    
    mov bl,arr[9]
    sub bl,al
    xchg al,bl
    
    jmp print
    
    one:
    sub al,arr[9]
    
    print:
    mov max,al
    
    mov ah,09h
    lea dx,res
    int 21h
    
    mov ah,02h
    mov dl,max
    or dl,30h
    int 21h
    
    mov ah,4Ch
    mov al,00h
    int 21h
end start

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

Код на языке Assembler выполняет следующие действия:

  1. Задает модель памяти как small и сегментный регистр ds равным сегменту данных.
  2. Объявляет переменные:
    • arr - массив на 10 элементов, где каждый элемент может содержать числовое значение от 0 до 9.
    • msg - строка, которая выводится на экран и содержит приглашение для ввода элементов массива.
    • max - переменная для хранения наибольшего элемента массива.
    • res - строка, которая выводится на экран и содержит результат вычисления разницы между наибольшим и последним элементами массива.
  3. Создает стек размером 255 байт.
  4. В блоке кода start:
    • Перемещает сегмент данных в регистр ds.
    • Выводит приглашение для ввода элементов массива.
    • Инициализирует счетчик si для обхода массива.
    • В цикле input считывает каждый элемент массива, проверяет его на допустимые значения от 0 до 9 и сохраняет в массиве arr.
    • После ввода всех элементов массива, в блоке search находит наибольший элемент и сохраняет его в переменной max.
    • Если наибольший элемент равен последнему элементу массива, то в блоке one вычисляется их разница.
    • В противном случае, разница вычисляется в блоке print и сохраняется в переменной max.
    • Выводит на экран результат вычисления разницы.
    • Завершает работу программы. Таким образом, данный код выполняет ввод массива, находит разницу между наибольшим и последним элементами и выводит результат на экран.

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

12   голосов , оценка 4.083 из 5
Похожие ответы