как можно перевести такой TAC в инструкцию RISC
Загрузить a
в t1
(или переместить t0
в t1
), загрузить b
вкакой-то другой регистр, а затем добавить этот другой регистр в t1
.
Я предположил, что временные объекты назначаются регистрам с тем же именем, а переменные хранятся в памяти, потому что это, кажется,предположение вы сделали.Вы не можете предположить, что в целом (по крайней мере, не первая часть, так как может быть больше временных значений, чем регистров - также обычно хранят переменные в регистрах, где это возможно, но, конечно, вам не нужно это делать), ноВопрос был не в распределении регистров, поэтому я не буду вдаваться в подробности.
Почему такой TAC обычно используется, когда сегодня так много процессоров основаны на RISC?
Наиболее распространенные архитектуры процессоров сегодня - это x86, x64 и ARM, каждая из которых может выполнять r1 = r2 + r3
в одной инструкции, поэтому ваше предположение не совсем точно.Но даже если бы это было так, основная цель TAC не состоит в том, чтобы как можно более точно отобразить сборку.
Вместо этого цель состоит в том, чтобы быть полезным форматом для оптимизаций и анализов, которые компиляторы обычно выполняют до этого.наконец, создание целевого кода.Делать код более сложным, добавляя дополнительные шаги в IR, не будет способствовать достижению этой цели, поэтому это не сделано.