“Conocimiento Programación>Lenguajes De Programación

¿Código de programa del microprocesador 8085 para palíndromo?

2013/5/7
Aquí hay un posible programa ensamblador 8085 para verificar si una cadena determinada es un palíndromo:

```asamblea

ORG 100H

; Definir constantes

STRLEN EQU 10

NULL_BYTE EQU 0

; Definir ubicaciones de memoria

ORIGEN:equ 02H

STRING_LOCATION:ecuación 03H

STRING_LENGTH:ecuación 04H

; Definir el uso del registro

A:ecuación 0; Acumulador

B:ecuación 1; memoria indirecta

C:ecuación 2; llevar registro

D:ecuación 3; registro de datos

E:ecuación 4; registro de índice

H:ecuación 5; Registro alto de valor de 16 bits.

L:ecuación 6; Registro bajo de valor de 16 bits.

M:ecuación 7; puntero de pila

P:ecuación 8; Palabra de estado del programa

; Definir banderas

CERO:bit 0,P; bandera cero

SEÑAL:bit 1,P; Bandera de signo

PARIDAD:bit 2,P; bandera de paridad

LLEVAR:bit 4,P; llevar bandera

; El programa principal comienza aquí.

PRINCIPAL:

; Inicializar datos

XCHGH,L; Intercambiar registros H y L

MVI E,STRING_LENGTH; Establezca E en la longitud de la cuerda.

MOV H,E; Copia la longitud a H

MVI L,NULL_BYTE; Inicialice L con el byte nulo

ORIGEN DE LA DEMANDA; Almacene la longitud en la dirección ORIGEN

MVI E,STRLEN; Establezca E en la longitud máxima de la cuerda.

MOV D,STRLEN; Copie la longitud máxima a D

BUCLE1:

XTHL; Intercambie los registros H y L para cargar desde una dirección de memoria

MVIM,0; Inicializar la ubicación de la memoria con un byte nulo

INCR M; Puntero de memoria incremental

DCRE D; Disminuir la longitud de la cuerda

Nueva Zelanda LOOP1; Continúe hasta que la longitud de la cuerda llegue a 0

MVI E,STRLEN; Establezca E en la longitud máxima de la cuerda.

MOV D,STRLEN; Copie la longitud máxima a D

LEER_STRING:

EN 0,A; Leer un carácter del teclado

MOV H,A; Guarda el personaje en H.

XTHL; Intercambie los registros H y L para cargar desde una dirección de memoria

MVIM,0; Inicializar la ubicación de la memoria con un byte nulo

ORIGEN LHLD; Cargar la dirección de origen desde la memoria.

INCR M; Puntero de memoria incremental

MOV L,A; Guarda el personaje en L.

ORIGEN DE LA DEMANDA; Almacenar la dirección del siguiente carácter en la memoria.

DCRE D; Disminuir la longitud de la cuerda

Nueva Zelanda READ_STRING; Continúe hasta que la longitud de la cuerda llegue a 0

; Función para comprobar si una cadena es un palíndromo

ES_PALÍNDROME:

; Guardar registros

EMPUJAR H

EMPUJAR D

; Pasa la mitad de la cuerda

ORIGEN LHLD; Cargar la dirección de origen desde la memoria.

MOVIMIENTO H,L; Copie el byte bajo de la dirección a H

AÑADIR HL; Incrementar la dirección

MOV L, H; Copie el byte alto de la dirección a L

MOV D,L; Copie el byte alto de la dirección a D

PAPÁ D; Duplica la dirección

XCHGH,D; Intercambiar registros H y D

MOV H,A; Almacenar el último carácter en H

DCRE E; Disminuir la longitud de la cuerda

LOOP_PAL:

ORIGEN LHLD; Cargar la dirección de origen desde la memoria.

MOVIMIENTO L,H; Copie el byte bajo de la dirección a L

PAPÁ D; Duplica la dirección

XTHL; Intercambie los registros H y L para cargar desde una dirección de memoria

IPC M; Compare el carácter en la dirección actual con el último carácter

EMPUJAR PSW; Guardar las banderas de estado

ANÍ CERO; Comprueba si los caracteres son iguales.

POP PSW; Restaurar las banderas de estado

JZ NOT_PALINDROME; Si es igual, continúa

XCHGH,D; Intercambiar registros H y D

MOV H,A; Almacene el siguiente carácter en H

DCRE E; Disminuir la longitud de la cuerda

Nueva Zelanda LOOP_PAL; Continuar hasta el final de la cuerda.

POP D

POP H

; Fin de función

RETIRADO

NOT_PALÍNDROME:

CMPE,0; Compruebe si la longitud de la cadena es 0

JZ PAL_DONE; Si es 0, la cuerda es un palíndromo.

POP D

POP H

; Función para imprimir una cadena

IMPRIMIR_STRING:

; Guardar registros

EMPUJAR D

LOOP_PRINT:

ORIGEN LHLD; Cargar la dirección de origen desde la memoria.

FUERA 0,A; Imprime el carácter en la dirección actual.

XTHL; Intercambie los registros H y L para cargar desde una dirección de memoria

IPC NULL_BYTE; Compruebe si el carácter es un byte nulo

POP D

RETNZ

; Función para imprimir un mensaje indicando que la cadena es un palíndromo

IMPRIMIR_PALÍNDROMO:

MOVER E,STR_PALINDROMO; Mover la dirección del mensaje al registro E

LLAMAR A PRINT_STRING; Llame a la función PRINT_STRING

; Función para imprimir un mensaje indicando que la cadena no es un palíndromo

PRINT_NOT_PALÍNDROMO:

MOVER E,STR_NOT_PALINDROMO; Mover la dirección del mensaje al registro E

LLAMAR A PRINT_STRING; Llame a la función PRINT_STRING

; Imprime el resultado de la comprobación del palíndromo.

MVI A,'$'; Imprime un signo de dólar para separar el resultado.

FUERA 0,A; Imprime el signo de dólar

CMPE,0; Comprueba si la cuerda es un palíndromo.

JZ PRINT_PALINDROME; Si es 0, imprime el mensaje palíndromo.

LLAMAR A PRINT_NOT_PALINDROMO; De lo contrario, imprima el mensaje no palíndromo.

; Imprimir un carácter de nueva línea

SALIDA 0,CRLF

; detener el programa

HLT

; Cadenas para imprimir

STR_PALINDROME:DB '$La cadena es un palíndromo$'

STR_NOT_PALINDROME:DB '$La cadena no es un palíndromo$'

CRLF:DB ODH,OAH,0; Retorno de carro y avance de línea

; Fin del programa

```

Lenguajes De Programación
¿Cuánto tiempo lleva iPhone Desarrollo App
Cómo ocultar la barra de título Fronteras
Cómo utilizar el comando SNMP para obtener una etiqueta de OID
¿Qué tipo de matemáticas hacer los informáticos uso
Cómo utilizar MATLAB para resolver un problema de programación lineal
Cómo aprender Código flash
Cómo filtrar datos de SSIS
Cómo enviar un mensaje de función en C
Conocimiento de la computadora © http://www.ordenador.online