Ассемблер это тоже не более чем формализированный текстовый файл, компиляторы оперируют машинными кодами, которые процессор воспринимает как конкретную инструкцию к действию. Для процессора нет ни функций, ни переменных лишь память в стиле JS-TypedArray и последовательности инструкций вроде load, store, add, sub, compare, goto to ptr if(compare is signed_less), в той же памяти в виде бинарных чисел.
Именно Ваш пример любой оптимизирующий компилятор просто сотрёт. То есть просто запишет инструкцию return попутно ругнувшись на unused variable, а может вообще стереть всю функцию и её вызовы, ведь это никак не повлияет на результат.
Хотя конечно зная один из Ассемблеров выбранной процессорной архитектуры(а их как известно немало) можно без особого труда написать примитивный, не оптимизирующий компилятор, который будет передавать сгенерированный Ассемблерный файл в транслятор Ассемблера. Который просто транслирует Ассемблерные инструкции в соответствующие бинарные, машинные инструкции.
Вообще если хотите сделать свой язык программирования, то советую смотреть в сторону llvm. Это позволит Вам не заморачиваться с поддержкой бесчисленных процессорных архитектур и оптимизации машинных кодов под них. На хабре даже есть
статья как сделать свой llvm компилятор.