Lenguaje ensamblador

Asuma que se ha almacenado en memoria una cadena de caracteres que termine con un retorno. Escriba un diagrama de flujo y un programa lenguaje ensamblador para contar la cantidad de veces el que el carácter de espacio aparece en la cadena.

2 respuestas

Respuesta
1
Diagrama de flujo (debes hacer un dibujo mejor).
1.- Inicialización:
2.- Memoria de caracteres
3.- Buscar caracter 2dh
4.- ¿Caracter 2dh encontrado?
NO:
1.- Incremente el contador de búsqueda
2.- Incremente el puntero de la memoria (tabla de caract.)
3.- Continuar con la búsqueda del carácter.
SI:
1.-Cargue el contenido del contador de búsquedas (bc)
2.- Muestre el resultado en el display
3.- Fin del programa.
Aquí va el programa :
Contador equ 1100h ; Dir. del contador de caract.
Display equ 01h ; Puerta del display del contador
org 0000h ; Inicio del programa
di ; Deshabilita interrupciones
Jp inicio ; Salta a la rutina principal
org 0100h ; Dirección del bucle principal
inicio: ld (contador), 00h ; Inicializa el contador en 00h
ld hl, memchar ; Apunta la memoria de caract.
Otro: ld a,(hl) ; Carga el contenido de la memoria
cp 2dh ; Compara con caract. Retorno
jp z, final ; Finaliza la búsqueda del retorno.
Ld bc, contador ; Puntero en el contador
ld a,(bc) ; Carga el contenido del contador
add a, 01h ; Suma 01 a la cuenta
daa ; Ajuste bcd
ld (bc), a ; Guarda la cuenta en decimal
inc hl ; Incrementa el puntero de la mem.
Jp otro ; Sigue buscando caract. ret. en mem.
Final: ld a,(contador) ; Carga el contenido del contador.
Out (display), a ; Muestra la cuenta en el display
halt ; Fín del programa
org 1000h ; Tabla con la memoria cargada
memchar: db " 60 61 62 63 64 65 66 80 a8 f2 40 3c 2d"
; Fíjate que el car. retorno está en la última dirección (puedes ponerlo dónde desees o agrandar la tabla)
El programa funciona 100%.
Te pido que formatees el texto ya que aparece muy desordenado (no cómo lo escribí).
Cualquier duda, me avisas.
Excelente amigo RAFD, esto fue lo que me enviaste
Diagrama de flujo (debes hacer un dibujo mejor).
1.- Inicialización:
2.- Memoria de caracteres
3.- Buscar caracter 2dh
4.- Caracter 2dh encontrado?
NO:
1.- Incremente el contador de búsqueda
2.- Incremente el puntero de la memoria (tabla de caract.)
3.- Continuar con la búsqueda del carácter.
SI:
1.-Cargue el contenido del contador de búsquedas (bc)
2.- Muestre el resultado en el display
3.- Fin del programa.
Aquí va el programa :
Contador equ 1100h ; Dir. del contador de caract.
display equ 01h ; Puerta del display del contador
org 0000h ; Inicio del programa
di ; Deshabilita interrupciones
jp inicio ; Salta a la rutina principal
org 0100h ; Dirección del bucle principal
inicio: ld (contador),00h ; Inicializa el contador en 00h
ld hl,memchar ; Apunta la memoria de caract.
otro: ld a,(hl) ; Carga el contenido de la memoria
cp 2dh ; Compara con caract. retorno
jp z, final ; Finaliza la búsqueda del retorno.
ld bc,contador ; Puntero en el contador
ld a,(bc) ; Carga el contenido del contador
add a,01h ; Suma 01 a la cuenta
daa ; Ajuste bcd
ld (bc),a ; Guarda la cuenta en decimal
inc hl ; Incrementa el puntero de la mem.
jp otro ; Sigue buscando caract. ret. en mem.
final: ld a,(contador) ; Carga el contenido del contador.
out (display),a ; Muestra la cuenta en el display
halt ; Fín del programa
org 1000h ; Tabla con la memoria cargada
memchar: db " 60 61 62 63 64 65 66 80 a8 f2 40 3c 2d"
; Fíjate que el car. retorno está en la última dirección (puedes ponerlo dónde desees o agrandar la tabla)
*********
Deseo pedirte un favor... si está a tu alcance
Si existe la posibilidad de que me envíes vía e-mail el programa para ejecutar el programa ya que debo presentarlo.
Estoy estudiando las instrucciones que utilizaste y luego seguro que te preguntaré al respecto.
Muy agradecido por tu ayuda. Si puedes ayudarme en lo que he pedido mi dirección es: [email protected]
Y si por favor me explicas algo de como utilizar el programa.
Disculpa tanto el abuso.
Gracias.
Ya envié los programas y las instrucciones a tu casilla de correo ([email protected]). Si deseas hacer otras consultas, finaliza 1 primero.
Respuesta
1
Henry:
Te envío la respuesta en pseudocodigo, ya que no me dices en ensamblador de que procesador.
cuenta=0
p=direccion inicio cadena
mientras ( *p no es <CR>)
si (*p es ESPACIO) cuenta=cuenta+1
Incrementar p
-------------
*p significa el contenido de la dir de memoria apuntada por p

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas