Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- start:
- ; Инициализация массива
- array db 5, 12, 7, 3, 14, 8, 1, 0
- mov si, array ; Установить указатель на начало массива
- ; Инициализация переменных для хранения индексов и значений макс. и мин. элементов
- mov bl, [si] ; BL = первый элемент массива
- mov bh, [si] ; BH = первый элемент массива
- mov di, si ; DI = указатель на макс. элемент
- mov bx, si ; BX = указатель на мин. элемент (используем BX как адресный регистр)
- find_max_min:
- inc si ; Переход к следующему элементу массива
- mov al, [si] ; Загрузка элемента массива в AL
- test al, al ; Проверка на конец массива
- jz print_done ; Если конец массива, завершаем программу
- ; Проверка на максимальный элемент
- cmp al, bl
- jle .check_min
- mov bl, al
- mov di, si
- .check_min:
- ; Проверка на минимальный элемент
- cmp al, bh
- jge find_max_min
- mov bh, al
- mov bx, si
- jmp find_max_min
- print_done:
- call print_array ; Выводим массив
- call print_done_message ; Выводим сообщение "Done"
- jmp exit_program ; Завершаем программу
- print_array:
- mov si, array
- print_loop:
- mov al, [si]
- test al, al ; Проверка на конец массива
- jz done_printing ; Если конец массива, завершаем вывод
- call hex2asc ; Преобразование числа в ASCII
- mov ah, 02h ; Функция вывода символа на экран
- int 21h ; Вызов DOS прерывания
- mov al, ' ' ; Вывод пробела
- int 21h ; Вызов DOS прерывания
- inc si ; Переход к следующему элементу
- jmp print_loop
- done_printing:
- ret
- print_done_message:
- mov ah, 09h ; Функция вывода строки
- lea dx, [done_msg] ; Загрузка адреса сообщения
- int 21h ; Вызов DOS прерывания
- ret
- exit_program:
- mov ax, 4C00h ; Завершение программы
- int 21h ; Вызов DOS прерывания
- hex2asc:
- pusha ; Сохраняем значения регистров
- xor cx, cx ; Обнуляем счетчик cx
- mov ax, bx ; Перемещаем значение из bx в ax
- mov bx, 10 ; Перемещаем основание 10 в bx
- next_digit:
- xor dx, dx ; Очищаем dx перед делением
- div bx ; Делим ax на 10, результат в al, остаток в dx
- add dl, '0' ; Преобразуем остаток в ASCII
- push dx ; Сохраняем ASCII символ в стеке
- inc cx ; Увеличиваем счетчик цифр
- test ax, ax ; Проверяем, было ли деление полным
- jnz next_digit ; Если нет, продолжаем
- print_digits:
- pop dx ; Восстанавливаем ASCII символ из стека
- mov ah, 02h ; Функция вывода символа на экран
- int 21h ; Вызов DOS прерывания
- loop print_digits ; Повторяем для всех цифр
- popa ; Восстанавливаем значения регистров
- ret
- done_msg db 'Done', 0 ; Убран символ '$'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement