Hay 30 números sin signo en la RAM del microcontrolador a partir del programa LIST para encontrar el número máximo y almacenarlo en GRANDE.
El diseño del programa ha sido completamente depurado. Solo necesita modificar la dirección inicial, la cantidad de datos y la dirección máxima para lograr sus requisitos. Sin embargo, debe prestar atención aquí. "pila" aquí. "Dirección", cuando modifique la dirección anterior, intente no configurarla después de la "dirección de pila" (por supuesto, también puede restablecer la "dirección de pila" para organizar algún diseño de memoria), además Estoy haciendo este programa después de que su maestro se opusiera. Si se publica dadas las circunstancias, LZ use 30 puntos de recompensa como compensación personal.
El programa es el siguiente:
LIST EQU 30H; Supongamos que los datos comparados comienzan en la dirección 30H
TOTAL EQU 10;Número total de datos
BIG EQU 5FH;Dirección máxima de datos
ORG 0000H
AJMP MAIN
ORG 0040H
MAIN:
// MOV 30H,#2
// MOV 31H,#1
// MOV 32H,#0
// MOV 33H,#7
// MOV 34H, #4
// MOV 35H, #9
// MOV 36H, #13
// MOV 37H, #23
// MOV 38H, #34
// MOV 39H, #56
//Yo soy solo lo uso para depurar
p>MOV SP,#60H
ACALL Find_Max ;Llamada a función, la función que solicitaste se completa con mi función personalizada
SJMP $ ;Se puede hacer después de completar la función. No haré ningún otro procesamiento aquí por ahora
Find_Max:
PUSH PSW
MOV R2,#( TOTAL-1) ;R2 almacena el número de comparaciones
MOV R0,#LIST
MOV BIG,@R0 ;Asignar valor inicial
MOV R0,# BIG ;R0 apunta a BIG
MOV R1,#(LIST+1) ;R1 apunta a datos de comparación
BUCLE:
MOV A,@R0 ; A sirve como comparador temporal
CLR CY
SUBB A,@R1
JC SAVE_BIGGER
AJMP SAVE_END
SAVE_BIGGER:
MOV BIG ,@R1
SAVE_END:
INC R1
DJNZ R2, LOOP ;Loop
POP PSW
RET
END