我正在根据我的计算系统要素一书中给出的规范来实现 ALU。我只遇到一个问题。如何查找给定数字是否为零。我可以做的一件事是或总线上的每一位,然后对其应用一个非门。但必须有其他一些优雅的解决方案。
如何判断一个二进制数是否为零
电器工程
铝
2022-01-04 22:19:03
4个回答
根本没有办法对所有位进行 ORing,尽管这看起来并不令人满意。但是,您也不限于硅中的两个输入门。您可以通过在上拉网络中放置 4 个串联 p 型晶体管和在下拉网络中放置 4 个并联 n 型晶体管,在 CMOS 逻辑中构建一个 4 输入或非门。这减少了树形拓扑的深度,从而减少了传播延迟。尽管在串联晶体管上的累积电压降使上拉不足以成为“1”之前,您只能采用该理论……如果我没记错的话,四是一个很好的经验法则。
逻辑功能是或非门。这是存在的最简单的逻辑函数。
8 位机器的典型解决方案是 ALU 会产生一些“标志”位,这些位代表最近操作的结果。虽然可能有任意数量的标志位(即,您可以为 CPU 中的每个寄存器设置一个“Z”标志),但通常是您刚刚计算出的最感兴趣的东西,所以这样做有一定的意义。
其中一些旧 CPU 会自动为几乎每次数据移动设置标志位,而另一些则需要您在代码中粘贴特定的“比较”指令,如果您突然需要知道某个寄存器是否为零。而且,无论您为每个寄存器提供零检查还是仅对刚刚计算的内容进行检查,实际上没有比将所有位加在一起更简单的方法来检查“这个词是否为零”。
一些 CPU,例如 MIPS,有一个总是包含零的寄存器,这使得测试另一个寄存器为零非常快。
其它你可能感兴趣的问题