私は割り当ての一部として2つの32ビットの数値を乗算し、結果を64ビットの場所に格納しようとしています。しかし、私の結果は間違っています。それは189F5C9A6(12月で6609553830)である必要があり、一方、AFDデバッガで答えがF6B3A6(DEC、IN 16587802)である理由拡張乗算nasm
[org 0x0100]
jmp start
multiplicand: dd 100122,0
multiplier: dd 66015
result: dd 0,0
start:
initialize: mov cl,16
mov bl,1
checkbit: test bl,[multiplier]
jz decrement
multiply: mov ax, [multiplicand]
add [result],ax
mov ax, [multiplicand+2]
adc [result+2], ax
mov ax, [multiplicand+4]
adc [result+4], ax
decrement: shl bl,1
shl [multiplicand],1
rcl [multiplicand+2],1
rcl [multiplicand+4],1
dec cl
jnz checkbit
mov ax, 0x4c00
int 0x21
私が把握助けてください。私はデバッガを通過したが、コードに間違ったものは見つけられません。
は、あなただけの32ビット×32ビット= 64ビット(I)MULを使用することができませんか?あなたはpre-i80386 CPUでこれを実行していませんか? –
そのためのコースの要件は、今のところ16ビットで作業するために、最後のレッスンで32ビットがカバーされています(下のアプローチからビルドアップ、私は廃止されていることを知っています) –