该计划必须计算以下内容:
<{1>}数组中的,每个索引的值都为VP
在Multiplying V1[INDEX] WITH V2[INDEX]
数组中,程序VPROD
所有数组值ADDS
示例:
VP
问题是当结果大于16位(一个单词)时,不会给出正确的结果。但是当结果小于16位时,它会给出正确的结果。
我想到了 Carry 并修复了我的代码,但它仍然给我带来了糟糕的结果。
我的代码:
VP = { V1[0]*V2[0] , V1[1]*V2[1] , V1[2]*V2[2] , V1[3]*V2[3] ,V1[4]*V2[4] }
VPROD = { VP[0] + VP[1] + VP[2] + VP[3] + VP[4] }
答案 0 :(得分:0)
由于您从乘法中获得32位结果,因此您应该为vp
数组的每个元素使用4个字节。您将需要使用单独的索引,当然将高位字存储在偏移+2而不是+1。对于求和部分,您应该加上低位和高位词。
乘法的固定代码可能如下所示:
MOV DI, 0
LOVP: MOV AX,v1[si]
MUL v2[si]
MOV vp[di],AX
MOV vp[di+2],DX
ADD SI,2
ADD DI,4
LOOP LOVP
我相信您可以使用ADD
和ADC
自行进行总结。
<强>更新强>:
由于您的帖子说您要对vp
数组求和,我不明白为什么您希望结果出现在另一个数组(vprod
)中。总和是标量值,执行以下操作:
MOV SI, 0
MOV AX, 0
MOV DX, 0
LOVPROD: ADD AX,vp[SI]
ADC DX,vp[SI+2]
ADD SI,4
LOOP LOVPROD
结果将在DX
:AX
另外,要使LOOP
正常工作,您应该将迭代次数放入CX
,而不是0
。