⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 splc501sys.asm

📁 2005年全国大学生电子设计竞赛论文集
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		r3-=0x01
		cmp		r3,0x00
		jbe		rectangle_entity_second_2
		goto	rectangle_entity_second_loop	
rectangle_entity_second_2:
		//jbe		rectangle_process2_2
		//goto	rectangle_process2_loop	
//rectangle_process2_2:
		r1=[rectangle_temp_bit]	
		call	rectangle_display_in_a_page		//rectangle_process3
//rectangle_process2_3:
rectangle_entity_second_3:	
		retf	

//////////////////////////////////////////////////////////////////////////////
//rectangle_process3
//rectangle_display_in_a_page
//////////////////////////////////////////////////////////////////////////////
.external		_rectangle_wide_temp
.external		 _rectangle_end_place_temp
//.public	rectangle_process3
//rectangle_process3:		.proc
rectangle_display_in_a_page:
		r1=[_rectangle_wide]
        [_rectangle_wide_temp]=r1
		R1 =[_page];                    
        CALL    F_Set_LCD_Page_No;
		R2 =[_rectangle_end_place]
		[_rectangle_end_place_temp]=r2
        CALL    F_Set_LCD_Column_Addr	
rectangle_process3_loop:  
		call	_Read_Lcd_data
		r3=r3 lsr 0x04
		r3=r3 lsr 0x04
rectangle_process3_loop_cover:	
		r4=[R_GraphicMode_temp]
		r4&=line_mode_bit
    	cmp r4,0x00
		jne	rectangle_process3_loop_erase
		r3|=[rectangle_temp_bit]
rectangle_process3_loop_erase:
		r4&=line_mode_bit
		cmp r4,0x08
		jne	rectangle_process3_loop_solid_xor
		push r1,r2 to [sp]
		r1=[rectangle_temp_bit]
		r1^=0xff
		r3&=r1
		pop  r1,r2 from [sp]	
rectangle_process3_loop_solid_xor:
		r4&=line_mode_bit
		cmp r4,0x30
		jne	rectangle_process3_mod_loop_end
		push r1,r2 to [sp]
		r1=[rectangle_temp_bit]
		r2=r3
		r3&=r1
		r3^=r1
		r1^=0xff
		r2&=r1
		r3|=r2		
		pop  r1,r2 from [sp]
rectangle_process3_mod_loop_end:
		R2 =[_rectangle_end_place_temp]
//		r2+=0x01
//		[_rectangle_end_place_temp]=r2
        CALL    F_Set_LCD_Column_Addr;
        
	
		call	F_Display_point
		
		R2 =[_rectangle_end_place_temp]
		r2+=0x01
		[_rectangle_end_place_temp]=r2
        CALL    F_Set_LCD_Column_Addr;
        
        r1=[_rectangle_wide_temp]
        r1-=0x01
        [_rectangle_wide_temp]=r1
        cmp	r1,0x00
        je	rectangle_process3_1
        goto	rectangle_process3_loop
rectangle_process3_1:
		retf	

//////////////////////////////////////////////////////////////////////////////
//Filename : _FG_Circle
//Function  Description	:display a Circle on lcd 
//Input    : [_ellipse_origin_y][_ellipse_origin_x]
//			 [_ellipse_long_axes][_ellipse_short_axes]
//Mode:
//	DG_CIRCLE_COVER			(default)
//	DG_CIRCLE_ERASE		
//	DG_CIRCLE_HOLLOW	
//	DG_CIRCLE_DOTTED	
//	DG_CIRCLE_HOLLOW_ERASE	
//	DG_CIRCLE_DOTTED_COVER	
//	DG_CIRCLE_SOLID_XOR	
//	DG_CIRCLE_DOTTED_XOR
//usage: FG_Circle(short originx,short originy,short radius)
//Destory  : R1,R2,R3,R4
//////////////////////////////////////////////////////////////////////////////
.public	_FG_Circle
_FG_Circle:
		PUSH BP,BP TO [SP]
		r1=sp
		r2=bp
		[bp_temp]=r2
		r2-=r1
L_Circle_Parameters_three:		
		cmp	r2,0x07
		jne		L_Circle
		call	F_Circle_Parameters_three
L_Circle:		
//		call	_ellipes
		call	ellipes
		pop	bp from	[sp]
		retf
