64 bit multiplication introduction to assembly language

;multiplication 64bit nums

[org 0x0100]
mov di, 0
mov si, 64

mov ax, num2
mov ax, ans

mov bx, [num1]
mov ax, [num1+2]
mov dx, [num1+4]
mov cx, [num1+6]

loop1:
;right shifting num2
shr word[num2+2], 1
rcr word[num2+0], 1
rcr word[num2+6], 1
rcr word[num2+4], 1
jnc skip

jmp addans
addansback:

skip:

jmp leftshiftingans
leftshiftingansback:

dec si
cmp si, 0
jne loop1
jmp exit

addans:
add [ans+12], dx
adc [ans+14], cx
adc [ans+8],  bx
adc [ans+10], ax
adc [ans+4],  di
jmp addansback


leftshiftingans:
shr word[ans+12], 1
rcr word[ans+14], 1
rcr word[ans+08], 1
rcr word[ans+10], 1
rcr word[ans+04], 1
rcr word[ans+06], 1
rcr word[ans+00], 1
rcr word[ans+02], 1
jmp leftshiftingansback


exit:
mov ax, 0x4c00
int 21h

num1: dd 0x12345678, 0xabcdef09
num2: dd 0x12345678, 0xabcdef09
ans: dd 0x00000000, 0x00000000, 0x00000000, 0x00000000

Comments

Popular Posts