proyectos:zxbcompiler:zxdc_lowlevel_neg32

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.

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

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
  • proyectos/zxbcompiler/zxdc_lowlevel_neg32.txt
  • Última modificación: 24-01-2009 20:48
  • por sromero