//------------------------------------------------------------------------------
F_Circle_Parameters_three:
		r2=[bp_temp]
		r2-=0x01
		r1=[r2]
		[_ellipse_short_axes]=r1
		[_ellipse_long_axes]=r1
		r2-=0x01
		r1=[r2]
		[_ellipse_origin_y]=r1
		r2-=0x01
		r1=[r2]
		[_ellipse_origin_x]=r1		
		retf
//////////////////////////////////////////////////////////////////////////////
//Filename : _FG_Ellipse
//Function  Description	:display a Ellipse on lcd 
//Input    : [_ellipse_origin_y][_ellipse_origin_x]
//			 [_ellipse_long_axes][_ellipse_short_axes]
//Mode:
//	DG_ELLIPSE_COVER			(default)
//	DG_ELLIPSE_ERASE		
//	DG_ELLIPSE_HOLLOW	
//	DG_ELLIPSE_DOTTED	
//	DG_ELLIPSE_HOLLOW_ERASE	
//	DG_ELLIPSE_DOTTED_COVER	
//	DG_ELLIPSE_SOLID_XOR	
//
//usage: FG_Ellipse(short originx,short originy,short radius)
//Destory  : R1,R2,R3,R4
//////////////////////////////////////////////////////////////////////////////
.public		_FG_Ellipse
_FG_Ellipse:
		PUSH BP,BP TO [SP]
		r1=sp
		r2=bp
		[bp_temp]=r2
		r2-=r1
L_Ellipse_Parameters_four:		
		cmp	r2,0x08
		jne		L_Ellipse
		call	F_Ellipse_Parameters_four		
		call	ellipes
L_Ellipse:	
		pop	bp from	[sp]
		
		retf
//----------------------------------------------------------------------------
F_Ellipse_Parameters_four:
		r2=[bp_temp]
		r2-=0x01
		r1=[r2]
		[_ellipse_short_axes]=r1
		r2-=0x01
		r1=[r2]
		[_ellipse_long_axes]=r1
		r2-=0x01
		r1=[r2]
		[_ellipse_origin_y]=r1
		r2-=0x01
		r1=[r2]
		[_ellipse_origin_x]=r1
		retf
//-----------------------------------------------------------------------------
.external	_ellipse_long_axes
.external	_ellipse_short_axes
.external	_ellipse_x
.external	_ellipse_y
.external	_ellipse_origin_x
.external	_ellipse_origin_y
.external	_ellipse_x_temp							//public
.external	_ellipse_y_temp							//public

.external	_a_square_mul_y_square_l					//a平方乘以y平方
.external	_a_square_mul_y_square_h					//a平方乘以y平方
.external	_b_square_mul_x_square_l					//b平方乘以x平方
.external	_b_square_mul_x_square_h					//b平方乘以x平方
.external	_a_square_mul_b_square_l					//a平方乘以b平方
.external	_a_square_mul_b_square_h					//b平方乘以b平方



.external	_ellipse_reckon_offset_first_l				//椭圆计偏移量X-1,Y-1
.external	_ellipse_reckon_offset_first_h				//椭圆计偏移量X-1,Y-1
.external	_ellipse_reckon_offset_second_l				//椭圆计偏移量
.external	_ellipse_reckon_offset_second_h				//椭圆计偏移量
.external	_ellipse_reckon_offset_sign					//椭圆计偏移量符号

ellipes:		.proc
		r1=0x00
		[_ellipse_x]=r1
		r1=[_ellipse_long_axes]
		[_public_b]=r1
		
		r1=[_ellipse_short_axes]
		[_public_a]=r1
		[_ellipse_y]=r1
		call	_a_square_b_square
		r1=[_public_a_squ_mul_b_squ_l]
		[_a_square_mul_b_square_l]=r1
		[_public_offset_in_a_l]=r1
		r1=[_public_a_squ_mul_b_squ_h]
		[_a_square_mul_b_square_h]=r1
		[_public_offset_in_a_h]=r1
		
		r1=0x00
		r1+=[_ellipse_origin_x]
		[_x]=r1
		r1=[_ellipse_short_axes]
		r1+=[_ellipse_origin_y]
		[_y]=r1
		r1=[sign]
	
		r4=[R_GraphicMode_temp]
		r4&=0x0030
		cmp r4,0x10
		jne	_ellipes_mode_solidcover1
		call  _ellipse_process3
		jmp _ellipes_loop
_ellipes_mode_solidcover1:
		r4&=line_mode_bit
		cmp r4,0x20
		jne	_ellipes_loop
		call  _ellipse_process3	
