汇编语言程序,用于计算两个系列的乘积之和:
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 :(得分:0)
dec cx
shl cx,1
jnz label
CX
从10开始,变为9,18,跳跃
下一循环:18,17,34,跳跃
下一循环:34,33,66,跳转
下一循环:66,65,130,跳
现在看问题了吗?
提示:LOOP
命令递减CX
并跳转,如果不是零......
答案 1 :(得分:0)
我在这里看到了很多问题:
cx
两次,在函数中设置一次。这不会导致实际问题,但它是无用的。ax
加载dx
和 [bx+si]
。据推测,这些应该来自个人列表s1
和s2
,因此您需要另一种方式(注册)来跟踪其他列表。shl cx,1
不是必需的 - 它基本上会加倍cx
,这意味着前面的dec cx
对于接近于零不会有太大帮助: - )