dect
/
asl
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
asl/include/bitfuncs.inc

86 lines
2.6 KiB
PHP

save
listing off ; kein Listing über diesen File
;****************************************************************************
;* *
;* AS 1.39 - Datei BITFUNCS.INC *
;* *
;* Sinn : enthält Funktionen zur Bitmanipulation *
;* *
;* letzte Änderungen : 30. 5.1993 *
;* 11. 9.1993 Meldung nur im 1.Pass *
;* *
;****************************************************************************
ifndef bitfuncsinc ; verhindert Mehrfacheinbindung
bitfuncsinc equ 1
if mompass=1
message "Standardbitfunktionen (C) 1993 Alfred Arnold"
endif
;----------------------------------------------------------------------------
; erstmal einige Unterfunktionen:
; liefert eine Maske in der ab 'start' 'bits' Bit gesetzt sind, z.B. zum
; Ausmaskieren einzelner Bits:
mask function start,bits,((1<<bits)-1)<<start
; das gleiche invers zum Löschen von Bitgruppen:
invmask function start,bits,~mask(start,bits)
; liefert die Bits 'start' bis 'start'+'bits'-1 aus 'x':
cutout function x,start,bits,x&mask(start,bits)
;----------------------------------------------------------------------------
; einige häufig gebrauchte Sondermasken:
; oberes Byte eines 16-Bit-Wortes:
hi function x,(x>>8)&255
; dito unteres Byte:
lo function x,x&255
; obere Hälfte aus einem 32-Bit-Wort:
hiword function x,(x>>16)&65535
; dito untere Hälfte:
loword function x,x&65535
; Boolean-Funktionen, ob eine Zahl gerade oder ungerade ist:
odd function x,(x&1)=1
even function x,(x&1)=0
; liefert Bit 'n' aus 'x':
getbit function x,n,(x>>n)&1
;----------------------------------------------------------------------------
; Schiebefunktionen:
; Schieben eines 'size'-Bit-Wortes um 'n' Stellen nach links oder rechts:
shln function x,size,n,(x<<n)&mask(0,size)
shrn function x,size,n,(x>>n)&mask(0,size-n)
; Rotation eines 'size'-Bit-Wortes um 'n' Stellen nach links oder rechts;
; der erste Term läßt die restlichen Bits unverändert und kann bei Bedarf
; gelöscht werden:
rotln function x,size,n,cutout(x,size,32-size)|shln(x,size,n)|shrn(x,size,size-n)
rotrn function x,size,n,cutout(x,size,32-size)|shrn(x,size,n)|shln(x,size,size-n)
endif
restore ; wieder erlauben