_ellipes_loop:

		r1=[_ellipse_y]
		cmp r1,0x00
		ja	ellipes_5
		goto	ellipse_end	
ellipse_1_temp:
		goto	ellipse_1
ellipes_5:	
		r1=[_ellipse_y]
		r1-=0x01
		[_ellipse_y_temp]=r1
		r1=[_ellipse_x]	
		r1+=0x01
		[_ellipse_x_temp]=r1
			
		call	_ellipse_process1
		call	_offset
	
		r1=[_public_offset_out_l]
		[_ellipse_reckon_offset_first_l]=r1
		r1=[_public_offset_out_h]
		[_ellipse_reckon_offset_first_h]=r1	
		r1=	[_sign]
		[_ellipse_reckon_offset_sign]=r1
		
		r1=[_ellipse_reckon_offset_sign]
		cmp		r1,0xff
		je		ellipse_1_temp
		//右上点
		r1=[_ellipse_y]
		[_ellipse_y_temp]=r1
		r1=[_ellipse_x]	
		r1+=0x01
		[_ellipse_x_temp]=r1
		call	_ellipse_process1
		call	_offset
		r1=[_public_offset_out_l]
		[_ellipse_reckon_offset_second_l]=r1
		r1=[_public_offset_out_h]
		[_ellipse_reckon_offset_second_h]=r1
	
		call	_ellipse_process2
		r1=0x00
		cmp	r1,[_process_sign]
		je		ellipse_2
		//选择对角点
		r1=[_ellipse_y]								///***
		r1-=0x01
		[_ellipse_y]=r1
		r1+=[_ellipse_origin_y]
		[_y]=r1
		r1=[_ellipse_x]	
		r1+=0x01
		[_ellipse_x]=r1
		r1+=[_ellipse_origin_x]
		[_x]=r1

		r4=[R_GraphicMode_temp]
		r4&=line_mode_bit
		cmp r4,0x10
		jne	_ellipes_mode_solidcover2
		call  _ellipse_process3
		goto	_ellipes_loop
_ellipes_mode_solidcover2:
		r4&=line_mode_bit
		cmp r4,0x20
		jne	ellipse_mode_solidecover3
		call  _ellipse_process3
		goto	_ellipes_loop
ellipse_mode_solidecover3:
		call  _ellipse_process4	
				
		goto	_ellipes_loop		
ellipse_2:
		//选择右上点
		r1=[_ellipse_y]
		[_ellipse_y]=r1
		r1+=[_ellipse_origin_y]
		[_y]=r1
		r1=[_ellipse_x]	
		r1+=0x01
		[_ellipse_x]=r1
		r1+=[_ellipse_origin_x]
		[_x]=r1
//		call  _ellipse_process3

		r4=[R_GraphicMode_temp]
		r4&=line_mode_bit
		cmp r4,0x10
		jne	_ellipes_mode_solidcover4
		call  _ellipse_process3
_ellipes_mode_solidcover4:
		r4&=line_mode_bit
		cmp r4,0x20
		jne	ellipse_mode_solidecover5
		call  _ellipse_process3
ellipse_mode_solidecover5:
		
		goto	_ellipes_loop	
ellipse_1:	
		//左下点
		r1=[_ellipse_y]							///****
		r1-=0x01
		[_ellipse_y_temp]=r1
		r1=[_ellipse_x]	

		[_ellipse_x_temp]=r1
		call	_ellipse_process1
		call	_offset
	
		r1=[_public_offset_out_l]
		[_ellipse_reckon_offset_second_l]=r1
		r1=[_public_offset_out_h]
		[_ellipse_reckon_offset_second_h]=r1	
		call	_ellipse_process2
		r1=0x00
		cmp	r1,[_process_sign]
		je		ellipse_3
		//选择对角点
		r1=[_ellipse_y]
		r1-=0x01
		[_ellipse_y]=r1				///****
		r1+=[_ellipse_origin_y]
		[_y]=r1
		r1=[_ellipse_x]	
		r1+=0x01
		[_ellipse_x]=r1
		r1+=[_ellipse_origin_x]
		[_x]=r1
//		call  _ellipse_process3

		r4=[R_GraphicMode_temp]
		r4&=line_mode_bit
		cmp r4,0x10
		jne	_ellipes_mode_solidcover6
		call  _ellipse_process3
		goto	_ellipes_loop
_ellipes_mode_solidcover6:
		r4&=line_mode_bit
		cmp r4,0x20
		jne	ellipse_mode_solidecover7
		call  _ellipse_process3
		goto	_ellipes_loop
