В качестве некого заключения данной темы хочу предложить кусочек своего скрипта, который демонстрирует как передачу параметров в функцию, так и получение от неё результата в случаях, если оные передаются через регистр.
// начало скрипта (flgRain выведен в таблицу и назначена горячая клавиша на установку значения в 1)
cmp byte ptr [flgRain],0 // проверяем не было ли команды на смену дождя
je endRain // если нет - завершаем скрипт
mov byte ptr [flgRain],0 // если была, то сначала сбрасываем флаг обратно (нам не нужно беспрерывно менять дождь туда-сюда, нужно выполнить код лишь единожды)
pushad // сохраняем все регистры в стек
call Terraria.Main::get_IsItRaining // проверяем идёт ли сейчас дождь (результат вернётся в регистр EAX)
test eax,eax // 0 - не идёт, 1 - идёт
je @f // прыжок к секции начала дождя (пропустить остановку дождя) если EAX==0
call Terraria.Main::StopRain // останавливаем дождь
popad // восстанавливаем регистры из стека
jmp endRain // выход из скрипта (не нужно запускать дождь)
@@:
call Terraria.Main::StartRain // запустить дождь
popad // восстановить регистры из стека
endRain:
За идею использования инструкций pushad/popad хочу поблагодарить пользователя "youneuoy" с Discord канала GamehackLab[RU].