Кода на ассемблере для вычисления максимума и минимума в массиве. И нахождения разницы между ними. Массив содержит 32-битные целые числа.
section .data
array db 10, 20, 5, 30, 15 ; Массив данных
array_size db 5 ; Размер массива
max_value db 0 ; Переменная для максимума
min_value db 255 ; Переменная для минимума
difference db 0 ; Переменная для разницы
section .text
global _start
_start:
; Инициализация указателей
mov ecx, [array_size] ; Загружаем размер массива в ecx
mov esi, array ; Указатель на начало массива
mov al, [esi] ; Загружаем первый элемент в al
mov [max_value], al ; Устанавливаем максимум
mov [min_value], al ; Устанавливаем минимум
; Цикл по элементам массива
next_element:
inc esi ; Переход к следующему элементу
dec ecx ; Уменьшаем счетчик
jz calculate_difference ; Если счетчик равен 0, переходим к вычислению разницы
mov al, [esi] ; Загружаем текущий элемент в al
; Проверка на максимум
cmp al, [max_value]
jg update_max ; Если текущий элемент больше максимума, обновляем максимум
; Проверка на минимум
cmp al, [min_value]
jl update_min ; Если текущий элемент меньше минимума, обновляем минимум
jmp next_element ; Переход к следующему элементу
update_max:
mov [max_value], al ; Обновляем максимум
jmp next_element
update_min:
mov [min_value], al ; Обновляем минимум
jmp next_element
calculate_difference:
mov al, [max_value] ; Загружаем максимум в al
sub al, [min_value] ; Вычисляем разницу
mov [difference], al ; Сохраняем разницу
; Завершение программы
mov eax, 1 ; Системный вызов для выхода
xor ebx, ebx ; Код возврата 0
int 0x80 ; Вызов ядра
Код написан для 32-битной архитектуры Linux.