Online Compiler Nasm

; Реши задачу и в конце напиши ответ на каждую задачу: ;Задача 1-Fill: Заполнение пропусков ;После независимого выполнения приведенных ниже фрагментов кода на языке ассемблера, значения регистра eax были сохранены и записаны. Восстановите объявления переменных в шестнадцатеричной записи, оставляя ? на месте тех шестнадцатеричных цифр, однозначно восстановить которые невозможно. ;x dw 0x????, 0x???? ;movsx eax, word [x+1] ;shr eax, 2 ;shl eax, 2 ;; EAX = 0x3cf0 ;y dd 0x???????? ;mov eax, dword [y] ;rol eax, 48 ;xor ah, 0xfe ;; EAX = 0x85ea99bc ;z db 0x??, 0x??, 0x??, 0x?? ;mov eax, dword [z] ;lea eax, [2*eax] ;add eax, eax ;; EAX = 0xf20e6c48 ;Выводите искомые шестнадцатеричные числа со всеми ведущими нулями без префикса 0x, разделяя их произвольным количеством пробельных символов.
Этот код содержит три задачи на восстановление начальных значений переменных по результатам операций над ними. В каждой задаче даны фрагменты ассемблерного кода и конечное значение EAX. Нужно определить, какие шестнадцатеричные цифры в исходных данных можно восстановить однозначно, а какие остаются неизвестными.

- В первой задаче обрати внимание, что `movsx` расширяет знак, а операции сдвига вправо и влево на 2 бита обнуляют два младших бита. Это значит, что в конечном значении два младших бита всегда равны 0, и это может помочь восстановить часть исходных данных, но не все биты.

- Во второй задаче `rol eax, 48` — это циклический сдвиг 32-битного значения на 48 бит, что эквивалентно сдвигу на 16 бит (48 mod 32 = 16). Затем `xor ah, 0xfe` меняет старший байт младшего слова. Подумай, как восстановить исходное значение, зная конечное и обратные операции.