Files
NASM/stepik_base/min/min.asm
2025-09-23 17:48:53 +03:00

95 lines
1.6 KiB
NASM

global _start
section .data
arr db 5, 7, 3, 1, 2
arrEnd:
buff times 32 db 0
buffend:
count dq 0
section .text
default rel
_start:
mov al, 0xFF
lea rsi, [arr]
lea rdi, [arrEnd]
.while:
movzx rbx, byte [rsi] ; текущее число
cmp rbx, rax
cmovl rax, rbx
inc rsi
cmp rsi, rdi
jne .while
call print_num_to_buf
mov rdx, [count]
call write_text
mov rax, 60
mov rdi, 0
syscall
; Функция выводит buff
; In:
; - RSI - начало буфера
; - RDX - размер буфера
; Регистры не изменяет
write_text:
push rax
push rdi
push rsi
push rdx
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
syscall
mov [count], rax
pop rdx
pop rsi
pop rdi
pop rax
ret
; Функция выводит число в buff
; In: RAX
; Out: RSI - указатель на начало строки
print_num_to_buf:
lea rsi, [buffend]
dec rsi
mov rdi, rsi ; сохранить последний адрес
mov byte [rsi], 0 ; вписать нуль
dec rsi
mov byte [rsi], 0xA ; вписать перенос строки
dec rsi
mov byte [rsi], '0'
test rax, rax
jz .return
mov rcx, 10 ; десятичный делитель
.while:
xor rdx, rdx
test rax, rax
jz .break
div rcx
or dl, 0x30
mov [rsi], dl
dec rsi
jmp .while
.break:
inc rsi
.return:
sub rdi, rsi
inc rdi
mov [count], rdi
ret