| ??? 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 |
| Topic | Author | Date |
| sorting | 01/01/70 00:00 | |
| RE: sorting | 01/01/70 00:00 | |
RE: sorting | 01/01/70 00:00 |



