Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Coffee am 13. November 2006, 18:10
-
Ich habe jetzt anhand Toasters A20 - Genuine - Dokument meinen eigenen Copde zum aktivieren des A20 - Gates geschrieben. Dieser fällt aber etwas anderes aus als seiner. welcher von beiden ist schneller?
Toasters:
Activate_A20_Gate:
; aktiviere das A20Gate
; warte auf den Controller, bis man einen Befehl senden kann
Wait_Keyboard:
in al,64h
test al,00000010b
jnz Wait_Keyboard
; sende den Befehl
mov al,0D0h
out 64h,al
; warte, bis man das Status Byte lesen kann
Wait_Byte:
in al,64h
test al,00000001b
jz Wait_Byte
; lese das Output Byte (und setze Bit 1)
in al,60h
or al,00000010b
mov bl,al
; warte auf den Controller, bis man einen Befehl senden kann
Wait_Keyboard_2:
in al,64h
test al,00000010b
jnz Wait_Keyboard_2
; sende den Befehl
mov al,0D1h
out 64h,al
; warte, bis man das Status Byte lesen kann
Wait_Keyboard_3:
in al,64h
test al,00000010b
jnz Wait_Keyboard_3
; sende das Output Byte (und aktiviere damit das A20Gate)
mov al,bl
out 60h,al
retf
meiner:
WaitKeyboard:
xor ax, ax
in al, 0x64
bt ax, 1
jc WaitKeyboard
mov al, 0xD0
out 0x64, al
WaitData:
xor ax, ax
in al, 0x64
bt ax, 1
jnc WaitData
xor ax, ax
in al, 0x60
mov bl, al
WaitKeyboard2:
xor ax, ax
in al, 0x64
bt ax, 1
jc WaitKeyboard2
mov al, 0xD1
out 0x64, al
WaitKeyboard3:
xor ax, ax
in al, 0x64
bt ax, 1
jc WaitKeyboard3
mov al, bl
or al, 00000010b
out 0x60, al
mit der schnelligkeit soll bitte nicht der gesamt code betrachtet werden, sondern nur diese befehle
test
und
bt
ich hab in meinemm asm-tut bt kennen gelernt , er verwendet test. was ist schneller??
-
Hi,
erstens glaub ich, dass es egal ist, wie schnell dieser kleine Code ist, weil man es sowieso nicht merkt,
und zweitens werden neuere prozessoren das intern eh so optimieren dass nur 1 cpu-takt verbraucht wird (pipelining mal außer acht gelassen).
Grüsse,
Stefan
-
Jop, who fucking cares about unter 1000 Zyklen die nur einmal durchlaufen werden? :mrgreen:
-
Fals ich es dich torzdem interessiert:
es gibt ab dem Pentium den befehl RDTSC der liest das Time Stamp Counter Register(zählt in Taktetn(seit systemstart !?)) nach EDX:EAX
damit kanzt du dir dann die anzahl der takte die ein befehl braucht selbst ausrechnen.
-
also der A20Gate Teil ist bei mir nicht optimiert, habe ich schon vor langem geschrieben
sieht aber so aus dass deiner schneller ist wenn du dir extra die Mühe gemacht hast selbst einen zu schreiben :wink:
lg,
Toaster
PS: ich werd die baldigst "OS development" schicken
joh just do it
EDIT: naja egal wie ihr shcon sagt bei dem code macht es ja nicht viel aus wie viel code das is ;)