2013-12-09 25 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没有什么帮助朝着越来越接近零:-)