Этот код работает в реальном режиме. У меня есть такой пример: Этот код обращается к адресу 0x001FFD50.Как вернуться в ассемблере в режиме REAL до 32-разрядного адреса?
...
001F066F: push es
001F0670: push 0FD50
001F0673: retf ^^^^^^
001F0674: push 00051
...
После этого, у меня есть такой код:
Мне нужно, чтобы вернуться к адресу 0x001F0674.
...
001FFE91: push 00674
001FFE94: retn ^^^
...
Но вместо этого я перехожу к адресу 0x0674. Как я могу вернуться к адресу 0x001F0674 в реальном режиме?
Для переключения сегментов вам необходимо использовать 'retf'. Просто используйте свой первый пример, но 'push 0x001F' вместо' es', очевидно. Или, если 'es' все еще содержит' 0x001F', вы можете даже сохранить это. – Jester
Во втором случае вы, кажется, находитесь в одном и том же сегменте, поэтому ваш код должен работать, так как вам не нужно переключаться между сегментами. – Jester
Я предполагаю, что везде у вас есть что-то вроде '0x001FFD50', вы действительно имеете в виду' 0x001F: 0xFD50' Я спрашиваю, потому что если это так, это не 32-разрядные адреса, это сегмент: смещение (физический адрес = сегмент * 16 + смещение) –