pic_convert.asm

来自「bf533平台图像采集程序」· 汇编 代码 · 共 178 行

ASM
178
字号

.global _convert2d1;
.global _convert2cif;

.section L1_code;

//convert2d1(s, y, u, v, WIDTH, EDGED_WIDTH*2, line_width);
_convert2d1:
	link 0;
	[--sp] = r4;
	[--sp] = p5;
	
	l0 = 0;
	l1 = 0;
	l2 = 0;
	l3 = 0;
	i0 = r0;
	p5 = r0;
	p1 = r0;
	i1 = r1;
	p2 = r1;
	i2 = r2;
	r0 = [fp+20]; //v
	i3 = r0;
	p0 = [fp+24]; //WIDTH
	
	p0 = p0 >> 2; //720/4 = 180
	
	lsetup(ls0, le0) lc0 = p0 >> 1; //90
	ls0:
		flushinv [p5++];
		ssync;
		r0 = [i0++];	
		r1 = [i0++];
		r3 = bytepack(r0, r1); //vuvu
		r0 = r0 >> 8;
		r1 = r1 >> 8;
		r0 = bytepack(r0, r1); //yyyy
		[i1++] = r0;
		
		r0 = [i0++];	
		r1 = [i0++];
		r2 = bytepack(r0, r1); //vuvu
		r0 = r0 >> 8;
		r1 = r1 >> 8;
		r0 = bytepack(r0, r1); //yyyy
		[i1++] = r0;			
		r0 = bytepack(r3, r2); //vuvu
		[i3++] = r0; //dest vvvv
		r2 = r2 >> 8;
		r3 = r3 >> 8;
		r0 = bytepack(r3, r2); 	
	le0:	[i2++] = r0; //dest uuuu
	
	r0 = [fp+32]; //line_width
	r1 = p1; //source
	r0 = r0 + r1;
	i0 = r0;
	p5 = r0;
	
	r0 = [fp+28];
	r1 = p2;
	r0 = r0 + r1;
	i1 = r0;
	
	lsetup(ls1, le1) lc0 = p0 >> 1;
	ls1:
		flushinv [p5++];
		ssync;
		r0 = [i0++];
		r0 >>= 8;
		r1 = [i0++];
		r1 >>= 8;
		r0 = bytepack(r0, r1);
		[i1++] = r0;
		
		r0 = [i0++];
		r0 >>= 8;
		r1 = [i0++];
		r1 >>= 8;
		r0 = bytepack(r0, r1);
	le1: [i1++] = r0;
	
	p5 = [sp++];
	r4 = [sp++];
	unlink;
_convert2d1.end:
	rts;
	

//convert2cif(s, y, u, v, WIDTH, EDGED_WIDTH, line_width);
_convert2cif:
	link 0;
	[--sp] = r4;
	
	l0 = 0;
	l1 = 0;
	l2 = 0;
	l3 = 0;
	i0 = r0;
	p1 = r0;
	i1 = r1;
	p2 = r1;
	i2 = r2;
	r0 = [fp+20]; //v
	i3 = r0;
	p0 = [fp+24]; //WIDTH
	
	p0 = p0 >> 2; //352/4 = 88
	
	lsetup(ls2, le2) lc0 = p0 >> 1;
	ls2:
		r0 = [i0++];	
		r1 = [i0++];
		r2 = [i0++];
		r3 = bytepack(r0, r2); //vuvu
		r0 = r0 >> 8;
		r1 = r1 >> 8;
		r0 = bytepack(r0, r1); //yyyy
		r1 = [i0++];
		r2 = r2 >> 8;
		r1 = r1 >> 8;
		r1 = bytepack(r2, r1); //yyyy
		r0 = bytepack(r0, r1); //dest yyyy
		[i1++] = r0;
		
		r0 = [i0++];	
		r1 = [i0++];
		r2 = [i0++];
		r4 = bytepack(r0, r2); //vuvu
		r0 = r0 >> 8;
		r1 = r1 >> 8;
		r0 = bytepack(r0, r1); //yyyy
		r1 = [i0++];
		r2 = r2 >> 8;
		r1 = r1 >> 8;
		r1 = bytepack(r2, r1); //yyyy
		r0 = bytepack(r0, r1); //dest yyyy
		[i1++] = r0;
		
		r0 = bytepack(r3, r4);
		[i3++] = r0; //dest vvvv
		r3 >>= 8;
		r4 >>= 8;
		r0 = bytepack(r3, r4);
	le2:	[i2++] = r0; //dest uuuu
	
	r0 = [fp+32]; //line_width
	r1 = p1; //source
	r0 = r0 + r1;
	i0 = r0;
	
	r0 = [fp+28];
	r1 = p2;
	r0 = r0 + r1;
	i1 = r0;
	
	lsetup(ls3, le3) lc0 = p0;
	ls3:
		r0 = [i0++];
		r0 >>= 8;
		r1 = [i0++];
		r1 >>= 8;
		r0 = bytepack(r0, r1);
		r1 = [i0++];
		r1 >>= 8;
		r2 = [i0++];
		r2 >>= 8;
		r1 = bytepack(r1, r2);
		r0 = bytepack(r0, r1);
	le3: [i1++] = r0;
	
	r4 = [sp++];
	unlink;
_convert2cif.end:
	rts;
		

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?