Я сейчас пытаюсь получить сумму ряда по следующей формуле:
((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
.
Кто-то может указать, где я совершаю ошибку?
EDIT
Мне нужно было отредактировать это раньше, так как я имею дело только с числами без знака, мне пришлось изменить свой алгоритм, чтобы проходить через каждое число и добавлять их, а не пытаться использовать формулу. Изначально я хотел использовать формулу, так как считаю, что она будет более эффективной, чем зацикливание.