Online Compiler Nasm

extern io_get_dec, io_print_dec, io_newline section .bss x dword 1 y dword 1 z dword 1 # место для окончательного 96битного произведения section .text global main main: call io_get_dec # в eax первое число a mov ebx, eax # переложили a в ebx call io_get_dec # eax второе число b mul ebx # помножили a и b - результат 64 бита mov esi, edx #старшие mov edi, eax #младшие call io_get_dec mov ebx, eax #берем чиселку c mov eax, esi #вытаскиваем старшие биты произведения mul ebx #множим - получаем еще 64 бита (но типо старшие) mov [x], edx #кладем старшие биты mov [y], eax # и средние mov eax, edi mul ebx add [y], edx mov [z], eax adc [z], 0 ret
1) Этот код умножает три 32-битных числа, считываемых с ввода, и сохраняет 96-битный результат в три переменные (x, y, z) в памяти.

2) Подсказки:
- Обрати внимание, что после первого умножения `mul ebx` 64-битный результат хранится в паре EDX:EAX. Последующие операции работают с частями этого результата.
- Изучи, как инструкции `add` и `adc` используются для сложения с переносом при формировании итогового 96-битного числа из частных произведений.