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:habituales [02-02-2024 10:24] – [Comparaciones de 8 bits] sromero | cursos:ensamblador:habituales [02-02-2024 18:39] (actual) – [Comparaciones de 8 bits] sromero | ||
---|---|---|---|
Línea 36: | Línea 36: | ||
\\ | \\ | ||
- | Así, tras un '' | + | Así, tras un '' |
\\ | \\ | ||
Línea 76: | Línea 76: | ||
Veamos ejemplos de código, comparando A con 50 (podemos usar para los saltos tanto '' | Veamos ejemplos de código, comparando A con 50 (podemos usar para los saltos tanto '' | ||
- | Para comparar si **A == 50**, simplemente comprobamos ZF: | + | Para comparar si **A == 50** o si **A != 50**, simplemente comprobamos ZF: |
<code z80> | <code z80> | ||
Línea 89: | Línea 89: | ||
; igual a 50 | ; igual a 50 | ||
; (... codigo para caso a == 50 ...) | ; (... codigo para caso a == 50 ...) | ||
- | |||
- | fin_comparacion: | ||
- | </ | ||
- | |||
- | Para comparar si **A != 50**, de nuevo comprobamos ZF: | ||
- | |||
- | <code z80> | ||
- | cp 50 | ||
- | jr z, distinto_de_50 | ||
- | |||
- | ; igual a 50 | ||
- | ; (... codigo para caso a == 50 ...) | ||
- | jr fin_comparacion | ||
- | |||
- | distinto_a_50: | ||
- | ; (... codigo para caso a != 50 ...) | ||
fin_comparacion: | fin_comparacion: | ||
Línea 144: | Línea 128: | ||
<code z80> | <code z80> | ||
cp 50 | cp 50 | ||
- | jp nc, menor_o_igual_que_50 | + | jp c, menor_que_50 |
- | jp nz, menor_o_igual_que_50 | + | jp nz, mayor_que_50 |
; Ahora o es ' | ; Ahora o es ' | ||
- | ; mayor o igual que 50 | + | ; igual que 50 |
+ | ; (... codigo para caso a == 50 ...) | ||
+ | |||
+ | jr fin_comparacion | ||
+ | |||
+ | mayor_que_50: | ||
; (... codigo para caso a > 50 ...) | ; (... codigo para caso a > 50 ...) | ||
jr fin_comparacion | jr fin_comparacion | ||
- | menor_o_igual_que_50: | + | menor_que_50: |
- | ; (... codigo para caso a <= 50 ...) | + | ; (... codigo para caso a < 50 ...) |
fin_comparacion: | fin_comparacion: | ||
</ | </ | ||
- | Como se puede ver en el código, tenemos que añadir un '' | + | Como se puede ver en el código, tenemos que añadir un '' |
<code z80> | <code z80> | ||
Línea 165: | Línea 154: | ||
; saltaría con >=51 es decir, con >50 | ; saltaría con >=51 es decir, con >50 | ||
cp 50+1 | cp 50+1 | ||
- | jp nc, mayor_O_IGUAL_que_51 | + | jp nc, mayor_que_50 |
- | ; aqui A < 50 | + | ; aqui A <= 50 |
jr fin_comparacion | jr fin_comparacion | ||
mayor_que_50: | mayor_que_50: | ||
- | | + | |
fin_comparacion: | fin_comparacion: | ||
Línea 178: | Línea 167: | ||
<code z80> | <code z80> | ||
; comparamos con valor -1 y entonces sí que podemos hacer JP C | ; comparamos con valor -1 y entonces sí que podemos hacer JP C | ||
- | ; y comprobar "mayor_que_50" mediante " | + | ; y comprobar "menor_que_50" mediante " |
; saltaría con <=49 es decir, con <50 | ; saltaría con <=49 es decir, con <50 | ||
cp 50-1 | cp 50-1 | ||
jp c, menor_igual_que_49 | jp c, menor_igual_que_49 | ||
- | ; aqui A >= 50 | + | ; aqui A > 50 |
jr fin_comparacion | jr fin_comparacion | ||
- | mayor_o_igual_que_49: | + | menor_igual_que_49: |
; aqui A <= 49 y por tanto A < 50 | ; aqui A <= 49 y por tanto A < 50 | ||
fin_comparacion: | fin_comparacion: | ||
</ | </ | ||
- | |||
Recordamos que '' | Recordamos que '' | ||
Línea 306: | Línea 294: | ||
* Si **HL > DE** => Z=0 y C=0. | * Si **HL > DE** => Z=0 y C=0. | ||
- | De la misma forma, podemos realizar rutinas específicas para compara | + | De la misma forma, podemos realizar rutinas específicas para comparar |
<code z80> | <code z80> | ||
Línea 495: | Línea 483: | ||
; Óptimo: | ; Óptimo: | ||
+ | rrca | ||
rrca | rrca | ||
rrca | rrca | ||
Línea 593: | Línea 582: | ||
; Con bit 0: | ; Con bit 0: | ||
rra ; 1 byte, 4 t-estados | rra ; 1 byte, 4 t-estados | ||
- | jr z, destino | + | jr c, destino |
; Con bit 7: | ; Con bit 7: | ||
rla ; 1 byte, 4 t-estados | rla ; 1 byte, 4 t-estados | ||
- | call z, destino | + | call c, destino |
</ | </ | ||