Autor Thema: A20 Gate - Welcher Code ist schneller?  (Gelesen 3313 mal)

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« 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??

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 13. November 2006, 22:29 »
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

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #2 am: 14. November 2006, 11:05 »
Jop, who fucking cares about unter 1000 Zyklen die nur einmal durchlaufen werden?  :mrgreen:
*post*

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 14. November 2006, 16:07 »
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.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 14. November 2006, 17:07 »
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 ;)
« Letzte Änderung: 14. November 2006, 17:09 von Coffee »

 

Einloggen