Перевод выражения в код ассемблера

197
25 марта 2018, 21:40

Есть программа который переводит выражение в обратную польскую запись и потом вычисляет результат. мне нужно в момент вычисления транслировать выражение в код ассемблера в output.txt файле. Например:

  5 - 10 + 20 * 5 - 30 + 3

assign R0, 20

assign R4, 5

mul R0, R4, R0

assign R4, 5

assign R8, 10

sub R4, R8, R4

add R4, R0, R0

assign R4, 30

sub R0, R4, R0

assing R4, 3

add R0, R4, R0

Как реализовать такую задачу, чтобы программа правильно распределял выражение по регистрам а потом записывал?

Answer 1

На вскидку - берете список регистров вашего процессора Берете переменную. Фильтруете список, отбрасывая те регистры, которые

  • уже заняты
  • в которые эту переменную положить нельзя,
  • те регистры с которыми нельзя выполнить требуемую операцию

Если остался непустой список, размещаете переменную в первый из регистров.

Если получился пустой список - возвращаемся в начало и пробуем укладывать переменные в другом порядке.

READ ALSO
Открытие файла без расширения в С++

Открытие файла без расширения в С++

Есть файл, путь - C:\Windows\System32\config\SYSTEM "SYSTEM" - сам файл, лог, в С++ пишу такой код, но файл невозможно открыть:

176
Вызов функции через адрес поля класса

Вызов функции через адрес поля класса

Могу ли я определить указатель на функцию как поле в классе, записать в нее адрес функции (зная сигнатуру метода) и обращаться к данному полю...

180
C++ Серебряная матрица [N][N]

C++ Серебряная матрица [N][N]

Подскажите, в чем моя ошибка? Ни разу не засчитало ответ

344
Пожалуйста, помогите найти ошибку(LNK2001) с++

Пожалуйста, помогите найти ошибку(LNK2001) с++

Пожалуйста, помогите найти ошибку(LNK2001) в коде:

206