diff options
Diffstat (limited to 'include/bitfuncs.inc')
-rw-r--r-- | include/bitfuncs.inc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/include/bitfuncs.inc b/include/bitfuncs.inc new file mode 100644 index 0000000..fc9706b --- /dev/null +++ b/include/bitfuncs.inc @@ -0,0 +1,85 @@ + 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 + |