Assembly 在汇编中求解布尔代数?

Assembly 在汇编中求解布尔代数?,assembly,boolean-logic,x86-16,boolean-operations,Assembly,Boolean Logic,X86 16,Boolean Operations,我需要写一个程序来解决布尔表达式 我有一个字符串,例如:“1+0*(1*0)” 我怎样才能得到这个表达式的结果呢 我正在考虑用算法把它变成后缀,然后解决它,但我不知道是否有必要。任何关于如何实现这一点的想法都将不胜感激。如果方程式已经采用了后缀符号,您可以在不使用调车场算法的情况下求解它。例如,上面的1+0*(1*0)将是10**+。只需将元素推到堆栈上,直到到达运算符,然后弹出2个元素,并计算结果,将其推回到堆栈上 在本例中,1、0、1和0被推到堆栈上。然后,*使堆栈弹出0,然后弹出1。结果是

我需要写一个程序来解决布尔表达式

我有一个字符串,例如:“1+0*(1*0)”

我怎样才能得到这个表达式的结果呢


我正在考虑用算法把它变成后缀,然后解决它,但我不知道是否有必要。任何关于如何实现这一点的想法都将不胜感激。

如果方程式已经采用了后缀符号,您可以在不使用调车场算法的情况下求解它。例如,上面的
1+0*(1*0)
将是
10**+
。只需将元素推到堆栈上,直到到达运算符,然后弹出2个元素,并计算结果,将其推回到堆栈上

在本例中,
1
0
1
0
被推到堆栈上。然后,
*
使堆栈弹出
0
,然后弹出
1
。结果是
0
。它被推到堆栈上,现在包含
1
0
0
(顺序从下到上)。
*
从堆栈中弹出
0
0
,这将导致
0
,并将其推回到堆栈上。最后,
+
从堆栈中弹出
0
0
,使堆栈为空,结果为0


这可以很容易地在汇编中实现,因为几乎每个CPU都有内置堆栈。只需从字符串中读取字符,然后按照上面的步骤进行操作。您不必担心解析单词,因为每个操作数/运算符的长度都不会超过一个字符。

如果该等式已采用后缀表示法,则无需使用调车场算法即可求解。例如,上面的
1+0*(1*0)
将是
10**+
。只需将元素推到堆栈上,直到到达运算符,然后弹出2个元素,并计算结果,将其推回到堆栈上

在本例中,
1
0
1
0
被推到堆栈上。然后,
*
使堆栈弹出
0
,然后弹出
1
。结果是
0
。它被推到堆栈上,现在包含
1
0
0
(顺序从下到上)。
*
从堆栈中弹出
0
0
,这将导致
0
,并将其推回到堆栈上。最后,
+
从堆栈中弹出
0
0
,使堆栈为空,结果为0


这可以很容易地在汇编中实现,因为几乎每个CPU都有内置堆栈。只需从字符串中读取字符,然后按照上面的步骤进行操作。您不必担心解析单词,因为每个操作数/运算符的长度不会超过一个字符。

您是否尝试过解决您可能遇到的问题?在过去的几年中,我从头开始编写汇编函数,首先用C语言编写,然后手工汇编。这有助于将问题分解成碎片。然后您可以手动优化程序集。@Liso22,为了使用调车场,您的输入必须是中缀,而不是后缀。对不起,我的意思是从后缀转换为中缀。谢谢你的编辑@姆布拉奇:我还没做过,因为没有更好的选择,我不得不使用调车场算法。什么IDE将C转换为汇编?我一直在使用代码块,但我不认为它有这样的选项:许多IDE都提供带有汇编输出的命令行编译功能。我不知道你能得到什么。但正如我在之前的评论中所说,你也可以手工完成。您可以先用任何更高级的语言编写,然后手工编译成汇编。首先用高级语言编写代码有助于构建代码结构,并将问题分解为多个部分,这样编写程序集就更容易了。我喜欢@isaach1000只使用处理器的本机堆栈功能的想法,因为这是在汇编中编写的。我仍然建议更详细地对算法进行伪编码(几乎是对已发布的算法的一次提升——对您的细节进行了一些调整),然后开始编码。你只需要潜入水中玩它。你会边走边学。:)你有没有尝试过解决你可以分享的问题?在过去的几年中,我从头开始编写汇编函数,首先用C语言编写,然后手工汇编。这有助于将问题分解成碎片。然后您可以手动优化程序集。@Liso22,为了使用调车场,您的输入必须是中缀,而不是后缀。对不起,我的意思是从后缀转换为中缀。谢谢你的编辑@姆布拉奇:我还没做过,因为没有更好的选择,我不得不使用调车场算法。什么IDE将C转换为汇编?我一直在使用代码块,但我不认为它有这样的选项:许多IDE都提供带有汇编输出的命令行编译功能。我不知道你能得到什么。但正如我在之前的评论中所说,你也可以手工完成。您可以先用任何更高级的语言编写,然后手工编译成汇编。首先用高级语言编写代码有助于构建代码结构,并将问题分解为多个部分,这样编写程序集就更容易了。我喜欢@isaach1000只使用处理器的本机堆栈功能的想法,因为这是在汇编中编写的。我仍然建议更详细地对算法进行伪编码(几乎是对已发布的算法的一次提升——对您的细节进行了一些调整),然后开始编码。你只需要潜入水中玩它。你会边走边学。:)谢谢,我的方程式是中缀的。将其转换为后缀并使用您的算法是一个好主意,还是以某种方式在中缀中解决它更实际?顺便问一下,您的算法是否可以处理否定,例如:“1*!(1+0)”?这将是一个好主意