Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente del sitio web de Vj

Código fuente del sitio web de Vj

Esta es una subrutina de operación de varios bytes en mi propio proyecto.

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

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"

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

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>

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)

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)

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

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>

RLC A

MOV 34H A

MOV A, 33H

RLC A

MOV 33H, A

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

;