section .data
; Пример N-байтного числа (8 байт = 64 бита)
; Число: 123456789012345 (десятичное) = 0x7048860DDF79
big_number dq 22
; Делитель (1 байт)
divisor db 2
; Формат вывода
result_msg db "Результат деления: ", 0
newline db 10, 0
section .bss
result resq 1 ; Для хранения результата (64-бит)
remainder resb 1 ; Для хранения остатка
; Буфер для преобразования числа в строку
buffer resb 20 ; Достаточно для 64-битного числа
section .text
global _start
_start:
; ========== ДЕЛЕНИЕ N-БАЙТНОГО ЧИСЛА ==========
; Делим 64-битное число (big_number) на 8-битный делитель
; Загружаем 64-битное число в RDX:RAX для деления
xor rdx, rdx ; Очищаем RDX (старшую часть)
mov rax, [big_number] ; Загружаем число в RAX
; Делитель должен быть в регистре или памяти
movzx rbx, byte [divisor] ; Загружаем делитель с нулевым расширением
; Выполняем деление RDX:RAX / RBX
div rbx
; RAX
= частное
, RDX
= остаток
; Сохраняем результат
mov [result], rax ; Сохраняем частное
mov [remainder], dl ; Сохраняем остаток (младший байт RDX)
; ========== ВЫВОД СООБЩЕНИЯ ==========
mov rsi, result_msg
call print_string
; ========== ПРЕОБРАЗОВАНИЕ ЧИСЛА В СТРОКУ ==========
mov rax, [result] ; Загружаем результат для преобразования
mov rdi, buffer ; Указываем на буфер
call int_to_string ; Преобразуем число в строку
; ========== ВЫВОД РЕЗУЛЬТАТА ==========
mov rsi, buffer ; Указатель на строку с результатом
call print_string
; Вывод перевода строки
mov rsi, newline
call print_string
; ========== ВЫХОД ИЗ ПРОГРАММЫ ==========
mov rax, 60 ; sys_exit
xor rdi, rdi ; код возврата 0
syscall
; ========== ПРОЦЕДУРА ПРЕОБРАЗОВАНИЯ ЧИСЛА В СТРОКУ ==========
; Вход: RAX - число для преобразования
; RDI - указатель на буфер
; Выход: RDI - указатель на конец строки
int_to_string:
push rbx
push rdx
push rdi
mov rbx, 10 ; Основание системы счисления (десятичная)
lea rdi, [rdi + 19] ; Переходим в конец буфера
mov byte [rdi], 0 ; Нуль-терминатор строки
dec rdi
.convert_loop:
xor rdx, rdx ; Очищаем RDX для деления
div rbx
; RDX
= остаток
, RAX
= частное
add dl, '0' ; Преобразуем цифру в символ
mov [rdi], dl ; Сохраняем символ
dec rdi ; Перемещаемся назад по буферу
test rax, rax ; Проверяем, закончилось ли число
jnz .convert_loop ; Если не ноль, продолжаем
; Корректируем указатель
inc rdi ; Возвращаемся к первому символу
pop rax ; Получаем оригинальный RDI
push rdi
; Копируем строку в правильную позицию
.copy_loop:
mov dl, [rdi]
mov [rax], dl
inc rdi
inc rax
test dl, dl
jnz .copy_loop
pop rdi
pop rdx
pop rbx
ret
; ========== ПРОЦЕДУРА ВЫВОДА СТРОКИ ==========
; Вход: RSI - указатель на строку (завершается нулем)
print_string:
push rax
push rdi
push rdx
; Вычисляем длину строки
mov rdi, rsi
xor rcx, rcx
not rcx
xor al, al
cld
repne scasb
not rcx
dec rcx
; Вывод строки
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rdx, rcx ; длина строки
syscall
pop rdx
pop rdi
pop rax
ret
c2VjdGlvbiAuZGF0YQogICAgOyDQn9GA0LjQvNC10YAgTi3QsdCw0LnRgtC90L7Qs9C+INGH0LjRgdC70LAgKDgg0LHQsNC50YIgPSA2NCDQsdC40YLQsCkKICAgIDsg0KfQuNGB0LvQvjogMTIzNDU2Nzg5MDEyMzQ1ICjQtNC10YHRj9GC0LjRh9C90L7QtSkgPSAweDcwNDg4NjBEREY3OQogICAgYmlnX251bWJlciBkcSAyMgogICAgOyDQlNC10LvQuNGC0LXQu9GMICgxINCx0LDQudGCKQogICAgZGl2aXNvciBkYiAyCiAgICAKICAgIDsg0KTQvtGA0LzQsNGCINCy0YvQstC+0LTQsAogICAgcmVzdWx0X21zZyBkYiAi0KDQtdC30YPQu9GM0YLQsNGCINC00LXQu9C10L3QuNGPOiAiLCAwCiAgICBuZXdsaW5lIGRiIDEwLCAwCgpzZWN0aW9uIC5ic3MKICAgIHJlc3VsdCByZXNxIDEgICAgICAgICAgOyDQlNC70Y8g0YXRgNCw0L3QtdC90LjRjyDRgNC10LfRg9C70YzRgtCw0YLQsCAoNjQt0LHQuNGCKQogICAgcmVtYWluZGVyIHJlc2IgMSAgICAgICA7INCU0LvRjyDRhdGA0LDQvdC10L3QuNGPINC+0YHRgtCw0YLQutCwCiAgICAKICAgIDsg0JHRg9GE0LXRgCDQtNC70Y8g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjRjyDRh9C40YHQu9CwINCyINGB0YLRgNC+0LrRgwogICAgYnVmZmVyIHJlc2IgMjAgICAgICAgICA7INCU0L7RgdGC0LDRgtC+0YfQvdC+INC00LvRjyA2NC3QsdC40YLQvdC+0LPQviDRh9C40YHQu9CwCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgpfc3RhcnQ6CiAgICA7ID09PT09PT09PT0g0JTQldCb0JXQndCY0JUgTi3QkdCQ0JnQotCd0J7Qk9CeINCn0JjQodCb0JAgPT09PT09PT09PQogICAgOyDQlNC10LvQuNC8IDY0LdCx0LjRgtC90L7QtSDRh9C40YHQu9C+IChiaWdfbnVtYmVyKSDQvdCwIDgt0LHQuNGC0L3Ri9C5INC00LXQu9C40YLQtdC70YwKICAgIAogICAgOyDQl9Cw0LPRgNGD0LbQsNC10LwgNjQt0LHQuNGC0L3QvtC1INGH0LjRgdC70L4g0LIgUkRYOlJBWCDQtNC70Y8g0LTQtdC70LXQvdC40Y8KICAgIHhvciByZHgsIHJkeCAgICAgICAgICAgOyDQntGH0LjRidCw0LXQvCBSRFggKNGB0YLQsNGA0YjRg9GOINGH0LDRgdGC0YwpCiAgICBtb3YgcmF4LCBbYmlnX251bWJlcl0gIDsg0JfQsNCz0YDRg9C20LDQtdC8INGH0LjRgdC70L4g0LIgUkFYCiAgICAKICAgIDsg0JTQtdC70LjRgtC10LvRjCDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LIg0YDQtdCz0LjRgdGC0YDQtSDQuNC70Lgg0L/QsNC80Y/RgtC4CiAgICBtb3Z6eCByYngsIGJ5dGUgW2Rpdmlzb3JdIDsg0JfQsNCz0YDRg9C20LDQtdC8INC00LXQu9C40YLQtdC70Ywg0YEg0L3Rg9C70LXQstGL0Lwg0YDQsNGB0YjQuNGA0LXQvdC40LXQvAogICAgCiAgICA7INCS0YvQv9C+0LvQvdGP0LXQvCDQtNC10LvQtdC90LjQtSBSRFg6UkFYIC8gUkJYCiAgICBkaXYgcmJ4ICAgICAgICAgICAgICAgIDsgUkFYID0g0YfQsNGB0YLQvdC+0LUsIFJEWCA9INC+0YHRgtCw0YLQvtC6CiAgICAKICAgIDsg0KHQvtGF0YDQsNC90Y/QtdC8INGA0LXQt9GD0LvRjNGC0LDRggogICAgbW92IFtyZXN1bHRdLCByYXggICAgICA7INCh0L7RhdGA0LDQvdGP0LXQvCDRh9Cw0YHRgtC90L7QtQogICAgbW92IFtyZW1haW5kZXJdLCBkbCAgICA7INCh0L7RhdGA0LDQvdGP0LXQvCDQvtGB0YLQsNGC0L7QuiAo0LzQu9Cw0LTRiNC40Lkg0LHQsNC50YIgUkRYKQogICAgCiAgICA7ID09PT09PT09PT0g0JLQq9CS0J7QlCDQodCe0J7QkdCp0JXQndCY0K8gPT09PT09PT09PQogICAgbW92IHJzaSwgcmVzdWx0X21zZwogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgOyA9PT09PT09PT09INCf0KDQldCe0JHQoNCQ0JfQntCS0JDQndCY0JUg0KfQmNCh0JvQkCDQkiDQodCi0KDQntCa0KMgPT09PT09PT09PQogICAgbW92IHJheCwgW3Jlc3VsdF0gICAgICA7INCX0LDQs9GA0YPQttCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0LTQu9GPINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y8KICAgIG1vdiByZGksIGJ1ZmZlciAgICAgICAgOyDQo9C60LDQt9GL0LLQsNC10Lwg0L3QsCDQsdGD0YTQtdGACiAgICBjYWxsIGludF90b19zdHJpbmcgICAgIDsg0J/RgNC10L7QsdGA0LDQt9GD0LXQvCDRh9C40YHQu9C+INCyINGB0YLRgNC+0LrRgwogICAgCiAgICA7ID09PT09PT09PT0g0JLQq9CS0J7QlCDQoNCV0JfQo9Cb0KzQotCQ0KLQkCA9PT09PT09PT09CiAgICBtb3YgcnNpLCBidWZmZXIgICAgICAgIDsg0KPQutCw0LfQsNGC0LXQu9GMINC90LAg0YHRgtGA0L7QutGDINGBINGA0LXQt9GD0LvRjNGC0LDRgtC+0LwKICAgIGNhbGwgcHJpbnRfc3RyaW5nCiAgICAKICAgIDsg0JLRi9Cy0L7QtCDQv9C10YDQtdCy0L7QtNCwINGB0YLRgNC+0LrQuAogICAgbW92IHJzaSwgbmV3bGluZQogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgOyA9PT09PT09PT09INCS0KvQpdCe0JQg0JjQlyDQn9Cg0J7Qk9Cg0JDQnNCc0KsgPT09PT09PT09PQogICAgbW92IHJheCwgNjAgICAgICAgICAgICA7IHN5c19leGl0CiAgICB4b3IgcmRpLCByZGkgICAgICAgICAgIDsg0LrQvtC0INCy0L7Qt9Cy0YDQsNGC0LAgMAogICAgc3lzY2FsbAoKOyA9PT09PT09PT09INCf0KDQntCm0JXQlNCj0KDQkCDQn9Cg0JXQntCR0KDQkNCX0J7QktCQ0J3QmNCvINCn0JjQodCb0JAg0JIg0KHQotCg0J7QmtCjID09PT09PT09PT0KOyDQktGF0L7QtDogUkFYIC0g0YfQuNGB0LvQviDQtNC70Y8g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjRjwo7ICAgICAgIFJESSAtINGD0LrQsNC30LDRgtC10LvRjCDQvdCwINCx0YPRhNC10YAKOyDQktGL0YXQvtC0OiBSREkgLSDRg9C60LDQt9Cw0YLQtdC70Ywg0L3QsCDQutC+0L3QtdGGINGB0YLRgNC+0LrQuAppbnRfdG9fc3RyaW5nOgogICAgcHVzaCByYngKICAgIHB1c2ggcmR4CiAgICBwdXNoIHJkaQogICAgCiAgICBtb3YgcmJ4LCAxMCAgICAgICAgICAgOyDQntGB0L3QvtCy0LDQvdC40LUg0YHQuNGB0YLQtdC80Ysg0YHRh9C40YHQu9C10L3QuNGPICjQtNC10YHRj9GC0LjRh9C90LDRjykKICAgIGxlYSByZGksIFtyZGkgKyAxOV0gICA7INCf0LXRgNC10YXQvtC00LjQvCDQsiDQutC+0L3QtdGGINCx0YPRhNC10YDQsAogICAgbW92IGJ5dGUgW3JkaV0sIDAgICAgIDsg0J3Rg9C70Ywt0YLQtdGA0LzQuNC90LDRgtC+0YAg0YHRgtGA0L7QutC4CiAgICBkZWMgcmRpCiAgICAKLmNvbnZlcnRfbG9vcDoKICAgIHhvciByZHgsIHJkeCAgICAgICAgICA7INCe0YfQuNGJ0LDQtdC8IFJEWCDQtNC70Y8g0LTQtdC70LXQvdC40Y8KICAgIGRpdiByYnggICAgICAgICAgICAgICA7IFJEWCA9INC+0YHRgtCw0YLQvtC6LCBSQVggPSDRh9Cw0YHRgtC90L7QtQogICAgCiAgICBhZGQgZGwsICcwJyAgICAgICAgICAgOyDQn9GA0LXQvtCx0YDQsNC30YPQtdC8INGG0LjRhNGA0YMg0LIg0YHQuNC80LLQvtC7CiAgICBtb3YgW3JkaV0sIGRsICAgICAgICAgOyDQodC+0YXRgNCw0L3Rj9C10Lwg0YHQuNC80LLQvtC7CiAgICBkZWMgcmRpICAgICAgICAgICAgICAgOyDQn9C10YDQtdC80LXRidCw0LXQvNGB0Y8g0L3QsNC30LDQtCDQv9C+INCx0YPRhNC10YDRgwogICAgCiAgICB0ZXN0IHJheCwgcmF4ICAgICAgICAgOyDQn9GA0L7QstC10YDRj9C10LwsINC30LDQutC+0L3Rh9C40LvQvtGB0Ywg0LvQuCDRh9C40YHQu9C+CiAgICBqbnogLmNvbnZlcnRfbG9vcCAgICAgOyDQldGB0LvQuCDQvdC1INC90L7Qu9GMLCDQv9GA0L7QtNC+0LvQttCw0LXQvAogICAgCiAgICA7INCa0L7RgNGA0LXQutGC0LjRgNGD0LXQvCDRg9C60LDQt9Cw0YLQtdC70YwKICAgIGluYyByZGkgICAgICAgICAgICAgICA7INCS0L7Qt9Cy0YDQsNGJ0LDQtdC80YHRjyDQuiDQv9C10YDQstC+0LzRgyDRgdC40LzQstC+0LvRgwogICAgCiAgICBwb3AgcmF4ICAgICAgICAgICAgICAgOyDQn9C+0LvRg9GH0LDQtdC8INC+0YDQuNCz0LjQvdCw0LvRjNC90YvQuSBSREkKICAgIHB1c2ggcmRpCiAgICAKICAgIDsg0JrQvtC/0LjRgNGD0LXQvCDRgdGC0YDQvtC60YMg0LIg0L/RgNCw0LLQuNC70YzQvdGD0Y4g0L/QvtC30LjRhtC40Y4KLmNvcHlfbG9vcDoKICAgIG1vdiBkbCwgW3JkaV0KICAgIG1vdiBbcmF4XSwgZGwKICAgIGluYyByZGkKICAgIGluYyByYXgKICAgIHRlc3QgZGwsIGRsCiAgICBqbnogLmNvcHlfbG9vcAogICAgCiAgICBwb3AgcmRpCiAgICBwb3AgcmR4CiAgICBwb3AgcmJ4CiAgICByZXQKCjsgPT09PT09PT09PSDQn9Cg0J7QptCV0JTQo9Cg0JAg0JLQq9CS0J7QlNCQINCh0KLQoNCe0JrQmCA9PT09PT09PT09Cjsg0JLRhdC+0LQ6IFJTSSAtINGD0LrQsNC30LDRgtC10LvRjCDQvdCwINGB0YLRgNC+0LrRgyAo0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDQvdGD0LvQtdC8KQpwcmludF9zdHJpbmc6CiAgICBwdXNoIHJheAogICAgcHVzaCByZGkKICAgIHB1c2ggcmR4CiAgICAKICAgIDsg0JLRi9GH0LjRgdC70Y/QtdC8INC00LvQuNC90YMg0YHRgtGA0L7QutC4CiAgICBtb3YgcmRpLCByc2kKICAgIHhvciByY3gsIHJjeAogICAgbm90IHJjeAogICAgeG9yIGFsLCBhbAogICAgY2xkCiAgICByZXBuZSBzY2FzYgogICAgbm90IHJjeAogICAgZGVjIHJjeAogICAgCiAgICA7INCS0YvQstC+0LQg0YHRgtGA0L7QutC4CiAgICBtb3YgcmF4LCAxICAgICAgICAgICAgOyBzeXNfd3JpdGUKICAgIG1vdiByZGksIDEgICAgICAgICAgICA7IHN0ZG91dAogICAgbW92IHJkeCwgcmN4ICAgICAgICAgIDsg0LTQu9C40L3QsCDRgdGC0YDQvtC60LgKICAgIHN5c2NhbGwKICAgIAogICAgcG9wIHJkeAogICAgcG9wIHJkaQogICAgcG9wIHJheAogICAgcmV0