Bits abfragen, aber wie?
-
Ich habe folgendes Problem.
Ich habe in meinem Assembler Programm den Nutzer aufgefordert
8 Bits einzugeben.Diese wird in einem Register als Hexadezimalzahl aufgefangen.
Wenn jemand also 1111 1111 eingibt = FFWas ich vorhabe ist, dass ich wissen will, an welcher Bitstelle eine 1 oder eine 0 steht. Wie kann ich das machen?
-
BunterVogel schrieb:
Ich habe in meinem Assembler Programm den Nutzer aufgefordert
8 Bits einzugeben.Zeig mal, was Du hast, dann kann man Dir auch gezielt helfen. Vergiss nicht, Betriebssystem und Assembler anzugeben.
Diese wird in einem Register als Hexadezimalzahl aufgefangen.
Wenn jemand also 1111 1111 eingibt = FFDas ist etwas unklar. Eine Hexadezimalzahl ist ein String, der zwei ASCII-Buchstaben beinhaltet, in diesem Fall: "FF". Oder liegt im Register bereits die computerisierte Form? Dann spricht Intel von einem Integer, andere von Byte, Word oder DWord.
Was ich vorhabe ist, dass ich wissen will, an welcher Bitstelle eine 1 oder eine 0 steht. Wie kann ich das machen?
Wie würdest Du es in C machen? In Assembler wird es ganz ähnlich gemacht.
viele grüße
ralph
-
Dafür gibt es spezielle Intel-Befehle, wie BSF (Bit Scan Forward), BSR (Bit Scan reverse) oder BT (Bit Test), usw.
BT Operand, Byte/Bitstelle
Also zum Beispiel
BT EAX, 7 ; Das Bit an Stelle 7 wird dann in das Currycornflakes äh ach Quatsch Carryflag kopiert und von da aus kann man es zum Beispiel mit dem Befehl
ADC (ADD CARRY) ausgeben.
Typische ASCII Ausgabe des Carryflags zum Beispiel über das Register DL:
ADC DL,30hAnsonsten ginge das aber auch direkt bei der Eingabe zu gucken, ob eine 1 oder 0 eingegeben wurde, gewisserweise ein Mitschneiden der Eingabe.
-
Hallo,
Wenn du nur ein bestimmtes Bit abfragen willst, kannst du den Inhalt des Registers mit ÄND verknüpfen oder das Ergebnis von TEST auf NULL testen.
AL = 1001 1000
AND AL, 0000 0001 liefert NULL im Staturregister (Zeroflag)
TEST AL, 0000 0001 wie oben, jedoch wird der Inhalt von AL nicht verändert und du kannst weitere Bits testen.
weiter gehts bei beiden mit dem bedingten Sprung
jz ;Springe wenn Bit nicht gesetzt...Nicky