höchstwertigstes gesetztes Bit

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

höchstwertigstes gesetztes Bit

Beitrag von TomCat »

Hallo,

gibt es eine Möglichkeit das höchstwertigste Bit in einem 32-Bitregister zu bestimmen ?

Beispiel:
Register EAX = 00000000 00000010 00110000 00111011b

hier wäre das Bit: 17 das höchstwertigste.

THX
TomCat
Benutzeravatar
ChrisR3tro
Administrator
Beiträge: 2008
Registriert: Mo 7. Mär 2005, 23:33
Wohnort: NRW
Kontaktdaten:

Re: höchstwertigstes gesetztes Bit

Beitrag von ChrisR3tro »

Ich schätze mal ein weg wäre es, solange zu shiften bis links alle nullen wegfallen und man auf die erste 1 trifft, die Anzahl der Shifts zu zählen. Dann würde man das rauskriegen irgendwie. :-)
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: höchstwertigstes gesetztes Bit

Beitrag von TomCat »

ja das ist schon klar.
Das dauert halt, weil man da bis zu 32 mal shiften muesste. Das ist es ja eben !
es geht mir um was schnelles.
Brueggi

Re: höchstwertigstes gesetztes Bit

Beitrag von Brueggi »

ab 386 gibts Bit Scan - soweit ich weiss, stoppt der Befehl beim ersten gesetzten Bit und übergibt den Zähler im akku... da mein Schwerpunkt aber 286 ist, weiss ich es jetzt nicht 100%. Schau mal nach BSF und BSR - so müssten die heißen.
DOSferatu
DOS-Übermensch
Beiträge: 1223
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: höchstwertigstes gesetztes Bit

Beitrag von DOSferatu »

Ja, genau so ist es.
ASM86FAQ.TXT ist eine gute Referenz dazu. Da werden die entsprechenden Befehle erklärt.
Soweit ich mich erinnere wird dann die Nummer des Bits in einem Register zurückgegeben.
Ist der zu scannende Wert =0 wird, soweit ich mich erinnere, das ZeroFlag gesetzt.
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: höchstwertigstes gesetztes Bit

Beitrag von TomCat »

DOSferatu hat geschrieben:Ja, genau so ist es.
ASM86FAQ.TXT ist eine gute Referenz dazu. Da werden die entsprechenden Befehle erklärt.
Soweit ich mich erinnere wird dann die Nummer des Bits in einem Register zurückgegeben.
Ist der zu scannende Wert =0 wird, soweit ich mich erinnere, das ZeroFlag gesetzt.
ja habs ausprobiert. Funzt perfekt und ist schnell. so 3 Takte hab ich gemessen.

Danke!!
Antworten