Código fuente del sitio web de Vj
Hay suma, división, resta y multiplicación. Hagamos una analogía más simple.
Las precauciones están escritas detalladamente, y también están marcadas las direcciones de entrada y salida.
;Subrutina de adición de datos
;Lleva 11, 13, 15. 12, 14 y 16 son los resultados de la suma, que son los 8 bits inferiores, los 8 bits medios y los 8 bits altos respectivamente.
;vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
ADDP: MOV 11H, #00H
MOV 12H, #00H
MOV R0, #20H<-" 20 " posición inicial
MOV 12H, @R0
Bucle 1: MOV A, R0
Agregar uno, #03H
MOV R1 , A
MOV A, 12H
Agregar uno, @R1
JNB PSW.7, SI1
INC 11H
Silicio 1: MOV 12H
MOV A, R1
MOV R0, A
CJNE R0, #4DH, bucle 1;& lt- "4d "Variable de terminación, diseño Yang
MOV A, #00H
MOV 13H, #00H
MOV 14H, #00H
MOV R0, # 21H; <-"21" posición inicial
MOV 14H, @R0
MOV A, 14H
Agregar uno, 11H p>
MOV 14H, A
Lazo 2: MOV A, R0
Agregar uno, #03H
MOV R1, A
MOV A, 14H
Agregue uno, @R1
JNB PSW.7, SI2
INC 13H
SI2: MOV 14H
MOV A, R1
MOV R0, A
CJNE R0, #4EH, LOOP2<-variable de terminación "4e"
MOV A, #00H
MOV 15H, #00H
MOV 16H, #00H
MOV R0, # 22H<- posición inicial "22" p>
MOV 15H, @R0
MOV A, 16H
Agregar uno, 13H
MOV 16H, A
El tercer círculo: MOV A, R0
Agregar uno, #03H
MOV R1, A
MOV A, 16H
Agregar uno, @R1
JNB PSW.7, SI3
INC 15H
MOV 16H, A
MOV A, R1 p>
MOV R0, A
CJNE R0, #4FH, LOOP3<-"4f" termina la variable de posición personalizada,
MOV A, #00H
;
;Subrutina de división
; Admite dividendos de 32 bits, divisores de 24 bits y divisiones con longitud de bits arbitraria.
; El divisor de frecuencia debe preestablecerse de acuerdo con el número de grupos de sincronización y acumulación * * * *. ¡Este valor también se puede ajustar * * * ajustando la precisión de depuración! ! ! ! ! ! ! !
;17H, 18H y 19H son los puertos de entrada del divisor, y 32H, 33H, 34H y 35H son los resultados de la operación.
; VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
Setdiv: MOV P1,#0ffh
JNB P1.1, Meas _ F; mediciones de velocidad, establezca 0 (bajo) para mediciones de frecuencia.
MEAS_V: MOV R2, #11111111B; * * *Medición de velocidad* * * *
MOV R3, #11101000B Bonificación R2-R5, transferida a 22H-25H para trato de reemplazo.
MOV R4, #00100101B; * *El divisor es un valor fijo y se conoce el número de ceros a la izquierda.
MOV R5, # 00001011B; Sea y el número de primeros ceros del dividendo, cuente el número de primeros ceros del dividendo como x(R0) y el número de bucles posteriores sea (32). -y)-(24-x) = (8-y)+x.
Informe JMP Star
MEAS_F: MOV R2, #00111010B; * * * Medición de frecuencia * * * Diseño Yang
MOV R3, #01100110B Bonus R2; -R5, transferido a 22H-25H para procesamiento de reemplazo.
MOV R4, #00111110B; * *El divisor es un valor fijo y se conoce el número de ceros a la izquierda.
MOV R5, # 10000111B; Sea y el número de primeros ceros del dividendo, cuente el número de primeros ceros del dividendo como x(R0) y el número de bucles posteriores sea (32). -y)-(24-x) = (8-y)+x.
JMP Estrella
MOV 22H, R2
MOV 23H, R3
R4 MOV·24H
MOV 25H, R5
MOV 17H, 16H; divisor 17H-19H, carga los resultados acumulados de 12H, 14H y 16H.
MOV 18H, 14H
MOV 19H, 12H
MOV 32H, # 00H Los bits de salida de resultado 32H-35H se establecen inicialmente en 0 mediante el diseño de Yang YF. .
MOV 33H, #00H
MOV 34H, #00H
MOV 35H, #00H
MOV R0, #00H p> p>
MOV R1, #00H
MOV 10H, #00H
CHECKFRONT: CLR C
MOV A, 17H; divisor alto Hay espacios 0.
RLC A
JNC MOVFRONT
Recuento de ciclos JMP
MOVFRONT: Empresa R0
Divisor CLR C; Avanza cuando la brecha alta sea 0.
MOV A, 19H; 1)
RLC A
MOV 19H, A
MOV A, 18H) p>
RLC A
MOV 18H, A
MOV A, 17H 3)
RLC A
MOV 17H; , A
Punto de control JMP
Recuento de bucles: MOV A, # 09H
Agregar A, R0
MOV 10H, A; número de ciclo R0
Asistente del juez: MOV·PSW, #00H
MOV A, R1
CJNE A, 10H, JMP0
Resultados JMP
JMP0: MOV A, 22H
MOV C, ACC.7******!! ! !
MOV F0, C
CLR C;******!! ! !
SUBB A, 17H
JC CANOTSUB inundando
JNZ jmp 1 cuando ACC! =#00H luego salta
MOV A, 23H
CLR C
SUBB A, 18H
JC CANOTSUB
jmp 1:JNZ jmp 2; cuando ACC! =#00H luego salta
24H MOV
CLR C
SUBB A, 19H
JC CANOTSUB
JMP2: División JMP
Kanosubu: JNB F0, TURN1
JB F0, MOVDR
División JMP
Subparte: CLR C
MOV A, 25H
JNB PSW.1, JMPSP1
JB ACC.7, JMPSP1
Conjunto SETB 7
MOV A, 19H
Empresa A
MOV 19H, A
jmpsp 1:24H MOV A
SUBB A, 19H
MOV·24H
MOV A, 23H
SUBB A, 18H
MOV 23H, A
MOV A, 22H
SUBB A, 17H
MOV 22H, A
ACALL SETCY_1
JB B .0, el MOVDL El divisor se restaura desplazándose condicionalmente hacia la derecha y luego hacia la izquierda.
Panel de jueces LJMP
MOVDR: SETB B.0
CLR C; el divisor se mueve una posición hacia la derecha.
MOV A, 17H; 1)
RRC A
MOV 17H, A
MOV A, 18H) p>
RRC A
MOV 18H, A
MOV A, 19H 3)
RRC A
MOV 19H; , A
MOV PSW.1, C; al final del divisor, elimínelo y guárdelo temporalmente en F1.
Configuración de llamadas_0
División JMP
MOVDL: MOV C, PSW.1
MOV A, 19H
RLC A
MOV 19H, A
MOV A, 18H 2)
RLC A
MOV 18H, A
MOV A, 17H; 3)
RLC A
MOV 17H, A
CLR B.0
SETB B.1
Juez JMP
TURN1: Reloj C
MOV A, 25H1)
RLC A p>
MOV 25H, A
MOV A, 24H 2)
RLC A
MOV·24H
MOV A, 23H3)
RLC A
MOV 23H, A
MOV A, 22H4)
RLC A
p >MOV 22H, A
JB B.1, JMPCALLSC0
Configuración de llamada_0
JMPCALLSC0: CLR B.1
Juez JMP
SETCY_0: JB B.2, jmpse 1; determina si se establece 1 por primera vez y lo ignora si es así.
INC r 1; Contar número
CLR C; Mover con 0.
MOV A, 35H
RLC A
MOV 35H, A; dirección de salida 32H-35H
MOV A, 34H p>
p>
RLC A
MOV 34H A
MOV A, 33H
RLC A
MOV 33H, A p>
MOV A, 32H
RLC A
MOV 32H, A
CLR C
JMPSE1: CLR B. 2
Remojar en agua para suavizar
SETCY _ 1:INC r 1; repasar el diseño de Yang varias veces
SETB C; mover a la posición 1
MOV A, 35H
RLC A
MOV 35H, A dirección de salida 32H-35H
MOV A; , 34H
RLC A
MOV 34H A
MOV A, 33H
RLC A
MOV 33H , A
MOV A, 32H
RLC A
MOV 32H, A
CLR C
SETB Bahía 2
Inundado Hacer suave
resultado div:; El diseño de Yang no se puede eliminar
;