現在、次の式を使用してシリーズの合計を取得しようとしています。
((endNum * (endNum + 1) / 2) - ((startNum * (startNum - 1) / 2)
最初の部分は正しく動作しているように見えますが、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
.
誰かが私が間違いを犯している場所を指摘できますか?
EDIT
これをもっと早く編集することを意味しました。私は符号なしの数字しか扱っていないので、数式を使用するのではなく、各数字をループして追加するようにアルゴリズムを変更する必要がありました。ループよりも効率的であると信じているので、私はもともとこの式を使用したいと考えていました。