4位乘8位装配乘法

时间:2015-04-19 01:59:02

标签: assembly multiplication

我在七段显示器上显示四位数时遇到问题。我有以下循环,一切正常,除了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

谢谢你, 朱利

1 个答案:

答案 0 :(得分:0)

我会以这种方式重写代码。旧版本的问题是:

  • SC注册表尚未初始化为00(可能是00开始,但我不想假设它)
  • 将被映射添加到产品SC:SB时,您不仅需要将其添加到SB,还需要将任何结果进位添加到SC

        LOAD    SB, 00
        LOAD    SC, 00            ; <-- Needed to init SC
        LOAD    SF, 08            ; Loop counter
    
    multloop:
        SR0     SA
        JUMP    NC, shiftproduct 
    
        ADD     SB, s9
        ADDCY   SC, 00            ; <-- NEEDED and add C here to SC
    
    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