Top.Mail.Ru
Ответы

Помогите пожалуйста на писать код в Assembler

Вычислить максимум и минимум массива. Найти разницу между ними.

По дате
По рейтингу
Аватар пользователя
Мыслитель
5мес

Выделил, нашел. Че дальше делать?

Аватар пользователя
Просветленный
5мес

Кода на ассемблере для вычисления максимума и минимума в массиве. И нахождения разницы между ними. Массив содержит 32-битные целые числа.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
 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.