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
[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
Post a Comment