2012-02-09 110 views
-1

下面是我寫的乘以2,8位數的程序。我的一個朋友告訴我這個程序是不正確的。我無法驗證它,所以我想驗證它。我剛開始學習彙編編程。以下程序使用大量寄存器。程序正確嗎?

LDA C001H 
MOV B,A 
LDA C002H 
MOV D,A 
MOV C,0H 
CMP C 
JZ ZRESULT // CHECKED FOR C002 
MOV A,B 
CMP C 
JZ ZRESULT // CHECKED FOR COO1 

LOOP : ADD A 
     MOV E,A 
     LDA 01H 
     DEC D 
     CMP D 
     JZ ANSWER 
     JNZ LOOP 



ZRESULT : LDA 0H 
      STA 2500H 
      OUT PORT1 

ANSWER : MOV A,E 
      STA 2500H 
      OUT PORT1 

該程序是否正確?如果不是,請告訴它的更正。

+0

如果您嘗試將一堆數字相乘並檢查結果,您可以對程序更有信心:特別檢查一個或多個數字是否爲「0」,「1」,「2」,「3」兩個數字,一個大於或小於兩個冪的數字,以及強制溢出的輸入。 – sarnold 2012-02-09 04:16:04

回答

0

問題是,乘以兩個8位數可能會給你一個16位的結果。不過,您只能提供8位結果。

您需要對ADD A操作的進位結果進行一些操作。

+0

我該怎麼辦? – 2012-02-09 05:19:31

0

您將需要檢測加法循環中的溢出。一個天真的方法是檢查添加後結果是否下降。以20 * 13爲例。 20 * 12會在註冊中給240,但是加上20就不會得到260,你會得到4(260%256)。

更好的方法是檢查條件寄存器中的進位標誌。