section .data
num1 dd -12345
num2 dd 6789
msg db "Результат: "
msg_len equ $ - msg
newline db 10
; Буфер достаточно большой для 64-битного числа со знаком
buffer db "00000000000000000000", 0 ; 20 нулей + терминатор
section .text
global _start
_start:
; Умножение
mov eax, [num1]
imul dword [num2]
mov [num1], eax ; временно сохраняем
; Вывод сообщения
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Преобразование числа в строку
mov eax, [num1] ; результат умножения
mov rdi, buffer + 19 ; конец буфера
mov byte [rdi], 0 ; терминатор
mov ebx, 10 ; делитель
mov ecx, eax ; сохраняем для знака
; Обработка знака
cmp eax, 0
jge .positive
neg eax
.positive:
xor edx, edx
add dl, '0'
dec rdi
mov [rdi], dl
test eax, eax
jnz .positive
; Добавляем минус если нужно
cmp ecx, 0
jge .output
dec rdi
mov byte [rdi], '-'
.output:
; Вывод результата
mov rsi, rdi
mov rdx, buffer + 20
sub rdx, rdi
mov rax, 1
mov rdi, 1
syscall
; Новая строка
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; Выход
mov rax, 60
xor rdi, rdi
syscall
c2VjdGlvbiAuZGF0YQogICAgbnVtMSAgICBkZCAtMTIzNDUKICAgIG51bTIgICAgZGQgNjc4OQogICAgCiAgICBtc2cgICAgIGRiICLQoNC10LfRg9C70YzRgtCw0YI6ICIKICAgIG1zZ19sZW4gZXF1ICQgLSBtc2cKICAgIG5ld2xpbmUgZGIgMTAKICAgIDsg0JHRg9GE0LXRgCDQtNC+0YHRgtCw0YLQvtGH0L3QviDQsdC+0LvRjNGI0L7QuSDQtNC70Y8gNjQt0LHQuNGC0L3QvtCz0L4g0YfQuNGB0LvQsCDRgdC+INC30L3QsNC60L7QvAogICAgYnVmZmVyICBkYiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCAwICA7IDIwINC90YPQu9C10LkgKyDRgtC10YDQvNC40L3QsNGC0L7RgAoKc2VjdGlvbiAudGV4dAogICAgZ2xvYmFsIF9zdGFydAoKX3N0YXJ0OgogICAgOyDQo9C80L3QvtC20LXQvdC40LUKICAgIG1vdiBlYXgsIFtudW0xXQogICAgaW11bCBkd29yZCBbbnVtMl0KICAgIG1vdiBbbnVtMV0sIGVheCAgOyDQstGA0LXQvNC10L3QvdC+INGB0L7RhdGA0LDQvdGP0LXQvAogICAgCiAgICA7INCS0YvQstC+0LQg0YHQvtC+0LHRidC10L3QuNGPCiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBtb3YgcnNpLCBtc2cKICAgIG1vdiByZHgsIG1zZ19sZW4KICAgIHN5c2NhbGwKCiAgICA7INCf0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40LUg0YfQuNGB0LvQsCDQsiDRgdGC0YDQvtC60YMKICAgIG1vdiBlYXgsIFtudW0xXSAgOyDRgNC10LfRg9C70YzRgtCw0YIg0YPQvNC90L7QttC10L3QuNGPCiAgICBtb3YgcmRpLCBidWZmZXIgKyAxOSAgOyDQutC+0L3QtdGGINCx0YPRhNC10YDQsAogICAgbW92IGJ5dGUgW3JkaV0sIDAgICAgIDsg0YLQtdGA0LzQuNC90LDRgtC+0YAKICAgIG1vdiBlYngsIDEwICAgICAgICAgICA7INC00LXQu9C40YLQtdC70YwKICAgIG1vdiBlY3gsIGVheCAgICAgICAgICA7INGB0L7RhdGA0LDQvdGP0LXQvCDQtNC70Y8g0LfQvdCw0LrQsAogICAgCiAgICA7INCe0LHRgNCw0LHQvtGC0LrQsCDQt9C90LDQutCwCiAgICBjbXAgZWF4LCAwCiAgICBqZ2UgLnBvc2l0aXZlCiAgICBuZWcgZWF4CiAgICAKLnBvc2l0aXZlOgogICAgeG9yIGVkeCwgZWR4CiAgICBkaXYgZWJ4CiAgICBhZGQgZGwsICcwJwogICAgZGVjIHJkaQogICAgbW92IFtyZGldLCBkbAogICAgdGVzdCBlYXgsIGVheAogICAgam56IC5wb3NpdGl2ZQogICAgCiAgICA7INCU0L7QsdCw0LLQu9GP0LXQvCDQvNC40L3Rg9GBINC10YHQu9C4INC90YPQttC90L4KICAgIGNtcCBlY3gsIDAKICAgIGpnZSAub3V0cHV0CiAgICBkZWMgcmRpCiAgICBtb3YgYnl0ZSBbcmRpXSwgJy0nCgoub3V0cHV0OgogICAgOyDQktGL0LLQvtC0INGA0LXQt9GD0LvRjNGC0LDRgtCwCiAgICBtb3YgcnNpLCByZGkKICAgIG1vdiByZHgsIGJ1ZmZlciArIDIwCiAgICBzdWIgcmR4LCByZGkKICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIHN5c2NhbGwKCiAgICA7INCd0L7QstCw0Y8g0YHRgtGA0L7QutCwCiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBtb3YgcnNpLCBuZXdsaW5lCiAgICBtb3YgcmR4LCAxCiAgICBzeXNjYWxsCgogICAgOyDQktGL0YXQvtC0CiAgICBtb3YgcmF4LCA2MAogICAgeG9yIHJkaSwgcmRpCiAgICBzeXNjYWxs