Online Compiler Nasm

%include "io.inc" section .bss speed_x resd 1 speed_y resd 1 usk_x resd 1 usk_y resd 1 time resd 1 section .text global main main: GET_DEC 1, speed_x GET_DEC 1, speed_y GET_DEC 1, usk_x GET_DEC 1, usk_y GET_DEC 1, time ; считаем t^2 mov ecx, [time] mov edx, ecx imul edx, ecx mov [time], edx ; x = vx * t + ax * t^2 mov eax, [speed_x] mov ebx, ecx ; ecx ещё хранит оригинальное t imul eax, ebx mov [speed_x], eax mov eax, [time] imul eax, [usk_x] add eax, [speed_x] PRINT_DEC 4, eax PRINT_CHAR ' ' ; y = vy * t + ay * t^2 mov eax, [speed_y] imul eax, ebx ; ebx = t mov [speed_y], eax mov eax, [time] imul eax, [usk_y] add eax, [speed_y] PRINT_DEC 4, eax xor eax, eax ret
1) Этот код вычисляет координаты x и y тела после заданного времени, используя начальные скорости и ускорения по осям. Формулы: x = vx * t + ax * t², y = vy * t + ay * t².

2) Обрати внимание, что после вычисления t² в квадрате значение переменной `time` перезаписывается, но оригинальное значение t всё ещё хранится в регистре ecx. Убедись, что при вычислении ax * t² используется уже возведённое в квадрат значение. Также помни, что при использовании `imul` с операндом в памяти результат может быть неполным, если не указан размер.