section .data
; Данные для примера: два 4-байтовых числа (dword)
num1 dd -22 ; Первое число со знаком (размер: 4 байта)
num2 dd 1 ; Второе число со знаком (размер: 4 байта)
result dq 0 ; Здесь будет результат (8 байт, чтобы вместить произведение)
; Строки для вывода
msg db "Результат умножения: ", 0
newline db 10 ; Символ новой строки (ASCII 10 = '\n')
buffer times 20 db 0 ; Буфер для преобразования числа в строку
buf_end equ $ ; Конец буфера
section .bss
; (Не используется в этом примере)
section .text
global _start
_start:
; 1. Умножение двух 4-байтовых чисел со знаком
mov eax, [num1] ; Загружаем первое число в eax
imul dword [num2] ; Умножаем eax на второе число (знаковое умножение)
; Результат (64-битный) теперь в edx:eax (старшая и младшая части)
; Сохраняем результат в переменную result (как 64-битное число)
mov [result], rax ; Сохраняем младшую часть (в x86_64 rax = eax с нулевым расширением)
; 2. Выводим сообщение "Результат умножения: "
mov rax, 1 ; Системный вызов sys_write
mov rdi, 1 ; Файловый дескриптор stdout
mov rsi, msg ; Адрес строки
mov rdx, 20 ; Длина строки (подсчитайте точную длину вашей строки)
syscall
; 3. Преобразуем результат (64-битное число в rax) в строку ASCII
mov rax, [result] ; Загружаем результат в rax
mov rdi, buffer ; Указываем на конец буфера (преобразуем с конца)
add rdi, 19 ; Перемещаемся к последнему байту буфера
mov byte [rdi], 0 ; Записываем нулевой терминатор для строки
mov rbx, 10 ; Делитель для преобразования в десятичную строку
; Проверяем знак числа
test rax, rax
jns .convert_loop ; Если число положительное, переходим к преобразованию
neg rax ; Если отрицательное, делаем его положительным для обработки
.convert_loop:
xor rdx, rdx ; Обнуляем rdx перед делением
div rbx
; Делим rax на
10, остаток в rdx
add dl, '0' ; Преобразуем цифру в символ ASCII
dec rdi ; Двигаемся назад в буфере
mov [rdi], dl ; Сохраняем символ
test rax, rax
jnz .convert_loop ; Продолжаем, пока rax != 0
; Если исходное число было отрицательным, добавляем знак минус
mov rax, [result]
test rax, rax
jns .print
dec rdi
mov byte [rdi], '-'
.print:
; 4. Выводим преобразованное число (строка начинается с rdi)
mov rsi, rdi ; Адрес начала строки
mov rdx, buf_end ; Вычисляем длину строки: конец буфера - текущая позиция
sub rdx, rdi
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
syscall
; 5. Выводим символ новой строки
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; 6. Завершаем программу
mov rax, 60 ; Системный вызов sys_exit
xor rdi, rdi ; Код возврата 0
syscall
c2VjdGlvbiAuZGF0YQogICAgOyDQlNCw0L3QvdGL0LUg0LTQu9GPINC/0YDQuNC80LXRgNCwOiDQtNCy0LAgNC3QsdCw0LnRgtC+0LLRi9GFINGH0LjRgdC70LAgKGR3b3JkKQogICAgbnVtMSAgICBkZCAtMjIgICAgICA7INCf0LXRgNCy0L7QtSDRh9C40YHQu9C+INGB0L4g0LfQvdCw0LrQvtC8ICjRgNCw0LfQvNC10YA6IDQg0LHQsNC50YLQsCkKICAgIG51bTIgICAgZGQgMSAgICAgICAgOyDQktGC0L7RgNC+0LUg0YfQuNGB0LvQviDRgdC+INC30L3QsNC60L7QvCAo0YDQsNC30LzQtdGAOiA0INCx0LDQudGC0LApCiAgICByZXN1bHQgIGRxIDAgICAgICAgICAgIDsg0JfQtNC10YHRjCDQsdGD0LTQtdGCINGA0LXQt9GD0LvRjNGC0LDRgiAoOCDQsdCw0LnRgiwg0YfRgtC+0LHRiyDQstC80LXRgdGC0LjRgtGMINC/0YDQvtC40LfQstC10LTQtdC90LjQtSkKICAgIAogICAgOyDQodGC0YDQvtC60Lgg0LTQu9GPINCy0YvQstC+0LTQsAogICAgbXNnICAgICBkYiAi0KDQtdC30YPQu9GM0YLQsNGCINGD0LzQvdC+0LbQtdC90LjRjzogIiwgMAogICAgbmV3bGluZSBkYiAxMCAgICAgICAgICA7INCh0LjQvNCy0L7QuyDQvdC+0LLQvtC5INGB0YLRgNC+0LrQuCAoQVNDSUkgMTAgPSAnXG4nKQogICAgYnVmZmVyICB0aW1lcyAyMCBkYiAwICA7INCR0YPRhNC10YAg0LTQu9GPINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y8g0YfQuNGB0LvQsCDQsiDRgdGC0YDQvtC60YMKICAgIGJ1Zl9lbmQgZXF1ICQgICAgICAgICAgOyDQmtC+0L3QtdGGINCx0YPRhNC10YDQsAoKc2VjdGlvbiAuYnNzCiAgICA7ICjQndC1INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQsiDRjdGC0L7QvCDQv9GA0LjQvNC10YDQtSkKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsgMS4g0KPQvNC90L7QttC10L3QuNC1INC00LLRg9GFIDQt0LHQsNC50YLQvtCy0YvRhSDRh9C40YHQtdC7INGB0L4g0LfQvdCw0LrQvtC8CiAgICBtb3YgICBlYXgsIFtudW0xXSAgICAgIDsg0JfQsNCz0YDRg9C20LDQtdC8INC/0LXRgNCy0L7QtSDRh9C40YHQu9C+INCyIGVheAogICAgaW11bCAgZHdvcmQgW251bTJdICAgICA7INCj0LzQvdC+0LbQsNC10LwgZWF4INC90LAg0LLRgtC+0YDQvtC1INGH0LjRgdC70L4gKNC30L3QsNC60L7QstC+0LUg0YPQvNC90L7QttC10L3QuNC1KQogICAgOyDQoNC10LfRg9C70YzRgtCw0YIgKDY0LdCx0LjRgtC90YvQuSkg0YLQtdC/0LXRgNGMINCyIGVkeDplYXggKNGB0YLQsNGA0YjQsNGPINC4INC80LvQsNC00YjQsNGPINGH0LDRgdGC0LgpCiAgICAKICAgIDsg0KHQvtGF0YDQsNC90Y/QtdC8INGA0LXQt9GD0LvRjNGC0LDRgiDQsiDQv9C10YDQtdC80LXQvdC90YPRjiByZXN1bHQgKNC60LDQuiA2NC3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvikKICAgIG1vdiAgIFtyZXN1bHRdLCByYXggICAgOyDQodC+0YXRgNCw0L3Rj9C10Lwg0LzQu9Cw0LTRiNGD0Y4g0YfQsNGB0YLRjCAo0LIgeDg2XzY0IHJheCA9IGVheCDRgSDQvdGD0LvQtdCy0YvQvCDRgNCw0YHRiNC40YDQtdC90LjQtdC8KQoKICAgIDsgMi4g0JLRi9Cy0L7QtNC40Lwg0YHQvtC+0LHRidC10L3QuNC1ICLQoNC10LfRg9C70YzRgtCw0YIg0YPQvNC90L7QttC10L3QuNGPOiAiCiAgICBtb3YgICByYXgsIDEgICAgICAgICAgIDsg0KHQuNGB0YLQtdC80L3Ri9C5INCy0YvQt9C+0LIgc3lzX3dyaXRlCiAgICBtb3YgICByZGksIDEgICAgICAgICAgIDsg0KTQsNC50LvQvtCy0YvQuSDQtNC10YHQutGA0LjQv9GC0L7RgCBzdGRvdXQKICAgIG1vdiAgIHJzaSwgbXNnICAgICAgICAgOyDQkNC00YDQtdGBINGB0YLRgNC+0LrQuAogICAgbW92ICAgcmR4LCAyMCAgICAgICAgICA7INCU0LvQuNC90LAg0YHRgtGA0L7QutC4ICjQv9C+0LTRgdGH0LjRgtCw0LnRgtC1INGC0L7Rh9C90YPRjiDQtNC70LjQvdGDINCy0LDRiNC10Lkg0YHRgtGA0L7QutC4KQogICAgc3lzY2FsbAoKICAgIDsgMy4g0J/RgNC10L7QsdGA0LDQt9GD0LXQvCDRgNC10LfRg9C70YzRgtCw0YIgKDY0LdCx0LjRgtC90L7QtSDRh9C40YHQu9C+INCyIHJheCkg0LIg0YHRgtGA0L7QutGDIEFTQ0lJCiAgICBtb3YgICByYXgsIFtyZXN1bHRdICAgIDsg0JfQsNCz0YDRg9C20LDQtdC8INGA0LXQt9GD0LvRjNGC0LDRgiDQsiByYXgKICAgIG1vdiAgIHJkaSwgYnVmZmVyICAgICAgOyDQo9C60LDQt9GL0LLQsNC10Lwg0L3QsCDQutC+0L3QtdGGINCx0YPRhNC10YDQsCAo0L/RgNC10L7QsdGA0LDQt9GD0LXQvCDRgSDQutC+0L3RhtCwKQogICAgYWRkICAgcmRpLCAxOSAgICAgICAgICA7INCf0LXRgNC10LzQtdGJ0LDQtdC80YHRjyDQuiDQv9C+0YHQu9C10LTQvdC10LzRgyDQsdCw0LnRgtGDINCx0YPRhNC10YDQsAogICAgbW92ICAgYnl0ZSBbcmRpXSwgMCAgICA7INCX0LDQv9C40YHRi9Cy0LDQtdC8INC90YPQu9C10LLQvtC5INGC0LXRgNC80LjQvdCw0YLQvtGAINC00LvRjyDRgdGC0YDQvtC60LgKICAgIG1vdiAgIHJieCwgMTAgICAgICAgICAgOyDQlNC10LvQuNGC0LXQu9GMINC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPINCyINC00LXRgdGP0YLQuNGH0L3Rg9GOINGB0YLRgNC+0LrRgwoKICAgIDsg0J/RgNC+0LLQtdGA0Y/QtdC8INC30L3QsNC6INGH0LjRgdC70LAKICAgIHRlc3QgIHJheCwgcmF4CiAgICBqbnMgICAuY29udmVydF9sb29wICAgIDsg0JXRgdC70Lgg0YfQuNGB0LvQviDQv9C+0LvQvtC20LjRgtC10LvRjNC90L7QtSwg0L/QtdGA0LXRhdC+0LTQuNC8INC6INC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y4KICAgIG5lZyAgIHJheCAgICAgICAgICAgICAgOyDQldGB0LvQuCDQvtGC0YDQuNGG0LDRgtC10LvRjNC90L7QtSwg0LTQtdC70LDQtdC8INC10LPQviDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQvCDQtNC70Y8g0L7QsdGA0LDQsdC+0YLQutC4CgouY29udmVydF9sb29wOgogICAgeG9yICAgcmR4LCByZHggICAgICAgICA7INCe0LHQvdGD0LvRj9C10LwgcmR4INC/0LXRgNC10LQg0LTQtdC70LXQvdC40LXQvAogICAgZGl2ICAgcmJ4ICAgICAgICAgICAgICA7INCU0LXQu9C40LwgcmF4INC90LAgMTAsINC+0YHRgtCw0YLQvtC6INCyIHJkeAogICAgYWRkICAgZGwsICcwJyAgICAgICAgICA7INCf0YDQtdC+0LHRgNCw0LfRg9C10Lwg0YbQuNGE0YDRgyDQsiDRgdC40LzQstC+0LsgQVNDSUkKICAgIGRlYyAgIHJkaSAgICAgICAgICAgICAgOyDQlNCy0LjQs9Cw0LXQvNGB0Y8g0L3QsNC30LDQtCDQsiDQsdGD0YTQtdGA0LUKICAgIG1vdiAgIFtyZGldLCBkbCAgICAgICAgOyDQodC+0YXRgNCw0L3Rj9C10Lwg0YHQuNC80LLQvtC7CiAgICB0ZXN0ICByYXgsIHJheAogICAgam56ICAgLmNvbnZlcnRfbG9vcCAgICA7INCf0YDQvtC00L7Qu9C20LDQtdC8LCDQv9C+0LrQsCByYXggIT0gMAoKICAgIDsg0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDRh9C40YHQu9C+INCx0YvQu9C+INC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9C8LCDQtNC+0LHQsNCy0LvRj9C10Lwg0LfQvdCw0Log0LzQuNC90YPRgQogICAgbW92ICAgcmF4LCBbcmVzdWx0XQogICAgdGVzdCAgcmF4LCByYXgKICAgIGpucyAgIC5wcmludAogICAgZGVjICAgcmRpCiAgICBtb3YgICBieXRlIFtyZGldLCAnLScKCi5wcmludDoKICAgIDsgNC4g0JLRi9Cy0L7QtNC40Lwg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90L3QvtC1INGH0LjRgdC70L4gKNGB0YLRgNC+0LrQsCDQvdCw0YfQuNC90LDQtdGC0YHRjyDRgSByZGkpCiAgICBtb3YgICByc2ksIHJkaSAgICAgICAgIDsg0JDQtNGA0LXRgSDQvdCw0YfQsNC70LAg0YHRgtGA0L7QutC4CiAgICBtb3YgICByZHgsIGJ1Zl9lbmQgICAgIDsg0JLRi9GH0LjRgdC70Y/QtdC8INC00LvQuNC90YMg0YHRgtGA0L7QutC4OiDQutC+0L3QtdGGINCx0YPRhNC10YDQsCAtINGC0LXQutGD0YnQsNGPINC/0L7Qt9C40YbQuNGPCiAgICBzdWIgICByZHgsIHJkaQogICAgbW92ICAgcmF4LCAxICAgICAgICAgICA7IHN5c193cml0ZQogICAgbW92ICAgcmRpLCAxICAgICAgICAgICA7IHN0ZG91dAogICAgc3lzY2FsbAoKICAgIDsgNS4g0JLRi9Cy0L7QtNC40Lwg0YHQuNC80LLQvtC7INC90L7QstC+0Lkg0YHRgtGA0L7QutC4CiAgICBtb3YgICByYXgsIDEKICAgIG1vdiAgIHJkaSwgMQogICAgbW92ICAgcnNpLCBuZXdsaW5lCiAgICBtb3YgICByZHgsIDEKICAgIHN5c2NhbGwKCiAgICA7IDYuINCX0LDQstC10YDRiNCw0LXQvCDQv9GA0L7Qs9GA0LDQvNC80YMKICAgIG1vdiAgIHJheCwgNjAgICAgICAgICAgOyDQodC40YHRgtC10LzQvdGL0Lkg0LLRi9C30L7QsiBzeXNfZXhpdAogICAgeG9yICAgcmRpLCByZGkgICAgICAgICA7INCa0L7QtCDQstC+0LfQstGA0LDRgtCwIDAKICAgIHN5c2NhbGw=