我目前正在尝试使用以下公式获得系列的总和:
((endNum * (endNum + 1) / 2) - ((startNum * (startNum - 1) / 2)
第一部分似乎工作正常,但是当我进入第二部分时,它给了我一些问题。
这是我正在做的事情:
; Formula and testing numbers
; -----------------------------
;((x (x+1) / 2) - ((y (y-1) /2)
;
; - x = 8
; - y = -2
; -----------------------------
ReadInt WORD[y] ; read ending integer from user (8)
ReadInt WORD[x] ; read starting integer from user (-2)
; ((x * (x + 1) / 2)
mov AX, [x]
mov BX, [x]
add BX, 1
mul BL
shr AX, 1
mov [x], AX
; ((y * (y - 1) / 2)
mov AX, [y] ; -2
mov BX, [y] ; -2
sub BX, 1 ; -3
mul BL ; <-- comes out with 1112 or some odd large number??
shr AX, 1
sub [x], AX
我不确定问题是什么,但是当它乘以-2
和时似乎会发生-3
。
有人能指出我在哪里犯错吗?
编辑
意味着要尽快编辑它,因为我只处理无符号数字,我不得不更改我的算法以循环遍历每个数字并添加它们,而不是尝试使用公式。我最初想使用该公式,因为我相信它比循环更有效。