Смотрите комментарии для нескольких д'Ох:
[org 0x0100]
jmp start
multiplicand: dd 100122,0
multiplier: dd 66015
result: dd 0,0
start:
initialize: mov cl,32 ; multipliers are 32-bit, so 32 iterations, not 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
mov ax, [multiplicand+6] ; forgot this
adc [result+6], ax ; forgot this
decrement: ; shl bl,1 ; bl is 8-bit, but you need to test 32
shr word [multiplier+2],1 ; so, shift multiplier right instead
rcr word [multiplier],1 ; of shifting bl left
shl word [multiplicand],1 ; this is NASM, I'd rather tell
rcl word [multiplicand+2],1 ; the operand size here
rcl word [multiplicand+4],1 ; because it's unclear
rcl word [multiplicand+6],1 ; forgot this
dec cl
jnz checkbit
mov ax, 0x4c00
int 0x21