Если речь идет о языках высокого уровня, то данные передаются:1) Через глобальные переменные.2) Через параметры подпрограммы.3) Через внешние устройства (например через файлы на диске). Глобальные переменные - программа и подпрограмма \"знают\" в какие переменные записываются исходные данные, а в какие результаты выполнения подпрограммы. Параметры подпрограммы - в параметрах подпрограммы можно передать исходные данные и получить через них результаты выполнения. Внешние устройства - теоретически, программа может исходные данные записывать в файл, а подпрограмма считывать данные из этого файла. Результаты выполнения можно передавать в обратном порядке. Если речь идет о языках низкого уровня или машинных кодах, то данные передаются:1) Через регистры процессора.2) Через выделенные ячейки оперативной памяти.3) Через стек. Регистры процессора - перед вызовом подпрограммы в заранее оговоренные регистры процессора записываются исходные данные. После выполнения, подпрограмма записывает результаты также в заранее оговоренные регистры. Выделенные ячейки ОЗУ - входные и результирующие данные записываются по заранее оговоренным адресам ОЗУ. Стек - можно сравнить с револьверным барабаном, данные по очереди \"впихиваются\" в стек, а затем в обратном порядке \"достаются\" из стека.