История языков программирования
С середины 50-х гг. XX в. начали создавать первые языки программирования высокого уровня (high-level programming languages). Эти языки не были привязаны к определенному типу ЭВМ (машинонезависимы). Для каждого из них были разработаны собственные компиляторы. Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда язык ассемблера).
P-код
Сама концепция абстрактного машинного кода для языков программирования впервые была применена в 1966 году (O-code для BCPL). Термин P-код был введен в начале 1970-х годов коллективом под руководством Никлауса Вирта при реализации переносимого компилятора для языка Паскаль. Введение промежуточного p-кода упростило портирование языка: компилятор (написанный на Паскале) создавал из исходного кода последовательность p-кодов, исполняемую p-системой (интерпретатором p-кода, написанном, например, на ассемблере). Для переноса языка на новую платформу требовалось лишь адаптировать к ней p-систему, что в короткие сроки было выполнено для платформ 6502, 8080, Z-80, PDP-11 и многих других.