section .data
array db 64, 25, 12, 22, 11 ; Пример массива для сортировки
array_size equ $ - array ; Размер массива
section .text
global _start
_start:
; Ваш код начинается здесь
mov ecx, array_size ; Загрузка размера массива в ecx
outer_loop:
mov esi, 0 ; Индекс текущего минимального элемента
mov ebx, esi ; Индекс для внутреннего цикла
inner_loop:
cmp ebx, ecx ; Проверка окончания внутреннего цикла
je inner_loop_done ; Если равно, завершаем внутренний цикл
mov eax, ebx ; Загружаем индекс в eax
add eax, array ; Вычисляем адрес текущего элемента массива
mov edx, [eax] ; Загружаем значение текущего элемента в edx
mov eax, esi ; Загружаем индекс минимального элемента в eax
add eax, array ; Вычисляем адрес минимального элемента массива
mov edi, [eax] ; Загружаем значение минимального элемента в edi
cmp edx, edi ; Сравниваем текущий элемент с минимальным
jge not_less ; Если текущий элемент >= минимального, переходим к not_less
; Если текущий элемент < минимального, обновляем индекс минимального элемента
mov esi, ebx
not_less:
inc ebx ; Увеличиваем индекс внутреннего цикла
jmp inner_loop ; Переходим к следующей итерации внутреннего цикла
inner_loop_done:
; Обмен местами элементов в массиве
mov eax, esi ; Загружаем индекс минимального элемента в eax
add eax, array ; Вычисляем адрес минимального элемента массива
mov ecx, [eax] ; Загружаем значение минимального элемента в ecx
mov eax, 0 ; Загружаем индекс первого элемента в массиве
add eax, array ; Вычисляем адрес первого элемента массива
mov edx, [eax] ; Загружаем значение первого элемента в edx
; Меняем местами элементы
mov eax, 0 ; Загружаем индекс первого элемента в массиве
add eax, array ; Вычисляем адрес первого элемента массива
mov [eax], ecx ; Записываем значение минимального элемента в первый элемент
mov eax, esi ; Загружаем индекс минимального элемента в eax
add eax, array ; Вычисляем адрес минимального элемента массива
mov [eax], edx ; Записываем значение первого элемента в место минимального
; Уменьшаем размер неотсортированной части массива
dec ecx
cmp ecx, 1 ; Проверка окончания внешнего цикла
jg outer_loop
; Ваш код заканчивается здесь
; Ваш код для вывода отсортированного массива в консоль
mov ecx, array_size ; Загружаем размер массива в ecx
mov ebx, 0 ; Индекс для прохода по массиву
print_loop:
cmp ebx, ecx ; Проверка окончания цикла вывода
je end_program ; Если равно, завершаем программу
mov eax, ebx ; Загружаем индекс в eax
add eax, array ; Вычисляем адрес текущего элемента массива
mov edx, [eax] ; Загружаем значение текущего элемента в edx
; Ваш код для вывода значения в консоль
; Например, можно использовать системный вызов для вывода символа в консоль
inc ebx ; Увеличиваем индекс массива
jmp print_loop ; Переходим к следующей итерации цикла вывода
end_program:
; Завершаем программу
mov eax, 1 ; Системный вызов для выхода
xor ebx, ebx ; Код возврата 0
int 0x80 ; Вызываем прерывание