Технически, процессор в 64 бита исполняет только 64-разрядные команды. Но в некоторых процессорах есть блок трансляции команд из 32 бит в 64, который можно включить программно. Так вот, операционная система по заголовку файла определяет исполняемый тип программы, и если файл в 32 битной адресации, взводит разрешает использовать блок трансляции для данной программы.
Конечно же все гораздо сложнее, и для исполнения 32 программ нужны и библиотеки в формате 32 бит, и нужно знать как работает транслятор памяти, и блоки защиты адресов, и планировщик процессов и куча всего прочего, типа выборки адресов из памяти. Но собственно, это к делу не относится.