помощь в понимании этого фрагмента кода
Это code snipper из заголовка.S-файл в коде ядра. Я не мог понять, что делает инструкция lretw. Я проверил так много онлайн-источников для инструкции.
# We will have entered with %cs = %ds+0x20, normalize %cs so
# it is on par with the other segments.
pushw %ds
pushw $6f
lretw
Может ли кто-нибудь помочь мне в понимании этого наставления?1 ответ:
retэто инструкция вернуться с процедуры. Таким образом, в основном он выводит обратный адрес из стека в регистр EIP.Префикс
lздесь, чтобы сказать, что этодалекое возвращение из процедуры. В этом случае команда сначала вставляет значение из стека в регистр EIP, а затем вставляет второе значение в регистр CS.Суффикс
wздесь, потому что на этом шаге мы работаем в реальном режиме, и операнды составляют 16 бит широкий.Точный код:
pushw %ds pushw $6f lretw 6:
6:здесь очень важно. Таким образом, это делает следующее: помещает значение ds в стек, помещает адрес метки6в стек, а затем запускает эту инструкциюlretw. Таким образом, в основном, он загрузит адрес метки6в регистр указателя инструкции и загрузит регистрcsсо значением регистраds. Так что это просто трюк, чтобы продолжить выполнение в label6с изменениемcsзначения регистров.