Когда по условию задачи заранее известно, что код обращается к данным ( например - к строке байтов ) и известен размер обращения ( из кода команды ) - возможность обращения к тем же данным с тем же размером гарантирована.
Точно так же - значит с таким же размером. Если 16-разрядный код обращается к байту, то и 32-разрядный обращается к байту, если 16-разрядный код обращается к 16-разрядному слову, то и 32-разрядный код обращается к 16-разрядному слову.
Модифицируемый код точно не поломается, если его не использовать. Приведите пример библиотечного модуля с самомодифицируемым кодом - вряд ли такие вообще есть. А ведь чтобы попасть в адресное пространство 32-разрядного процесса - 16-разрядный код должен быть прилинкован к 32-разрядной программе из 16-разрядной библиотеки.
Под модифицируемым кодом имеется в виду код, изменяющий первое слово команды, а не второе или третье. Если запись идёт во второе или третье слово команды - такой "модифицируемый код" без проблем автоматически превращается в 32-разрядный.
Байтовые обращения к данным не могут поломаться, потому что и 16-разрядная, и 32-разрядная архитектуры обращаются к 8-разрядным и 16-разрядным данным одинаково. Разница только в обращении к коду. У 16-разрядного кода обращение к коду 16-разрядное, а у 32-разрядного кода обращение к коду 32-разрядное.





Ответить с цитированием