ellipse_mode_solidecover7:
		call  _ellipse_process4
		goto	_ellipes_loop
ellipse_3:
		//左下点
		r1=[_ellipse_y]
		r1-=0x01
		[_ellipse_y]=r1						///***
		r1+=[_ellipse_origin_y]
		[_y]=r1
		r1=[_ellipse_x]	
		[_ellipse_x]=r1
		r1+=[_ellipse_origin_x]
		[_x]=r1
//		call  _ellipse_process3

		r4=[R_GraphicMode_temp]
		r4&=line_mode_bit
		cmp r4,0x10
		jne	_ellipes_mode_solidcover8
		call  _ellipse_process3
		goto	_ellipes_loop
_ellipes_mode_solidcover8:
		r4&=line_mode_bit
		cmp r4,0x20
		jne	ellipse_mode_solidecover9
		call  _ellipse_process3
		goto	_ellipes_loop
ellipse_mode_solidecover9:
		call  _ellipse_process4		
		goto	_ellipes_loop				
ellipse_end:
		retf
		.endp
//////////////////////////////////////////////////////////////////////////////
// ellipse process 1
////////////////////////////////////////////////////////////////////////////// 
.public		_ellipse_process1
_ellipse_process1:	.proc
		r1=[_ellipse_long_axes]
		[_public_b]=r1
		r1=[_ellipse_y_temp]
		[_public_a]=r1
		call	_a_square_b_square
		r1=[_public_a_squ_mul_b_squ_l]
		[_a_square_mul_y_square_l]=r1
		[_public_offset_in_b_l]=r1
		r1=[_public_a_squ_mul_b_squ_h]
		[_a_square_mul_y_square_h]=r1
		[_public_offset_in_b_h]=r1
	
		r1=[_ellipse_short_axes]
		[_public_b]=r1
		r1=[_ellipse_x_temp]
		[_public_a]=r1
		call	_a_square_b_square
		r1=[_public_a_squ_mul_b_squ_l]
		[_b_square_mul_x_square_l]=r1
		[_public_offset_in_c_l]=r1
		r1=[_public_a_squ_mul_b_squ_h]
		[_b_square_mul_x_square_h]=r1
		[_public_offset_in_c_h]=r1
		
		
		retf
		.endp
//////////////////////////////////////////////////////////////////////////////
// ellipse process 2
////////////////////////////////////////////////////////////////////////////// 
.external		_process_sign
.public	_ellipse_process2	
_ellipse_process2:			.proc
		r1=[_ellipse_reckon_offset_first_h]	
		cmp r1,[_ellipse_reckon_offset_second_h]
		jb	_ellipse_process2_1
		//大于等于
		r1=[_ellipse_reckon_offset_first_h]	
		cmp r1,[_ellipse_reckon_offset_second_h]
		je	_ellipse_process2_2
		r1=0x00
		[_process_sign]=r1
		retf
_ellipse_process2_2:
		//高位等于
		r1=[_ellipse_reckon_offset_first_l]	
		cmp r1,[_ellipse_reckon_offset_second_l]
		jb	_ellipse_process2_1
		r1=0x00
		[_process_sign]=r1
		retf		
_ellipse_process2_1:
		//小于
		r1=0xff
		[_process_sign]=r1
		
		retf
		.endp
//////////////////////////////////////////////////////////////////////////////
// ellipse process 3
////////////////////////////////////////////////////////////////////////////// 
.public	_ellipse_process3	
_ellipse_process3:			.proc
		r1=[sign]
		push r1 to [sp]
		call  DISPLAY_A_POINT
		pop  r1 from [sp]
		[sign]=r1
		r1=[_x]
		r1-=[_ellipse_x]
		r1-=[_ellipse_x]
		[_x]=r1
		r1=[sign]
		push r1 to [sp]
		call  DISPLAY_A_POINT
		pop  r1 from [sp]
		[sign]=r1
		r1=[_y]
		r1-=[_ellipse_y]
		r1-=[_ellipse_y]
		[_y]=r1
		r1=[sign]
		push r1 to [sp]
		call  DISPLAY_A_POINT
		pop  r1 from [sp]
		[sign]=r1
		r1=[_x]
		r1+=[_ellipse_x]
		r1+=[_ellipse_x]
		[_x]=r1
		call  DISPLAY_A_POINT
	

⌨️ 快捷键说明

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