Функций в ассемблере нет. Процедура - любой набор команд, завершенный командой ret. Процедуру можно вызвать командой call. Параметры можно передать через регистры и через стек. На конкретных примерах показано, как это сделать. Данные могут храниться только в памяти, регистрах и стеке, что позволяет ассемблеру получать к ним доступ. Поэтому правильны, но неверны большинство утверждений языков высокого уровня, например, что есть функции, что они возвращают значение, что оно одно, что к локальным переменным функции нет доступа извне ее, что нельзя работать с приватными свойствами объекта вне его и т.п. Все это - страшилки для маленьких детей, по типу: не ходите в африку, там бармалей. Сила в правде, а правда в Ассемблере )).
Исходники, как всегда, можно скачать с моего сайта( смотри в описании канала)