Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
cursos:ensamblador:lenguaje_1 [19-01-2024 11:51] – [Resta: SUB (Substract)] sromero | cursos:ensamblador:lenguaje_1 [22-01-2024 07:51] (actual) – [Instrucciones LD (instrucciones de carga)] sromero | ||
---|---|---|---|
Línea 259: | Línea 259: | ||
</ | </ | ||
- | | + | |
+ | |||
+ | Este operador indica que se hace referencia a una posición de memoria referenciada por el valor que hay dentro de los paréntesis. Dicho valor referencia a una celdilla de memoria de 8 bits. | ||
+ | |||
+ | Es decir, si escribiéramos en BASIC del Spectrum (con '' | ||
+ | |||
+ | <code z80> | ||
+ | ld a, (16384) | ||
+ | ld (16384), a | ||
+ | |||
+ | ld hl, 16384 => HL = 16384 | ||
+ | ld a, (hl) => LET A = PEEK HL => LET A = PEEK 16384 | ||
+ | ld (hl), a => POKE HL, a | ||
+ | </ | ||
+ | |||
+ | En el segundo ejemplo hemos utilizado '' | ||
+ | |||
+ | No sólo podemos leer de o escribir en una dirección de memoria valores de 8 bits, también podemos leer y escribir valores de 16 bits. Evidentemente, | ||
+ | |||
+ | De nuevo, viéndolo "en instrucciones BASIC", | ||
+ | |||
+ | <code z80> | ||
+ | ld hl, 16384 => HL = 16384 | ||
+ | |||
+ | ld hl, (16384) | ||
+ | => L = PEEK 16384 | ||
+ | H = PEEK 16385 | ||
+ | </ | ||
+ | |||
+ | En '' | ||
+ | |||
+ | De la misma forma, si hablamos de escribir en memoria un valor de 16 bits: | ||
+ | |||
+ | <code z80> | ||
+ | ld (16384), hl => POKE 16384, L | ||
+ | POKE 16385, H | ||
+ | </ | ||
En un microprocesador con un juego de instrucciones ortogonal, se podría usar cualquier origen y cualquier destino sin distinción. En el caso del Z80 no es así. El listado completo de operaciones válidas con LD es el siguiente: | En un microprocesador con un juego de instrucciones ortogonal, se podría usar cualquier origen y cualquier destino sin distinción. En el caso del Z80 no es así. El listado completo de operaciones válidas con LD es el siguiente: | ||
Línea 338: | Línea 374: | ||
; Registro = VALOR en (Posicion de memoria) | ; Registro = VALOR en (Posicion de memoria) | ||
ld a, (hl) ; ld r, (rr) | ld a, (hl) ; ld r, (rr) | ||
- | ld (bL), b ; ld (rr), r | + | ld (bc), a ; ld (rr), r |
ld (12345), a ; ld (NN), a | ld (12345), a ; ld (NN), a | ||
ld a, (hl) ; ld r, (rr) | ld a, (hl) ; ld r, (rr) | ||
Línea 362: | Línea 398: | ||
Flags | Flags | ||
| | ||
- | ---------------------------------- | + | |
ld r, r |- - - - - -| | ld r, r |- - - - - -| | ||
ld r, N |- - - - - -| | ld r, N |- - - - - -| | ||
Línea 380: | Línea 416: | ||
Esto quiere decir, y es muy importante, que una operación como '' | Esto quiere decir, y es muy importante, que una operación como '' | ||
- | Al respecto de escritura y lectura de valores de 16 bits utilizando instrucciones que trabajan con 8 bits, queremos recordar en este punto que el Z80 es una CPU LITTLE-ENDIAN por lo que los valores de 16 bits aparecerán en memoria " | + | \\ |
+ | ===== Tamaños y ciclos ===== | ||
+ | |||
+ | Hay otros dos datos que, como la afectación de flags, son muy importantes sobre las diferentes instrucciones que iremos viendo. | ||
+ | |||
+ | Uno es el tamaño en bytes de cada instrucción, | ||
+ | |||
+ | Del mismo modo, tenemos el tiempo que tarda en ejecutarse cada una de ellas, lo que se conoce como el número de **ciclos** (o **t-estados** / **t-states**). Este es el tiempo que tarda el procesador Z80 en leer de memoria, decodificar y ejecutar cada instrucción. Cada lectura de byte de memoria requiere en general de 3 t-estados extra, así que no lo es lo mismo una instrucción sencilla de un sólo byte de opcode como '' | ||
+ | |||
+ | En nuestro ejemplo anterior, el '' | ||
+ | |||
+ | En estos capítulos iniciales del curso no nos deben de preocupar tanto lo que ocupan las instrucciones y cuánto tardan en ejecutarse como el saber qué instrucciones existen, la manera en que operan y cómo se utilizan. No obstante, sí que necesitaremos más adelante tener un buen conocimiento de tamaño y tiempo de ejecución de cada instrucción para desarrollar programas. | ||
+ | |||
+ | En el último capítulo dedicado a las diferentes instrucciones veremos una tabla donde se detallan todos los tamaños y tiempos de las diferentes instrucciones. | ||
+ | |||
+ | Un apunte sobre '' | ||
\\ | \\ | ||
Línea 457: | Línea 508: | ||
| | ||
inc r |* * * V 0 -| | inc r |* * * V 0 -| | ||
- | INC (HL) |* * * V 0 -| | + | inc (hl) |* * * V 0 -| |
- | INC [ri+N] |* * * V 0 -| | + | inc (ri+N) |* * * V 0 -| |
inc rr |- - - - - -| | inc rr |- - - - - -| | ||
dec r |* * * V 1 -| | dec r |* * * V 1 -| |