Aktuelle Zeit: 24.09.2017 10:27

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [MODULE] BIT - Bit & Nibble Zugriff!
BeitragVerfasst: 13.09.2017 20:56 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Ein Modul für Bit & Nibble 8)
Viel Spaß!

Modul:
Code:
;By Mijikai

DeclareModule BIT
  Declare.i Set(Target.i,Bit.i)
  Declare.i Get(Target.i,Bit.i)
  Declare.i Reset(Target.i,Bit.i)
  Declare.i Toggle(Target.i,Bit.i)
  Declare.i SetLowNibble(Target.i,Nibble.i)
  Declare.i SetHighNibble(Target.i,Nibble.i)
  Declare.i GetLowNibble(Target.i)
  Declare.i GetHighNibble(Target.i)
EndDeclareModule

Module BIT
   
  Procedure.i Set(Target.i,Bit.i)
    !mov rcx,[p.v_Target]
    !mov rdx,[p.v_Bit]
    !xor rax,rax
    !bts [rcx],rdx
    !setc al
    ProcedureReturn
  EndProcedure
 
  Procedure.i Get(Target.i,Bit.i)
    !mov rcx,[p.v_Target]
    !mov rdx,[p.v_Bit]
    !xor rax,rax
    !bt [rcx],rdx
    !setc al
    ProcedureReturn
  EndProcedure

  Procedure.i Reset(Target.i,Bit.i)
    !mov rcx,[p.v_Target]
    !mov rdx,[p.v_Bit]
    !xor rax,rax
    !btr [rcx],rdx
    !setc al
    ProcedureReturn
  EndProcedure
 
  Procedure.i Toggle(Target.i,Bit.i)
    !mov rcx,[p.v_Target]
    !mov rdx,[p.v_Bit]
    !xor rax,rax
    !btc [rcx],rdx
    !setc al
    ProcedureReturn
  EndProcedure
 
  Procedure.i SetLowNibble(Target.i,Nibble.i)
    !mov rcx,[p.v_Target]
    !mov rax,[rcx]
    !and rax,0F0h
    !or rax,[p.v_Nibble]
    !mov [rcx],rax
  EndProcedure
 
  Procedure.i SetHighNibble(Target.i,Nibble.i)
    !mov rcx,[p.v_Target]
    !mov rax,[rcx]
    !mov rdx,[p.v_Nibble]
    !and rdx,0Fh
    !shl rdx,04h
    !or rax,rdx
    !mov [rcx],rax
  EndProcedure
 
  Procedure.i GetLowNibble(Target.i)
    !mov rcx,[p.v_Target]
    !mov rcx,[rcx]
    !movzx rax,cl
    !and rax,0Fh
    ProcedureReturn
  EndProcedure
 
  Procedure.i GetHighNibble(Target.i)
    !mov rcx,[p.v_Target]
    !mov rcx,[rcx]
    !movzx rax,cl
    !sar rax,4h
    ProcedureReturn
  EndProcedure
 
EndModule


Beispiel:
Code:
sample.a = 0
BIT::Set(@sample,4)
Debug BIT::Get(@sample,4)
BIT::Toggle(@sample,4)
Debug BIT::Get(@sample,4)
BIT::SetLowNibble(@sample,$A)
BIT::SetHighNibble(@sample,$F)
Debug Hex(sample,#PB_Ascii)
BIT::Reset(@sample,4)
Debug Hex(BIT::GetLowNibble(@sample),#PB_Ascii)
Debug Hex(BIT::GetHighNibble(@sample),#PB_Ascii)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [MODULE] BIT - Bit & Nibble Zugriff!
BeitragVerfasst: 20.09.2017 08:15 
Offline
Benutzeravatar

Registriert: 13.07.2005 08:39
Vielen Dank!

Es ist schon über 20 Jahre her, dass ich etwas mit Assembler gemacht habe. Da bin ich raus. Deswegen freue ich mich immer wenn ich gebrauchsfertigen Code finde.
Allerdings bekomme ich gleich für die erste Assembler-Anweisung einen Assmler error "illegal instruction" - noch mit dem 5.60-x86-Compiler unter Win7-64. Mache ich da irgend etwas falsch?

Nibbles scheinen ein interessantes Thema zu sein. Wenn ich es aber richtig sehe nutzt Du beim Aufruf nur ein Byte, empfängst aber ein Integer. Ich schätze mal, dass die CPU ohnehin immer mit Integer arbeitet. Dem Assembler-Vorteil gegenüber der AND-Variante steht also nicht nur der Procedure-Aufruf sondern auch die Umwandlung entgegen.

Wäre es nicht sinnvoller gleich 8 bzw 16 Nibbles (x86/x64) zu verwalten? Die Addresierung eines Nibbles könnte also auch in einem Nibble erfolgen.
Wären Macros bei so etwas nicht sinnvoller?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [MODULE] BIT - Bit & Nibble Zugriff!
BeitragVerfasst: 20.09.2017 08:26 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
uweb hat geschrieben:
Allerdings bekomme ich gleich für die erste Assembler-Anweisung einen Assmler error "illegal instruction" - noch mit dem 5.60-x86-Compiler unter Win7-64. Mache ich da irgend etwas falsch?

Nein, der Code ist nur für X64 Assembler geschrieben. X86 fehlt.

_________________
www.faz.net hat geschrieben:
Für eine repräsentative Auswertung, teilt die Forschungsgruppe Wahlen mit, sei die Zahl der verbliebenen FDP-Anhänger inzwischen zu gering.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [MODULE] BIT - Bit & Nibble Zugriff!
BeitragVerfasst: 20.09.2017 09:02 
Offline
Benutzeravatar

Registriert: 13.07.2005 08:39
Danke, Rings!

PS
Bald gibt es mehr PB-Nutzer als FDP-Anhänger.
:)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [MODULE] BIT - Bit & Nibble Zugriff!
BeitragVerfasst: 20.09.2017 14:41 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Für x86 und x64

Bitshift and Rotation

Link http://www.purebasic.fr/english/viewtop ... 12&t=66891

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye