📄 funcs.asm
字号:
.def _ImageSub
.def _PixLineFilterW
.def _ImageSub1
_ImageSub1:
MVKL 000000FFH, A2
MVKL 000000FFH, A2
MV A2,B2 ; in A2 and B2 are mask value
MVKL 6540H, A1
MVKH 6540H, A1
LOOP: LDW .D1 *A4++, A8
LDW .D2 *B4++, B8
NOP 4
AND .L1 A8, A2, A10 ;byte 0
|| AND .L2 B8, B2, B10
|| SHRU .S1 A8, 8, A9
|| SHRU .S2 B8, 8, B9
SUB .L1X A10, B10, A10
ABS .L1 A10, A10
AND .L1 A9, A2, A11 ;byte1
|| AND .L2 B9, B2, B11
|| SHRU .S1 A9, 8, A8
|| SHRU .S2 B9, 8, B8
SUB .L1X A11, B11, A11
ABS .L1 A11, A11
AND .L1 A8, A2, A12 ;byte2
|| AND .L2 B8, B2, B12
|| SHRU .S1 A8, 8, A9
|| SHRU .S2 B8, 8, B9
SUB .L1X A12, B12, A12
ABS .L1 A12, A12
AND .L1 A9, A2, A13 ;byte3
|| AND .L2 B9, B2, B13
|| SHRU .S1 A9, 8, A8
|| SHRU .S2 B9, 8, B8
SUB .L1X A13, B13, A13
ABS .L1 A13, A13
SHL .S1 A11, 8, A11
SHL .S1 A12, 16, A12
|| OR .L1 A10, A11, A10
SHL .S1 A13, 24, A13
|| OR .L1 A10, A12, A10
OR .S1 A10, A13, A10
; STW A10, *A6++
; SUB A1, 1H, A1
[A1] B LOOP
STW A10, *A6++
SUB A1, 1H, A1
NOP 3
B B3
NOP 5
;=============================================================
;子程序名: PixLineFilterW
;功 能: 将二值化的差分图滤波
;输入参数: 要处理的行A首地址,处理结果存放的首地址
;=============================================================
_PixLineFilterW:
STW A0, *--B15
STW A1, *--B15
STW A2, *--B15
STW A5, *--B15
STW A6, *--B15
STW A7, *--B15
STW A9, *--B15
STW A10, *--B15
STW A11, *--B15
STW A12, *--B15
STW A13, *--B15
STW B0, *--B15
STW B1, *--B15
STW B2, *--B15
STW B5, *--B15
STW B6, *--B15
STW B7, *--B15
STW B8, *--B15
STW B9, *--B15
STW B10, *--B15
STW B11, *--B15
STW B12, *--B15
STW B13, *--B15
MVK .S1 88, A1
MVK .S1 0x3FC, A7 ; 0X4FB = 5*0xFF
|| MVK .S2 0, B8
MVK .S1 90, A2
MVK .S1 0xFF, A0
|| MVK .S2 0xFF, B0
MV .L2X A4, B1
|| MVK .S2 90, B2
|| LDW .D1 *A4, A5
LDW .D2 *+B1[B2],B5
NOP 4
LDW .D2 *-B1[B2],B6
NOP 2
ADD .L1 A4, 1, A4
AND .L1 A5, A0, A10
|| AND .L2 B5, B0, B10
|| SHRU .S1 A5, 8, A9
|| SHRU .S2 B5, 8, B9
ADD .L2X B10, A10, B10
|| AND .S2 B6, B0, B2
SHRU .S2 B6, 8, B6
|| ADD .L2 B10, B2, B10
AND .L1 A9, A0, A11
|| AND .L2 B9, B0, B11
|| SHRU .S1 A9, 8, A5
|| SHRU .S2 B9, 8, B5
ADD .L2X B11, A11, B11
|| AND .S2 B6, B0, B2
SHRU .S2 B6, 8, B6
|| ADD .L2 B11, B2, B11
AND .L1 A5, A0, A12
|| AND .L2 B5, B0, B12
|| SHRU .S1 A5, 8, A9
|| SHRU .S2 B5, 8, B9
ADD .L2X B12, A12, B12
|| AND .S2 B6, B0, B2
SHRU .S2 B6, 8, B6
|| ADD .L2 B12, B2, B12
AND .L1 A9, A0, A13
|| AND .L2 B9, B0, B13
|| AND .S2 B6, B0, B2
ADD .L2X B13, A13, B13
ADD .L2 B13, B2, B13
ADD .L2 B8, B10, B8
ADD .S2 B8, B11, B8
|| ADD .L2 B10, B11, B10
CMPGTU .L2X B8, A7, B8
|| ADD .S2 B10, B12, B10
CMPGTU .L2X B10, A7, B10
|| MPY .M2 B8, B0, B8
ADD .L2 B11, B12, B11
MPY .M2 B10, B0, B10
STB .D2 B8, *B4++
|| ADD .S2 B11, B13, B11
STB .D2 B10, *B4++
|| CMPGTU .L2X B11, A7, B11
MPY .M2 B11, B0, B11
MV .L2 B12, B7
STB .D2 B11, *B4++
|| MV .S2 B13, B8
NextPixW:
MV .L2X A4, B1
|| MVK .S2 90, B2
|| LDW .D1 *A4, A5
LDW .D2 *+B1[B2],B5
NOP 4
LDW .D2 *-B1[B2],B6
NOP 2
ADD .L1 A4, 1, A4
AND .L1 A5, A0, A10
|| AND .L2 B5, B0, B10
|| SHRU .S1 A5, 8, A9
|| SHRU .S2 B5, 8, B9
ADD .L2X B10, A10, B10
|| AND .S2 B6, B0, B2
SHRU .S2 B6, 8, B6
|| ADD .L2 B10, B2, B10
AND .L1 A9, A0, A11
|| AND .L2 B9, B0, B11
|| SHRU .S1 A9, 8, A5
|| SHRU .S2 B9, 8, B5
ADD .L2X B11, A11, B11
|| AND .S2 B6, B0, B2
SHRU .S2 B6, 8, B6
|| ADD .L2 B11, B2, B11
AND .L1 A5, A0, A12
|| AND .L2 B5, B0, B12
|| SHRU .S1 A5, 8, A9
|| SHRU .S2 B5, 8, B9
ADD .L2X B12, A12, B12
|| AND .S2 B6, B0, B2
SHRU .S2 B6, 8, B6
|| ADD .L2 B12, B2, B12
AND .L1 A9, A0, A13
|| AND .L2 B9, B0, B13
|| AND .S2 B6, B0, B2
ADD .L2X B13, A13, B13
ADD .L2 B13, B2, B13
ADD .L2 B7, B8, B7
ADD .S2 B7, B10, B7
|| ADD .L2 B8, B10, B8
CMPGTU .L2X B7, A7, B7
|| ADD .S2 B8, B11, B8
MPY .M2 B7, B0, B7
|| CMPGTU .L2X B8, A7, B8
ADD .L2 B10, B11, B10
STB .D2 B7, *B4++
|| MPY .M2 B8, B0, B8
ADD .S2 B10, B12, B10
|| ADD .L2 B11, B12, B11
CMPGTU .L2X B10, A7, B10
|| ADD .S2 B11, B13, B11
MPY .M2 B10, B0, B10
|| CMPGTU .L2X B11, A7, B11
STB .D2 B8, *B4++
|| MPY .M2 B11, B0, B11
STB .D2 B10, *B4++
STB .D2 B11, *B4++
[A1] B NextPixW
MV .L2 B12, B7
MV .S2 B13, B8
SUB .L1 A1, 1, A1
NOP 2
LDW *B15++, B13
LDW *B15++, B12
LDW *B15++, B11
LDW *B15++, B10
LDW *B15++, B9
LDW *B15++, B8
LDW *B15++, B7
LDW *B15++, B6
LDW *B15++, B5
LDW *B15++, B2
LDW *B15++, B1
LDW *B15++, B0
LDW *B15++, A13
LDW *B15++, A12
LDW *B15++, A11
LDW *B15++, A10
LDW *B15++, A9
LDW *B15++, A7
LDW *B15++, A6
LDW *B15++, A5
LDW *B15++, A2
LDW *B15++, A1
LDW *B15++, A0
NOP 4
B B3
NOP 5
;==============================================================
;子程序名: _SqTemplate
;功 能: 模板平方和
;输入参数: 模板首地址
;==============================================================
_SqTemplate:
B B3
NOP 5
;=============================================================
;子程序名: PixLineFilterB
;功 能: 将二值化的差分图滤波
;输入参数: 要处理的行A首地址,处理结果存放的首地址
;=============================================================
_PixLineFilterB:
MVK .S1 359, A1
|| MVK .S2 0x3FC, B9 ; 0X4FB = 4*0xFF
MVK .S1 360, A2
|| MVK .S2 360, B2
MVK .S2 0xFF, B10
|| LDB .D1 *A4, A5
MV .L2X A4,B1
LDB .D2 *-B1[B2],B11
MVK .S2 0, B5
MVK .S2 0, B6
LDB .D1 *+A4[A2],A7
ADD .L2 B6, A5, B6
ADD .L2 B6, B11, B6
ADD .L2X B6, A7, B6
NOP
ADD .S2 B5, B6, B8
NextPixB:
ADD .D1 A4, 1, A4
LDB .D1 *A4, A5
MV .L2X A4,B1
LDB .D2 *-B1[B2],B11
MVK .S2 0, B7
ADD .L2X B7, A5, B7
LDB .D1 *+A4[A2],A7
ADD .L2 B7, B11, B7
ADD .L2 B8, B7, B8
MV .S2 B6, B5
[A1] B NextPixB
ADD .L2 B8, A7, B8
ADD .S2 B7, A7, B7
|| CMPGTU .L2 B8, B9, B8
MV .L2 B7, B6
|| MPY .M2 B8, B10, B8
STB .D2 B8, *B4++
ADD .S2 B5, B6, B8
|| SUB .L1 A1, 1, A1
B B3
NOP 5
_ImageSub:
mvkl 0x00006540,a1
mvkh 0x00006540,a1
mvkl 0xff,a3
mvkh 0xff,a3
Loop1: ldw *a4++, a0
ldw *b4++, a5
mvkl 0x4,a2
mvkh 0x4,a2
zero b5
zero b6
Loop2: sub a2,1,a2
shr a0,b6,b0
shr a5,b6,b1
and a3,b0,b0
and a3,b1,b1
[a2] b Loop2
sub b0,b1,b2
abs b2,b2
shl b2,b6,b2
add b5,b2,b5
add b6,8,b6
stw b5,*a6++
sub a1,1,a1
[a1] b Loop1
nop 5
b b3
nop 5
;==============================================================
;子程序名: MutualityW
;功 能: 两块区域做相关
;输入参数: 模板首地址啊A4,区域二首地址B4,模板容量A6,模板宽度B6,
; 区域宽度A8, 返回值1--B8, 返回值2--A10
;==============================================================
_MutualityW:
MV .L1 A6, A1
SHRU .S1 A1, 4, A1
MV .L2 B6, B1
MV .L1 A8, A5
MV .S1X B8, A6
MV .D1 A10, A7
|| MVK .S1 0xFF, A2
|| MVK .S2 0xFF, B2
LOOPX: MVK .S1 0, A0
|| MVK .S2 0, B0
LDW .D1 *A4++, A8
|| LDW .D2 *B4++, B8
NOP 4
AND .L1 A8, A2, A10
|| AND .L2 B8, B2, B10
|| SHRU .S1 A8, 8, A9
|| SHRU .S2 B8, 8, B9
MPYU .M1X A10, B10, A10
|| MPYU .M2 B10, B10, B5
AND .L1 A9, A2, A11
|| AND .L2 B9, B2, B11
|| SHRU .S1 A9, 8, A8
|| SHRU .S2 B9, 8, B8
MPYU .M1X A11, B11, A11
|| MPYU .M2 B11, B11, B6
|| ADD .L1 A0, A10, A0
|| ADD .L2 B0, B5, B0
AND .L1 A8, A2, A12
|| AND .L2 B8, B2, B12
|| SHRU .S1 A8, 8, A9
|| SHRU .S2 B8, 8, B9
MPYU .M1X A12, B12, A12
|| MPYU .M2 B12, B12, B7
|| ADD .L1 A0, A11, A0
|| ADD .L2 B0, B6, B0
AND .L1 A9, A2, A13
|| AND .L2 B9, B2, B13
|| SHRU .S1 A9, 8, A8
|| SHRU .S2 B9, 8, B8
MPYU .M1X A13, B13, A13
|| MPYU .M2 B13, B13, B5
|| ADD .L1 A0, A12, A0
|| ADD .L2 B0, B7, B0
[A1] B LOOPX
ADD .L1 A0, A13, A0
ADD .L2 B0, B5, B0
SUB .L1 A1, 1, A1
NOP 2
STW .D1 A0, *A6
MV .S1X B0, A0
STW .D1 A0, *A7
B B3
NOP 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -