2015-04-19 241 views
0

我在七段顯示器上顯示四位數字時出現問題。我有以下循環,除MSB中的顯示外,一切正常。我知道這是因爲輸入S9只有4位,所以當我乘以SA(這是七段顯示器的當前值)時,結果只給出了12位,最後一位保持爲0,即使當我保持乘以其他數字溢出到下一位的位置。所以我不知道如何在不改變產品的情況下使它成爲四位數字。請參閱下面的示例,並在顯示屏上顯示結果。 ˚F次F給出我00E1 E1次F給出我0D2F D2F次F給出我02C1(那裏應該已經在MSB一個數字)4位乘以8位彙編乘法

我的代碼如下:

 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 

謝謝你, Julius

+1

不知道什麼CPU日是爲了,還是僅僅是概念上的,但是'SRA'是否通過進位輪換?另外(這不是你問題的原因),你可能應該在開始的時候有'LOAD SC,00'。作爲一種效率,當SA'變爲零時,您可以終止您的循環。 'SF'中不需要循環計數器。如果你有一個「增加進位」指令,我會用4位數作爲乘數而不是8位數,這可能是循環迭代次數的一半。 – lurker

+0

我認爲你的循環在完成時也會多次進行產品左移。根據你的循環邏輯,'SRA SB'和'SRA SC'在你決定是否退出循環之前完成。如果是這樣的話,你總會看到一款產品(儘管在你的聲明中,你說的是你獲得了正確的結果)。在決定是否退出循環之前,你可能想要做一次輪班*。 – lurker

+0

嗨Lurker,謝謝你的迴應。是的,SRA通過所有位進行旋轉,包括進位。 – Julius

回答

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 
    
+0

謝謝。我會試一試。 – Julius

+0

@Julius我剛剛意識到我的執行過程中出現了問題。請看我更新的答案。你的實現比我想象的更接近正確,因爲我沒有意識到它是反向運行標準乘法程序。因此需要循環計數器。 – lurker

+0

我發現我的問題,我需要再次乘以第二個字節,並將響應添加到數百個第一個字節。謝謝你的幫助。 – Julius