Online Compiler Nasm

extern io_get_char, io_print_dec global main section .bss x1 resd 1 y1 resd 1 x2 resd 1 y2 resd 1 section .text main: call io_get_char sub eax, 'A' mov [x1], eax call io_get_char sub eax, '1' mov [y1], eax call io_get_char call io_get_char sub eax, 'A' mov [x2], eax call io_get_char sub eax, '1' mov [y2], eax mov eax, [x2] sub eax, [x1] mov edx, eax sar edx, 31 xor eax, edx sub eax, edx mov [x1], eax mov eax, [y2] sub eax, [y1] mov edx, eax sar edx, 31 xor eax, edx sub eax, edx add eax, [x1] call io_print_dec xor eax, eax ret
1) Этот код считывает две шахматные координаты (например, A1 и B3), преобразует их в числовые индексы, вычисляет абсолютную разницу по горизонтали и вертикали, суммирует эти абсолютные разности и выводит результат. По сути, он считает минимальное количество ходов короля между двумя клетками на шахматной доске.

2) Подсказки:
- Обрати внимание, что после каждого вызова `io_get_char` символы преобразуются в числа: буквы (A-H) вычитанием 'A', а цифры (1-8) вычитанием '1'.
- Для вычисления абсолютного значения разности используется трюк с `sar edx, 31`, `xor` и `sub` — это стандартный способ получить модуль числа в ассемблере.