section .data
; Пример N-байтного числа (8 байт = 64 бита)
; Число: 123456789012345 (десятичное) = 0x7048860DDF79
big_number dq 44
; Делитель (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+INGH0LjRgdC70LAgKDgg0LHQsNC50YIgPSA2NCDQsdC40YLQsCkKICAgIDsg0KfQuNGB0LvQvjogMTIzNDU2Nzg5MDEyMzQ1ICjQtNC10YHRj9GC0LjRh9C90L7QtSkgPSAweDcwNDg4NjBEREY3OQogICAgYmlnX251bWJlciBkcSA0NAogICAgCiAgICA7INCU0LXQu9C40YLQtdC70YwgKDEg0LHQsNC50YIpCiAgICBkaXZpc29yIGRiIDIKICAgIAogICAgOyDQpNC+0YDQvNCw0YIg0LLRi9Cy0L7QtNCwCiAgICByZXN1bHRfbXNnIGRiICLQoNC10LfRg9C70YzRgtCw0YIg0LTQtdC70LXQvdC40Y86ICIsIDAKICAgIG5ld2xpbmUgZGIgMTAsIDAKCnNlY3Rpb24gLmJzcwogICAgcmVzdWx0IHJlc3EgMSAgICAgICAgICA7INCU0LvRjyDRhdGA0LDQvdC10L3QuNGPINGA0LXQt9GD0LvRjNGC0LDRgtCwICg2NC3QsdC40YIpCiAgICByZW1haW5kZXIgcmVzYiAxICAgICAgIDsg0JTQu9GPINGF0YDQsNC90LXQvdC40Y8g0L7RgdGC0LDRgtC60LAKICAgIAogICAgOyDQkdGD0YTQtdGAINC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPINGH0LjRgdC70LAg0LIg0YHRgtGA0L7QutGDCiAgICBidWZmZXIgcmVzYiAyMCAgICAgICAgIDsg0JTQvtGB0YLQsNGC0L7Rh9C90L4g0LTQu9GPIDY0LdCx0LjRgtC90L7Qs9C+INGH0LjRgdC70LAKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsgPT09PT09PT09PSDQlNCV0JvQldCd0JjQlSBOLdCR0JDQmdCi0J3QntCT0J4g0KfQmNCh0JvQkCA9PT09PT09PT09CiAgICA7INCU0LXQu9C40LwgNjQt0LHQuNGC0L3QvtC1INGH0LjRgdC70L4gKGJpZ19udW1iZXIpINC90LAgOC3QsdC40YLQvdGL0Lkg0LTQtdC70LjRgtC10LvRjAogICAgCiAgICA7INCX0LDQs9GA0YPQttCw0LXQvCA2NC3QsdC40YLQvdC+0LUg0YfQuNGB0LvQviDQsiBSRFg6UkFYINC00LvRjyDQtNC10LvQtdC90LjRjwogICAgeG9yIHJkeCwgcmR4ICAgICAgICAgICA7INCe0YfQuNGJ0LDQtdC8IFJEWCAo0YHRgtCw0YDRiNGD0Y4g0YfQsNGB0YLRjCkKICAgIG1vdiByYXgsIFtiaWdfbnVtYmVyXSAgOyDQl9Cw0LPRgNGD0LbQsNC10Lwg0YfQuNGB0LvQviDQsiBSQVgKICAgIAogICAgOyDQlNC10LvQuNGC0LXQu9GMINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQsiDRgNC10LPQuNGB0YLRgNC1INC40LvQuCDQv9Cw0LzRj9GC0LgKICAgIG1vdnp4IHJieCwgYnl0ZSBbZGl2aXNvcl0gOyDQl9Cw0LPRgNGD0LbQsNC10Lwg0LTQtdC70LjRgtC10LvRjCDRgSDQvdGD0LvQtdCy0YvQvCDRgNCw0YHRiNC40YDQtdC90LjQtdC8CiAgICAKICAgIDsg0JLRi9C/0L7Qu9C90Y/QtdC8INC00LXQu9C10L3QuNC1IFJEWDpSQVggLyBSQlgKICAgIGRpdiByYnggICAgICAgICAgICAgICAgOyBSQVggPSDRh9Cw0YHRgtC90L7QtSwgUkRYID0g0L7RgdGC0LDRgtC+0LoKICAgIAogICAgOyDQodC+0YXRgNCw0L3Rj9C10Lwg0YDQtdC30YPQu9GM0YLQsNGCCiAgICBtb3YgW3Jlc3VsdF0sIHJheCAgICAgIDsg0KHQvtGF0YDQsNC90Y/QtdC8INGH0LDRgdGC0L3QvtC1CiAgICBtb3YgW3JlbWFpbmRlcl0sIGRsICAgIDsg0KHQvtGF0YDQsNC90Y/QtdC8INC+0YHRgtCw0YLQvtC6ICjQvNC70LDQtNGI0LjQuSDQsdCw0LnRgiBSRFgpCiAgICAKICAgIDsgPT09PT09PT09PSDQktCr0JLQntCUINCh0J7QntCR0KnQldCd0JjQryA9PT09PT09PT09CiAgICBtb3YgcnNpLCByZXN1bHRfbXNnCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgCiAgICA7ID09PT09PT09PT0g0J/QoNCV0J7QkdCg0JDQl9Ce0JLQkNCd0JjQlSDQp9CY0KHQm9CQINCSINCh0KLQoNCe0JrQoyA9PT09PT09PT09CiAgICBtb3YgcmF4LCBbcmVzdWx0XSAgICAgIDsg0JfQsNCz0YDRg9C20LDQtdC8INGA0LXQt9GD0LvRjNGC0LDRgiDQtNC70Y8g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjRjwogICAgbW92IHJkaSwgYnVmZmVyICAgICAgICA7INCj0LrQsNC30YvQstCw0LXQvCDQvdCwINCx0YPRhNC10YAKICAgIGNhbGwgaW50X3RvX3N0cmluZyAgICAgOyDQn9GA0LXQvtCx0YDQsNC30YPQtdC8INGH0LjRgdC70L4g0LIg0YHRgtGA0L7QutGDCiAgICAKICAgIDsgPT09PT09PT09PSDQktCr0JLQntCUINCg0JXQl9Cj0JvQrNCi0JDQotCQID09PT09PT09PT0KICAgIG1vdiByc2ksIGJ1ZmZlciAgICAgICAgOyDQo9C60LDQt9Cw0YLQtdC70Ywg0L3QsCDRgdGC0YDQvtC60YMg0YEg0YDQtdC30YPQu9GM0YLQsNGC0L7QvAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgOyDQktGL0LLQvtC0INC/0LXRgNC10LLQvtC00LAg0YHRgtGA0L7QutC4CiAgICBtb3YgcnNpLCBuZXdsaW5lCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgCiAgICA7ID09PT09PT09PT0g0JLQq9Cl0J7QlCDQmNCXINCf0KDQntCT0KDQkNCc0JzQqyA9PT09PT09PT09CiAgICBtb3YgcmF4LCA2MCAgICAgICAgICAgIDsgc3lzX2V4aXQKICAgIHhvciByZGksIHJkaSAgICAgICAgICAgOyDQutC+0LQg0LLQvtC30LLRgNCw0YLQsCAwCiAgICBzeXNjYWxsCgo7ID09PT09PT09PT0g0J/QoNCe0KbQldCU0KPQoNCQINCf0KDQldCe0JHQoNCQ0JfQntCS0JDQndCY0K8g0KfQmNCh0JvQkCDQkiDQodCi0KDQntCa0KMgPT09PT09PT09PQo7INCS0YXQvtC0OiBSQVggLSDRh9C40YHQu9C+INC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPCjsgICAgICAgUkRJIC0g0YPQutCw0LfQsNGC0LXQu9GMINC90LAg0LHRg9GE0LXRgAo7INCS0YvRhdC+0LQ6IFJESSAtINGD0LrQsNC30LDRgtC10LvRjCDQvdCwINC60L7QvdC10YYg0YHRgtGA0L7QutC4CmludF90b19zdHJpbmc6CiAgICBwdXNoIHJieAogICAgcHVzaCByZHgKICAgIHB1c2ggcmRpCiAgICAKICAgIG1vdiByYngsIDEwICAgICAgICAgICA7INCe0YHQvdC+0LLQsNC90LjQtSDRgdC40YHRgtC10LzRiyDRgdGH0LjRgdC70LXQvdC40Y8gKNC00LXRgdGP0YLQuNGH0L3QsNGPKQogICAgbGVhIHJkaSwgW3JkaSArIDE5XSAgIDsg0J/QtdGA0LXRhdC+0LTQuNC8INCyINC60L7QvdC10YYg0LHRg9GE0LXRgNCwCiAgICBtb3YgYnl0ZSBbcmRpXSwgMCAgICAgOyDQndGD0LvRjC3RgtC10YDQvNC40L3QsNGC0L7RgCDRgdGC0YDQvtC60LgKICAgIGRlYyByZGkKICAgIAouY29udmVydF9sb29wOgogICAgeG9yIHJkeCwgcmR4ICAgICAgICAgIDsg0J7Rh9C40YnQsNC10LwgUkRYINC00LvRjyDQtNC10LvQtdC90LjRjwogICAgZGl2IHJieCAgICAgICAgICAgICAgIDsgUkRYID0g0L7RgdGC0LDRgtC+0LosIFJBWCA9INGH0LDRgdGC0L3QvtC1CiAgICAKICAgIGFkZCBkbCwgJzAnICAgICAgICAgICA7INCf0YDQtdC+0LHRgNCw0LfRg9C10Lwg0YbQuNGE0YDRgyDQsiDRgdC40LzQstC+0LsKICAgIG1vdiBbcmRpXSwgZGwgICAgICAgICA7INCh0L7RhdGA0LDQvdGP0LXQvCDRgdC40LzQstC+0LsKICAgIGRlYyByZGkgICAgICAgICAgICAgICA7INCf0LXRgNC10LzQtdGJ0LDQtdC80YHRjyDQvdCw0LfQsNC0INC/0L4g0LHRg9GE0LXRgNGDCiAgICAKICAgIHRlc3QgcmF4LCByYXggICAgICAgICA7INCf0YDQvtCy0LXRgNGP0LXQvCwg0LfQsNC60L7QvdGH0LjQu9C+0YHRjCDQu9C4INGH0LjRgdC70L4KICAgIGpueiAuY29udmVydF9sb29wICAgICA7INCV0YHQu9C4INC90LUg0L3QvtC70YwsINC/0YDQvtC00L7Qu9C20LDQtdC8CiAgICAKICAgIDsg0JrQvtGA0YDQtdC60YLQuNGA0YPQtdC8INGD0LrQsNC30LDRgtC10LvRjAogICAgaW5jIHJkaSAgICAgICAgICAgICAgIDsg0JLQvtC30LLRgNCw0YnQsNC10LzRgdGPINC6INC/0LXRgNCy0L7QvNGDINGB0LjQvNCy0L7Qu9GDCiAgICAKICAgIHBvcCByYXggICAgICAgICAgICAgICA7INCf0L7Qu9GD0YfQsNC10Lwg0L7RgNC40LPQuNC90LDQu9GM0L3Ri9C5IFJESQogICAgcHVzaCByZGkKICAgIAogICAgOyDQmtC+0L/QuNGA0YPQtdC8INGB0YLRgNC+0LrRgyDQsiDQv9GA0LDQstC40LvRjNC90YPRjiDQv9C+0LfQuNGG0LjRjgouY29weV9sb29wOgogICAgbW92IGRsLCBbcmRpXQogICAgbW92IFtyYXhdLCBkbAogICAgaW5jIHJkaQogICAgaW5jIHJheAogICAgdGVzdCBkbCwgZGwKICAgIGpueiAuY29weV9sb29wCiAgICAKICAgIHBvcCByZGkKICAgIHBvcCByZHgKICAgIHBvcCByYngKICAgIHJldAoKOyA9PT09PT09PT09INCf0KDQntCm0JXQlNCj0KDQkCDQktCr0JLQntCU0JAg0KHQotCg0J7QmtCYID09PT09PT09PT0KOyDQktGF0L7QtDogUlNJIC0g0YPQutCw0LfQsNGC0LXQu9GMINC90LAg0YHRgtGA0L7QutGDICjQt9Cw0LLQtdGA0YjQsNC10YLRgdGPINC90YPQu9C10LwpCnByaW50X3N0cmluZzoKICAgIHB1c2ggcmF4CiAgICBwdXNoIHJkaQogICAgcHVzaCByZHgKICAgIAogICAgOyDQktGL0YfQuNGB0LvRj9C10Lwg0LTQu9C40L3RgyDRgdGC0YDQvtC60LgKICAgIG1vdiByZGksIHJzaQogICAgeG9yIHJjeCwgcmN4CiAgICBub3QgcmN4CiAgICB4b3IgYWwsIGFsCiAgICBjbGQKICAgIHJlcG5lIHNjYXNiCiAgICBub3QgcmN4CiAgICBkZWMgcmN4CiAgICAKICAgIDsg0JLRi9Cy0L7QtCDRgdGC0YDQvtC60LgKICAgIG1vdiByYXgsIDEgICAgICAgICAgICA7IHN5c193cml0ZQogICAgbW92IHJkaSwgMSAgICAgICAgICAgIDsgc3Rkb3V0CiAgICBtb3YgcmR4LCByY3ggICAgICAgICAgOyDQtNC70LjQvdCwINGB0YLRgNC+0LrQuAogICAgc3lzY2FsbAogICAgCiAgICBwb3AgcmR4CiAgICBwb3AgcmRpCiAgICBwb3AgcmF4CiAgICByZXQ=