Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/31/03 06:01
Read: times


 
#42598 - RE: sorting
Responding to: ???'s previous message
If you just had 3 16-bit variables you could sort them with C code as follows:
unsigned int var1=0x44;
unsigned int var2=0x34;
unsigned int var3=0x05;

void sort3(void)
{
	unsigned int temp;

	if(var1 > var2)
	{
		temp=var1;
		var1=var2;
		var2=temp;
	}
	if(var2 > var3)
	{
		temp=var2;
		var2=var3;
		var3=temp;
	}
	if(var1 > var2)
	{
		temp=var1;
		var1=var2;
		var2=temp;
	}
}


Equivalent assembly language to do the same thing looks like this......

; test.SRC generated from: test.c
; COMPILER INVOKED BY:
;        C:KeilC51BINc51.exe test.c DB OE


NAME	TEST

?PR?sort3?TEST       SEGMENT CODE 
?C_INITSEG           SEGMENT CODE 
?DT?TEST             SEGMENT DATA 
	PUBLIC	var3
	PUBLIC	var2
	PUBLIC	var1
	PUBLIC	sort3

	RSEG  ?DT?TEST
           var1:   DS   2
           var2:   DS   2
           var3:   DS   2

	RSEG  ?C_INITSEG
	DB	002H
	DB	var1
	DW	00044H

	DB	002H
	DB	var2
	DW	00034H

	DB	002H
	DB	var3
	DW	00005H

; #pragma SRC
; 
; unsigned int var1=0x44;
; unsigned int var2=0x34;
; unsigned int var3=0x05;
; 
; void sort3(void)

	RSEG  ?PR?sort3?TEST
sort3:
	USING	0
			; SOURCE LINE # 7
;---- Variable 'temp?040' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 8
; 	unsigned int temp;
; 
; 	if(var1 > var2)
			; SOURCE LINE # 11
	SETB 	C
	MOV  	A,var1+01H
	SUBB 	A,var2+01H
	MOV  	A,var1
	SUBB 	A,var2
	JC   	?C0001
; 	{
			; SOURCE LINE # 12
; 		temp=var1;
			; SOURCE LINE # 13
	MOV  	R6,var1
	MOV  	R7,var1+01H
; 		var1=var2;
			; SOURCE LINE # 14
	MOV  	var1,var2
	MOV  	var1+01H,var2+01H
; 		var2=temp;
			; SOURCE LINE # 15
	MOV  	var2,R6
	MOV  	var2+01H,R7
; 	}
			; SOURCE LINE # 16
?C0001:
; 	if(var2 > var3)
			; SOURCE LINE # 17
	SETB 	C
	MOV  	A,var2+01H
	SUBB 	A,var3+01H
	MOV  	A,var2
	SUBB 	A,var3
	JC   	?C0002
; 	{
			; SOURCE LINE # 18
; 		temp=var2;
			; SOURCE LINE # 19
	MOV  	R6,var2
	MOV  	R7,var2+01H
; 		var2=var3;
			; SOURCE LINE # 20
	MOV  	var2,var3
	MOV  	var2+01H,var3+01H
; 		var3=temp;
			; SOURCE LINE # 21
	MOV  	var3,R6
	MOV  	var3+01H,R7
; 	}
			; SOURCE LINE # 22
?C0002:
; 	if(var1 > var2)
			; SOURCE LINE # 23
	SETB 	C
	MOV  	A,var1+01H
	SUBB 	A,var2+01H
	MOV  	A,var1
	SUBB 	A,var2
	JC   	?C0004
; 	{
			; SOURCE LINE # 24
; 		temp=var1;
			; SOURCE LINE # 25
	MOV  	R6,var1
	MOV  	R7,var1+01H
; 		var1=var2;
			; SOURCE LINE # 26
	MOV  	var1,var2
	MOV  	var1+01H,var2+01H
; 		var2=temp;
			; SOURCE LINE # 27
	MOV  	var2,R6
	MOV  	var2+01H,R7
; 	}
			; SOURCE LINE # 28
; }
			; SOURCE LINE # 29
?C0004:
	RET  	
; END OF sort3

	END


Michael Karas



List of 3 messages in thread
TopicAuthorDate
sorting            01/01/70 00:00      
   RE: sorting            01/01/70 00:00      
   RE: sorting            01/01/70 00:00      

Back to Subject List