【发布时间】:2015-04-19 01:59:01
【问题描述】:
我在七段显示器上显示四位数字时遇到问题。我有以下循环,除了 MSB 中的显示外,一切正常。我知道这是因为输入 S9 只有 4 位,所以当我将它乘以 SA(这是七段显示器的当前值)时,结果只给了我 12 位,即使我保持最后一位仍然为 0乘以其他数字溢出到下一个数字。所以我不知道如何在不改变产品的情况下使它成为四位数。请参见下面显示结果的示例。 F乘F给我00E1 E1乘以F给我0D2F D2F 乘以 F 给我 02C1(MSB 中应该已经有一个数字)
我的代码如下:
LOAD SB, 00
LOAD SF, 08
multloop:
SR0 SA;
JUMP NC, shiftproduct
ADD SB, s9
shiftproduct :
SRA SB
SRA SC
SUB SF, 01
JUMP NZ, multloop
OUTPUT sB,05 ; upper byte of seven segment display
OUTPUT sC,04 ; lower byte of seven segment display
谢谢你, 朱利叶斯
【问题讨论】:
-
不确定这是用于什么 CPU,或者它是否只是概念性的,但
SRA是否通过进位旋转?另外(这不是您的问题的原因),您可能应该在开头使用LOAD SC, 00。为了提高效率,您可以在SA变为零时终止循环。SF中不需要循环计数器。如果您有“带进位加法”指令,我会使用 4 位数而不是 8 位数作为乘数,这可能是循环迭代次数的一半。 -
我认为您的循环在完成时也会多次向产品左移。根据您的循环逻辑,
SRA SB和SRA SC在您决定是否退出循环之前就完成了。如果是这样的话,你总是会看到一个偶数的产品(即使在你的陈述中,你说你得到了正确的结果)。您可能希望在 after 决定是否退出循环之后再进行换档。 -
嗨,Lurker,感谢您的回复。是的,SRA 循环遍历所有位,包括进位。
-
关于 LOAD SC, 00,这是我的问题,SC 是一个 4 位输入,由我的 fpga 板上的 4 个滑块开关定义。我尝试更改循环顺序但没有成功,但感谢您花时间帮助我。
-
另外,你的意思是把 S9 换成 SA 吗? SA 是我的 4 位输入。我也试了一下。