cursos:ensamblador:habituales

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
cursos:ensamblador:habituales [02-02-2024 10:26] – [Optimizaciones habituales] sromerocursos:ensamblador:habituales [02-02-2024 18:39] (actual) – [Comparaciones de 8 bits] sromero
Línea 36: Línea 36:
 \\  \\ 
  
-Así, tras un ''CP n'' podemos utilizar los flas de la siguiente forma:+Así, tras un ''CP n'' podemos utilizar los flags de la siguiente forma:
  
 \\  \\ 
Línea 128: Línea 128:
 <code z80> <code z80>
     cp 50     cp 50
-    jp ncmenor_o_igual_que_50 +    jp cmenor_que_50 
-    jp nz, menor_o_igual_que_50     ; => Si no salto, es que C = 1+    jp nz, mayor_que_50             ; => Si no salto, es que C = 0
                                     ;    Ahora o es '=' o es '<' segun Z                                     ;    Ahora o es '=' o es '<' segun Z
  
-    ; 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:
 </code> </code>
  
- Como se puede ver en el código, tenemos que añadir un ''jp nz'' o ''jp z'' tras el chequeo del carry para comprobar si es "menor o igual". Si queremos ahorrar varios t-estados, podemos hacer las comparaciones de ''>='' y ''<='' sin igualdad, pero utilizando el número anterior o el siguiente. Repitamos el ejemplo anterior, pero con 51 (''>='') o con 49 (''<=''):+ Como se puede ver en el código, tenemos que añadir un ''JP NZ'' o ''JP Z'' tras el chequeo del carry para comprobar si es "menor o igual". Si queremos ahorrar varios t-estados, podemos hacer las comparaciones de ''>='' y ''<='' sin igualdad, pero utilizando el número anterior o el siguiente. Repitamos el ejemplo anterior, pero con 51 (''>='') o con 49 (''<=''):
  
 <code z80> <code z80>
Línea 149: 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      ; = mayor_que_50+    jp nc, mayor_que_50           ; => mayor O IGUAL que 51 = mayor que 50
  
-    ; aqui A < 50+    ; aqui A <50
     jr fin_comparacion     jr fin_comparacion
  
 mayor_que_50: mayor_que_50:
-    aqui A >= 51 y por tanto A > 50+    aqui A >= 51 y por tanto A > 50
  
 fin_comparacion: fin_comparacion:
Línea 162: 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 "mayor_o_igual_que_49".+    ; y comprobar "menor_que_50" mediante "mayor_o_igual_que_49".
     ; 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        ; = menor_que_50     jp c, menor_igual_que_49        ; = menor_que_50
  
-    ; 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:
 </code> </code>
- 
  
 Recordamos que ''CP'', y en general el uso de los flags (con ''DEC'', ''INC'', ''AND/OR/XOR'', etc) no nos limita a usar después ''JP'' o ''JR'', sino que también podemos usarlo para salir de las rutinas con ''RET'' o hacer llamadas condicionales con ''CALL''; Recordamos que ''CP'', y en general el uso de los flags (con ''DEC'', ''INC'', ''AND/OR/XOR'', etc) no nos limita a usar después ''JP'' o ''JR'', sino que también podemos usarlo para salir de las rutinas con ''RET'' o hacer llamadas condicionales con ''CALL'';
Línea 290: 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 condiciones como por ejemplo, "mayor o igual" (**>=**):+De la misma forma, podemos realizar rutinas específicas para comparar condiciones como por ejemplo, "mayor o igual" (**>=**):
  
 <code z80> <code z80>
  • cursos/ensamblador/habituales.1706869614.txt.gz
  • Última modificación: 02-02-2024 10:26
  • por sromero