2013-12-09 23 views
0

彙編語言編寫的程序計算的兩個系列產品的總和定義爲:解決邏輯錯誤在這個彙編程序

Total = Submission (where i=from 0 to n) S1(i)*S2(i)

其中:

 
S1: DW 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
S2: DW 20, 19, 18, 17, 16, 15, 14, 13, 12, 11 

我的努力:

[org 0x0100] 

jmp start 


s1: dw 1,2,3,4,5,6,7,8,9,10 
s2: dw 20,19,18,17,16,15,14,13,12,11 
total: dw 0 

subroutine: 
     mov si,0 
     mov cx,10 

label: mov ax,[bx+si] 
     mov dx,[bx+si] 
     mul ax 
     add [total],ax 
     add bx,2 
     dec cx 
     shl cx,1 
     jnz label 

     mov cx,[total] 
     ret 

start: mov bx,s1 
     mov dx,s2 
     mov cx,10 
     call subroutine 

     mov ax,0x4c00 
     int 0x21 
+0

提示:檢查您的來源..和乘法器..和計數器。另外一定要儘快讓自己成爲一個調試器或至少一臺顯示器。 – doynax

回答

0
dec cx 
    shl cx,1 
    jnz label 

CX開始爲10,成爲9,圖18,跳
下一個循環:18,17,34,跳
下一個循環:34,33,66,跳
下一個循環:66,65,130,跳

現在看到問題了嗎?

提示:LOOP命令遞減CX,如果不爲零......

0

我看到的一些問題在這裏跳:

  1. 您可以設置cx兩次,第一次調用函數之前,一旦的功能。這不會導致實際問題,但它是有益的。
  2. 您同時加載axdx[bx+si]。據推測,這些應該是從個人名單s1s2所以你需要另一種方式(註冊)來跟蹤另一個列表。
  3. shl cx,1不需要 - 它基本上雙打cx意義的是:以上dec cx沒有什麼幫助朝着越來越接近零:-)