📄 almul.s
字号:
|J. Test 1/81
|addressed signed long multiply routine: *a = *a * b
.globl almul
.text
almul: link a6,#0
moveml #0x3800,sp@- |save d2,d3,d4
movl #1,d4 |sign of result
movl a6@(8),a0 |a0 = pointer to a
movl a0@,d2 |d2 = a
bge 1$
negl d2
negl d4
1$: movl a6@(12),d3 |d3 = b
bge 2$
negl d3
negl d4
2$: clrl d0
movw d2,d0 |d0 = alo, unsigned
mulu d3,d0 |d0 = blo*alo, unsigned
movw d2,d1 |d1 = alo
swap d2 |swap alo-ahi
mulu d3,d2 |d2 = blo*ahi, unsigned
swap d3 |swap blo-bhi
mulu d3,d1 |d1 = bhi*alo, unsigned
addl d2,d1 |d1 = (ahi*blo + alo*bhi)
swap d1 |d1 =
clrw d1 | (ahi*blo + alo*bhi)*(2**16)
addl d1,d0 |d0 = alo*blo + (ahi*blo + alo*bhi)*(2**16)
tstl d4 |sign of result
bge 3$
negl d0
3$: movl d0,a0@ |store result via pointer
moveml sp@+,#0x1C |restore d2,d3,d4
unlk a6
rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -