Из-за того что в выражениях терм (слагаемое) определен так: term = factor {("*" | "DIV" | "MOD" | "&") factor}. А выражение в фигурных скобках по книге Вирта это цикл while, получается что арифметическое выражение вида: 5 * 4 / 2 & 15 проблем не вызовет и обойдется без использования стека, а вот такое (3 + 5) / (10 - 8) уже будет вынуждено вытолкнуть числитель чтобы посчитать знаменатель, а потом обменять стек и акк и выполнить деление, так как в отличии от X-A у нас нет X/A.
В репертуаре БЭСМ я нашел такую инструкцию - STX, согласно формуле (и коду Диспак) она работает так X = A; A = mem[--M[017]]; поэтому использую такой хак:
STX 0,M15 A/X 1,M15
По количеству операций с памятью вроде бы и не плохо даже :)
no subject
Date: 2021-10-20 11:09 am (UTC)Из-за того что в выражениях терм (слагаемое) определен так:
term = factor {("*" | "DIV" | "MOD" | "&") factor}.
А выражение в фигурных скобках по книге Вирта это цикл while, получается что арифметическое выражение вида: 5 * 4 / 2 & 15 проблем не вызовет и обойдется без использования стека, а вот такое (3 + 5) / (10 - 8) уже будет вынуждено вытолкнуть числитель чтобы посчитать знаменатель, а потом обменять стек и акк и выполнить деление, так как в отличии от X-A у нас нет X/A.
В репертуаре БЭСМ я нашел такую инструкцию - STX, согласно формуле (и коду Диспак) она работает так X = A; A = mem[--M[017]]; поэтому использую такой хак:
STX 0,M15
A/X 1,M15
По количеству операций с памятью вроде бы и не плохо даже :)