Está programado para ordenar los números sin signo en 50 unidades consecutivas comenzando con 2040H en orden descendente y almacenarlos en el área de almacenamiento comenzando con 3000H.
La clasificación de datos generalmente requiere dos punteros de datos.
Para fuera del chip, el microcontrolador 51 generalmente solo puede usar un puntero de datos DPTR.
Cuando la cantidad de datos no es grande, los datos se pueden importar al chip, clasificarlos dentro del chip y luego transmitirlos fuera del chip.
El procedimiento es el siguiente:
ORG 0000H
;-------------------- --- -------------Lo siguiente lee los datos fuera del chip en el chip.
MOV DPTR, #2040H
MOV R0, #30H
MOV R7, #50
R_LOOP:
MOVX A, @DPTR
MOV @R0, A
INC DPTR
INC R0
DJNZ R7, R_LOOP
;-------------- ------------ ---------------La siguiente es la parte de clasificación
SORT:; El programa de clasificación más corto y eficiente .
MOV B, #49; En la primera ronda de clasificación, las comparaciones se realizan 7 veces.
S1: MOV R0, #30H; /p>
CLR PSW.5; Borra el bit de bandera "intercambio".
MOV R7, B
S2: MOV A, @R0;
INC R0
CLR C
SUBB A, @R0 ;Resta el último número, cuando antes S3: JNC S4 ;Cuando haya un préstamo, transfiera. MOV A, @R0 ;Tome el siguiente número y prepárese para intercambiar. DEC R0 XCH A, @R0 ;Intercambio al anterior. INC R0 R7, S2 ;Continúa la comparación en esta ronda. JNB PSW .5, FINALIZA ;Si no ha habido intercambio en esta ronda, puede terminar antes. DJNZ B, S1 ;En la próxima ronda, el número de comparaciones es uno menos. FINALIZA: ;-------------------------- ---------Se devuelve lo siguiente hacia el exterior. MOV DPTR, #3000H MOV R0, #30H MOV R7, #50 W_LOOP: MOV A, @R0 MOVX @DPTR, A INC DPTR INC R0 DJNZ R7 , W_LOOP SJMP $ END Referencia: /%D7 %F6%B6%F8%C2%DB%B5 %C0/blog/item/5b465a000951631a1c958333.html