【发布时间】:2014-03-09 01:54:15
【问题描述】:
程序必须计算以下内容:
在VP数组中,每个索引的值为Multiplying V1[INDEX] WITH V2[INDEX]
在VPROD数组中,程序ADDS数组VP的所有值
例子:
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] }
问题在于,当结果大于 16 位(一个单词)时,它不会给出正确的结果。但是当结果小于 16 位时,它会给出正确的结果。
我考虑过 Carry 并修复了我的代码,但它仍然给我带来了不好的结果。
我的代码:
dseg segment
v1 DW 255,5,255,9,21
v2 DW 4,4,255,13,5
vprod DW 10 DUP (0)
vp DW 10 DUP (?)
N DB 5
dseg ends
sseg segment stack
dw 100h dup(?)
sseg ends
cseg segment
assume ds:dseg,cs:cseg,ss:sseg
start: mov ax,dseg
MOV DS,AX
MOV SI,0
MOV CX,0
MOV CL,N
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
MOV CX,0
MOV CL,N
MOV SI,0
MOV DI,0
LOVPROD: MOV AX,vp[SI]
ADD vprod[DI],AX
ADC VPROD[DI+2],0
ADD SI,2
LOOP LOVPROD
SOF:
mov ah,4ch
int 21h
cseg ends
end start
【问题讨论】:
-
你得到什么结果?你有一个可以单步调试代码的调试器吗?
-
@JasonGoemaat 假设我有这两个数组(再看一遍,我更新了值),结果应该是:102EF 我得到的是:03DE
-
你用的是什么汇编程序?在我习惯的语法中,一行应该是 'mov cl,[N]' 而不是 'mov cl,n'
标签: arrays assembly x86 x86-16