section .data
; Данные для примера: два 4-байтовых числа (dword)
num1 dd -1222 ; Первое число со знаком (размер: 4 байта)
num2 dd 6333 ; Второе число со знаком (размер: 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+0LLRi9GFINGH0LjRgdC70LAgKGR3b3JkKQogICAgbnVtMSAgICBkZCAtMTIyMiAgICAgOyDQn9C10YDQstC+0LUg0YfQuNGB0LvQviDRgdC+INC30L3QsNC60L7QvCAo0YDQsNC30LzQtdGAOiA0INCx0LDQudGC0LApCiAgICBudW0yICAgIGRkIDYzMzMgICAgICAgIDsg0JLRgtC+0YDQvtC1INGH0LjRgdC70L4g0YHQviDQt9C90LDQutC+0LwgKNGA0LDQt9C80LXRgDogNCDQsdCw0LnRgtCwKQogICAgcmVzdWx0ICBkcSAwICAgICAgICAgICA7INCX0LTQtdGB0Ywg0LHRg9C00LXRgiDRgNC10LfRg9C70YzRgtCw0YIgKDgg0LHQsNC50YIsINGH0YLQvtCx0Ysg0LLQvNC10YHRgtC40YLRjCDQv9GA0L7QuNC30LLQtdC00LXQvdC40LUpCiAgICAKICAgIDsg0KHRgtGA0L7QutC4INC00LvRjyDQstGL0LLQvtC00LAKICAgIG1zZyAgICAgZGIgItCg0LXQt9GD0LvRjNGC0LDRgiDRg9C80L3QvtC20LXQvdC40Y86ICIsIDAKICAgIG5ld2xpbmUgZGIgMTAgICAgICAgICAgOyDQodC40LzQstC+0Lsg0L3QvtCy0L7QuSDRgdGC0YDQvtC60LggKEFTQ0lJIDEwID0gJ1xuJykKICAgIGJ1ZmZlciAgdGltZXMgMjAgZGIgMCAgOyDQkdGD0YTQtdGAINC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPINGH0LjRgdC70LAg0LIg0YHRgtGA0L7QutGDCiAgICBidWZfZW5kIGVxdSAkICAgICAgICAgIDsg0JrQvtC90LXRhiDQsdGD0YTQtdGA0LAKCnNlY3Rpb24gLmJzcwogICAgOyAo0J3QtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0Y3RgtC+0Lwg0L/RgNC40LzQtdGA0LUpCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgpfc3RhcnQ6CiAgICA7IDEuINCj0LzQvdC+0LbQtdC90LjQtSDQtNCy0YPRhSA0LdCx0LDQudGC0L7QstGL0YUg0YfQuNGB0LXQuyDRgdC+INC30L3QsNC60L7QvAogICAgbW92ICAgZWF4LCBbbnVtMV0gICAgICA7INCX0LDQs9GA0YPQttCw0LXQvCDQv9C10YDQstC+0LUg0YfQuNGB0LvQviDQsiBlYXgKICAgIGltdWwgIGR3b3JkIFtudW0yXSAgICAgOyDQo9C80L3QvtC20LDQtdC8IGVheCDQvdCwINCy0YLQvtGA0L7QtSDRh9C40YHQu9C+ICjQt9C90LDQutC+0LLQvtC1INGD0LzQvdC+0LbQtdC90LjQtSkKICAgIDsg0KDQtdC30YPQu9GM0YLQsNGCICg2NC3QsdC40YLQvdGL0LkpINGC0LXQv9C10YDRjCDQsiBlZHg6ZWF4ICjRgdGC0LDRgNGI0LDRjyDQuCDQvNC70LDQtNGI0LDRjyDRh9Cw0YHRgtC4KQogICAgCiAgICA7INCh0L7RhdGA0LDQvdGP0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0LIg0L/QtdGA0LXQvNC10L3QvdGD0Y4gcmVzdWx0ICjQutCw0LogNjQt0LHQuNGC0L3QvtC1INGH0LjRgdC70L4pCiAgICBtb3YgICBbcmVzdWx0XSwgcmF4ICAgIDsg0KHQvtGF0YDQsNC90Y/QtdC8INC80LvQsNC00YjRg9GOINGH0LDRgdGC0YwgKNCyIHg4Nl82NCByYXggPSBlYXgg0YEg0L3Rg9C70LXQstGL0Lwg0YDQsNGB0YjQuNGA0LXQvdC40LXQvCkKCiAgICA7IDIuINCS0YvQstC+0LTQuNC8INGB0L7QvtCx0YnQtdC90LjQtSAi0KDQtdC30YPQu9GM0YLQsNGCINGD0LzQvdC+0LbQtdC90LjRjzogIgogICAgbW92ICAgcmF4LCAxICAgICAgICAgICA7INCh0LjRgdGC0LXQvNC90YvQuSDQstGL0LfQvtCyIHN5c193cml0ZQogICAgbW92ICAgcmRpLCAxICAgICAgICAgICA7INCk0LDQudC70L7QstGL0Lkg0LTQtdGB0LrRgNC40L/RgtC+0YAgc3Rkb3V0CiAgICBtb3YgICByc2ksIG1zZyAgICAgICAgIDsg0JDQtNGA0LXRgSDRgdGC0YDQvtC60LgKICAgIG1vdiAgIHJkeCwgMjAgICAgICAgICAgOyDQlNC70LjQvdCwINGB0YLRgNC+0LrQuCAo0L/QvtC00YHRh9C40YLQsNC50YLQtSDRgtC+0YfQvdGD0Y4g0LTQu9C40L3RgyDQstCw0YjQtdC5INGB0YLRgNC+0LrQuCkKICAgIHN5c2NhbGwKCiAgICA7IDMuINCf0YDQtdC+0LHRgNCw0LfRg9C10Lwg0YDQtdC30YPQu9GM0YLQsNGCICg2NC3QsdC40YLQvdC+0LUg0YfQuNGB0LvQviDQsiByYXgpINCyINGB0YLRgNC+0LrRgyBBU0NJSQogICAgbW92ICAgcmF4LCBbcmVzdWx0XSAgICA7INCX0LDQs9GA0YPQttCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0LIgcmF4CiAgICBtb3YgICByZGksIGJ1ZmZlciAgICAgIDsg0KPQutCw0LfRi9Cy0LDQtdC8INC90LAg0LrQvtC90LXRhiDQsdGD0YTQtdGA0LAgKNC/0YDQtdC+0LHRgNCw0LfRg9C10Lwg0YEg0LrQvtC90YbQsCkKICAgIGFkZCAgIHJkaSwgMTkgICAgICAgICAgOyDQn9C10YDQtdC80LXRidCw0LXQvNGB0Y8g0Log0L/QvtGB0LvQtdC00L3QtdC80YMg0LHQsNC50YLRgyDQsdGD0YTQtdGA0LAKICAgIG1vdiAgIGJ5dGUgW3JkaV0sIDAgICAgOyDQl9Cw0L/QuNGB0YvQstCw0LXQvCDQvdGD0LvQtdCy0L7QuSDRgtC10YDQvNC40L3QsNGC0L7RgCDQtNC70Y8g0YHRgtGA0L7QutC4CiAgICBtb3YgICByYngsIDEwICAgICAgICAgIDsg0JTQtdC70LjRgtC10LvRjCDQtNC70Y8g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjRjyDQsiDQtNC10YHRj9GC0LjRh9C90YPRjiDRgdGC0YDQvtC60YMKCiAgICA7INCf0YDQvtCy0LXRgNGP0LXQvCDQt9C90LDQuiDRh9C40YHQu9CwCiAgICB0ZXN0ICByYXgsIHJheAogICAgam5zICAgLmNvbnZlcnRfbG9vcCAgICA7INCV0YHQu9C4INGH0LjRgdC70L4g0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUsINC/0LXRgNC10YXQvtC00LjQvCDQuiDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGOCiAgICBuZWcgICByYXggICAgICAgICAgICAgIDsg0JXRgdC70Lgg0L7RgtGA0LjRhtCw0YLQtdC70YzQvdC+0LUsINC00LXQu9Cw0LXQvCDQtdCz0L4g0L/QvtC70L7QttC40YLQtdC70YzQvdGL0Lwg0LTQu9GPINC+0LHRgNCw0LHQvtGC0LrQuAoKLmNvbnZlcnRfbG9vcDoKICAgIHhvciAgIHJkeCwgcmR4ICAgICAgICAgOyDQntCx0L3Rg9C70Y/QtdC8IHJkeCDQv9C10YDQtdC0INC00LXQu9C10L3QuNC10LwKICAgIGRpdiAgIHJieCAgICAgICAgICAgICAgOyDQlNC10LvQuNC8IHJheCDQvdCwIDEwLCDQvtGB0YLQsNGC0L7QuiDQsiByZHgKICAgIGFkZCAgIGRsLCAnMCcgICAgICAgICAgOyDQn9GA0LXQvtCx0YDQsNC30YPQtdC8INGG0LjRhNGA0YMg0LIg0YHQuNC80LLQvtC7IEFTQ0lJCiAgICBkZWMgICByZGkgICAgICAgICAgICAgIDsg0JTQstC40LPQsNC10LzRgdGPINC90LDQt9Cw0LQg0LIg0LHRg9GE0LXRgNC1CiAgICBtb3YgICBbcmRpXSwgZGwgICAgICAgIDsg0KHQvtGF0YDQsNC90Y/QtdC8INGB0LjQvNCy0L7QuwogICAgdGVzdCAgcmF4LCByYXgKICAgIGpueiAgIC5jb252ZXJ0X2xvb3AgICAgOyDQn9GA0L7QtNC+0LvQttCw0LXQvCwg0L/QvtC60LAgcmF4ICE9IDAKCiAgICA7INCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0YfQuNGB0LvQviDQsdGL0LvQviDQvtGC0YDQuNGG0LDRgtC10LvRjNC90YvQvCwg0LTQvtCx0LDQstC70Y/QtdC8INC30L3QsNC6INC80LjQvdGD0YEKICAgIG1vdiAgIHJheCwgW3Jlc3VsdF0KICAgIHRlc3QgIHJheCwgcmF4CiAgICBqbnMgICAucHJpbnQKICAgIGRlYyAgIHJkaQogICAgbW92ICAgYnl0ZSBbcmRpXSwgJy0nCgoucHJpbnQ6CiAgICA7IDQuINCS0YvQstC+0LTQuNC8INC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC90L7QtSDRh9C40YHQu9C+ICjRgdGC0YDQvtC60LAg0L3QsNGH0LjQvdCw0LXRgtGB0Y8g0YEgcmRpKQogICAgbW92ICAgcnNpLCByZGkgICAgICAgICA7INCQ0LTRgNC10YEg0L3QsNGH0LDQu9CwINGB0YLRgNC+0LrQuAogICAgbW92ICAgcmR4LCBidWZfZW5kICAgICA7INCS0YvRh9C40YHQu9GP0LXQvCDQtNC70LjQvdGDINGB0YLRgNC+0LrQuDog0LrQvtC90LXRhiDQsdGD0YTQtdGA0LAgLSDRgtC10LrRg9GJ0LDRjyDQv9C+0LfQuNGG0LjRjwogICAgc3ViICAgcmR4LCByZGkKICAgIG1vdiAgIHJheCwgMSAgICAgICAgICAgOyBzeXNfd3JpdGUKICAgIG1vdiAgIHJkaSwgMSAgICAgICAgICAgOyBzdGRvdXQKICAgIHN5c2NhbGwKCiAgICA7IDUuINCS0YvQstC+0LTQuNC8INGB0LjQvNCy0L7QuyDQvdC+0LLQvtC5INGB0YLRgNC+0LrQuAogICAgbW92ICAgcmF4LCAxCiAgICBtb3YgICByZGksIDEKICAgIG1vdiAgIHJzaSwgbmV3bGluZQogICAgbW92ICAgcmR4LCAxCiAgICBzeXNjYWxsCgogICAgOyA2LiDQl9Cw0LLQtdGA0YjQsNC10Lwg0L/RgNC+0LPRgNCw0LzQvNGDCiAgICBtb3YgICByYXgsIDYwICAgICAgICAgIDsg0KHQuNGB0YLQtdC80L3Ri9C5INCy0YvQt9C+0LIgc3lzX2V4aXQKICAgIHhvciAgIHJkaSwgcmRpICAgICAgICAgOyDQmtC+0LQg0LLQvtC30LLRgNCw0YLQsCAwCiAgICBzeXNjYWxs