Funciones de C2
Esta función se encargará de hallar el Complemento a 2 de un número binario. Ésto es útil porque el complemento a 2 equivale al cambio de signo, y se usa en las operaciones aritméticas, tanto de números enteros como de punto fijo.
NEG32
Se le pasa el número de 32 bits en los registros DE,HL y se devuelven estos en C2. La subrutina propuesta se puso en el foro:
:NEG32 ; deHL = -deHL ; recibe un número de 32 bits en DE,HL y devuelve su C2 ld a,l cpl ld l,a ld a,h cpl ld h,a ld a,e cpl ld e,a ld a,d cpl ld d,a inc l ret nz inc h ret nz inc de ret
NEG32_HL
Como la anterior, pero se le pasa la dirección de memoria donde está guardado el número, y en el registro B el número de bytes del número (1 = 8 bits, 2 = 16, 4 = 32, etc…)
NEG32_HL: ; Negates 32 bit value pointed by HL, +2, +3, +4 push hl scf ; CF = 1 :C2LOOP ; ld a, (hl) cpl ; A <- Inverted bit values at (HL) adc a, 0 ; Adds Carry Flag ld (hl), a ; Saves value to memory inc hl ; Points HL to next location djnz C2LOOP ; Repeat until ZERO pop hl ret