Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Coffee am 13. November 2006, 18:10

Titel: A20 Gate - Welcher Code ist schneller?
Beitrag 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??
Titel: Re: A20 Gate - Welcher Code ist schneller?
Beitrag von: Homix 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
Titel: Re: A20 Gate - Welcher Code ist schneller?
Beitrag von: Legend am 14. November 2006, 11:05
Jop, who fucking cares about unter 1000 Zyklen die nur einmal durchlaufen werden?  :mrgreen:
Titel: Re: A20 Gate - Welcher Code ist schneller?
Beitrag von: MNemo 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.
Titel: Re: A20 Gate - Welcher Code ist schneller?
Beitrag von: Coffee 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 ;)