Я работаю над школьным проектом, чтобы написать программу, которая обнаруживает зависимости данных после чтения в инструкциях по сборке. У меня есть список списков, содержащих инструкции.Python: скрипт для обнаружения данных Опасности
Одним из таких примеров приведен список таких, как
line1 = [[LD a8,0x8910] [мул а3, a2,8] [ЗЫ а3, a3,4] [добавить а3, а3, а8]]
Здесь последняя команда добавления зависит от результата сдвига влево (shl), который в свою очередь зависит от результата mul intsruction.
Я хотел бы мой код для вывода зависимости как {мул -> ш -> добавить}
Другой пример: line2 = [[добавить a3, a2, a1] [суб a4, a5, a6] [добавить a9, a2, a4]] выход: {добавить -> добавить} {суб -> добавить}
Я хочу удалить опкоды инструкции, чтобы получить line1 = [[a8, 0x8910] [a3, a2,8] [a3, a3,4] [а3, а3, а8]] и затем экстрагируют операнды назначени в dst_list = [a8, a3, a3, a3} и исходные операнды в другой список как src_list = [0x8910, [ a2,8], [a3,4], [a3, a8]]. Я собираюсь взять n-й элемент из src_list и сравнить с 0 по n-1 элементов dst_list и выводить индексы, когда они совпадают. Наконец, используйте словарь для вывода инструкций, соответствующих моим индексам. Правильно ли мой подход? Может ли кто-нибудь помочь мне в том, как добиться этого в python?
До сих пор я пытался:
dest = re.findall(r'\[(?=([a-z0-9.]+))',str(line))
src = re.findall(r'\,(?=([a-z0-9]+))', str(line))
for i in dest:
dst_list.append([i])
for j in src:
src_list.append(j)
#psuedo code to find hazards
for nth src_item in src_list:
for 0 to n-1 dst_items in dst_list:
if src_list[src_item] == dst_list[dst_item]
OUTPUT dst_item -> src_item
re.findall выше, дает мне один список со всеми операндами назначения и другой список с исходными операндами (мне нужен список списков с 2 Src аргументов каждого инструкция в одном списке).
Как это достичь?
Не могли бы вы пояснить, что последний бит? Мне тяжело следить за тем, что вам нужно, и тем, что вы получаете. также, если вы не используете какой-то синтаксический заменитель, который не похож на действительный код python. – user2085282
Последняя часть - это всего лишь псевдокод. Re.findall возвращает один список src_list = [0x8910, a2, 8, a3, 4, a3, a8] вместо [0x8910, [a2,8], [a3,4], [a3, a8]] – Mohan