:私は第二部に到達したときシリーズの合計(x86アセンブリ)を計算する際に私のアルゴリズムに何が問題になっていますか?私は現在、次の式を使用して、一連の合計を取得しようとしている
((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
私は符号なしの数字を扱っていますから、私は、各番号をループに私のアルゴリズムを変更し、むしろ数式を使用しようとするよりも、それらを追加する必要がありました。もともと私はそれがループよりも効率的であると信じて以来、この公式を使用したかったのです。私が見ている
8ビットレジスタのみを使用して乗算し、AHの上位8ビットをそのままにします。それらは最も以前から負数で詰め込まれている可能性が高いので、元の2の補数を無効なものに破棄しました。 –
Btw、私はそれを強調することはできません、デバッガを使用して、どこがうまくいかないかを見てください。 –
@MarcB返信いただきありがとうございます、私はあなたが正しいと思います。 – StartingGroovy