# Assembler usw



## FastProg (18. September 2003)

Hi Leute

Wie kann ich mit Assembler Grafiken erstellen?

Kennt jemand ein paar Tutorials?
oder Links


----------



## chibisuke (19. September 2003)

nun dazu gehöhrt einiges mehr als nur das du uns sagst du willst das in ASM machen...

1.) Win32? DOS? NativeCode? PMode? RMode?

Nun wenn du windows programmierst, funktioniert es genauso wie in jeder anderen sprache nur eben als ASM syntax, also mit dem WinAPI

wenn du für Dos oder native-Realmode schreibst, sieht die sache anders aus... da kannst du die funktionen des INT10 benutzen um die graphikkarte anzusprechen, und dann schreibst du einfach je nach graphikmodi die daten in den graphikspeicher..

mov ax, 13h
int 10h

setzt den graphikmodus aus 0x13, wobei zu beachten is.. die funktionsnummer zum setzen des graphimodes (in ah) is 0 und der parameter in al is der graphikmodus...

mov es, 0xA000

und mit dem befehl bereitest du das extra segment dafür vor daten in den graphikspeicher zu schreiben.. das is es für VGA modus, bei EGA oder ähnlichem müsst ich nachgucken..

nun kannste einfach
mov al, 16
mov [es:0], al
so ein pixel auf den farbwert 16 z.B. setzen...
das funktioniert bei EGA genau so... die einzige ausnahme sind die 640x480 graphikmodi und dann die VESA modi... bei dem 640x480 modi arbeitest du mit bitmasken, wobei 1bit = 1 pixel, und musst dann die farben umschalten...
und bei VESA funktioniert es nahezu genau so nur mit dem unterschied das du zusätzlich BankSwitches einfügen musst.. also zwischen den speicherteilen hin und herschalten...

um einiges komplizierter wird es wenn du nun im native-protected mode programmierst.... denn dann musst du auch die graphikregister selbst ansteuern.... das sind über 100 register dies gibt für alles mögliche.. naja da würd ich sagen mach sowas im V86 und benutz bios

http://www.ctyme.com/intr/int-10.htm <-- das sind die graphikfunktionen die dir das BIOS und das VESA-BIOS zur verfügung stellen...


----------



## FastProg (21. September 2003)

Hi Leute

Ich Habe ein Kleines OS Programmiert durch Hilfe anderer OS und Tutorials jetzt will ich noch Grafiken rein Setzten!
Ich meinte so etwas wie zb bei QBasic da kann man eine Linie Zeichnen
Hat jemand ein Beispiel dafür?

wie man von Punkt X1,Y1 nach Punkt X2,Y2 eine Linie zeichnet?

Und wie funktioniert das denn Richtig mir den Grafik Karten, was muss ich darüber wissen

Wie ändert man den Die Farbe von Buchstaben oder Grafiken?

Danke für eure Hilfe


----------



## chibisuke (21. September 2003)

Wer lesen kann is klar im vorteil

ich hab dich 1.) gefragt ob du fals du mit Nativecode arbeitest, was du beim einem eigenen OS zwangsleufig tust mit R oder P mode arbeitest..

2.) hab ich dir bereits genau beschrieben wie du pixel setzt und neu setzt, alles andere is nur erweiterung des ganzen...

und sowas wie linie zeichnen in assembler gibts so und so net fertig....

nochmal von vorn:
arbeitest du im RMode kannst du mit hilfe des Bios interupts 10h funktion 00h den bildschirmmodus ändern...
beispiel:

```
mov ax, 13h  ;setzt ah = 0, al = 13h
int 10h           ;biosinterupt aufrufen um die funktion auszufphren
```

um nun einen pixel zu setzten musst du den pixel in den graphikspeicher schreiben, wie der graphikspeicher organisiert ist und wo er liegt hängt vom graphikmodus ab.

fortsetzung des obigen beispiels:
bei modus 13h beginnt der graphikspeicher bei flat 0xA0000
entsprechend den regeln für realmode programmierung setzt du ein segmentregister auf 0xA000 um auf den speicher zugreifen zu können
der graphikspeicher ende in diesem fall 64000byte weiter...
entsprechend, kannst du nun einen pixel setzen

code dazu:

```
mov ax, 0xA000 ;segmentregister können nicht direkt geladen werden
mov es, ax         ;also zuerst in ax zwischenspeichern und dann rüber kopieren
```
so nun hast du die vorbereitungen abgeschlossen nun kannst du anfangen pixel zu setzen

der mode 13h ist ein 320x200 pixel großer modus, und er benutzt 256 farben, entsprechend ist ein pixel = 1 byte

der graphikspeicher ist definiert als bytearray mit einer länge von 64000byte entsprechend das jeder pixel ein byte ist brauchst du nur von der oberen linken ecke anfangen zu zählen.. die formel für die berechnung des offsets im graphikspeicher:
offset = y*320 + x
x = richtung in x
y = richtung in y
offset = der wert den du beim zugriff benutzen musst

vergiss bei dem ganzen bitte nich das zeilen und spalten nummerierung bei 0 beginnt...

und nun schreibste den farbwert den du willst an die entsprechende stelle


```
mov cx, offset       ;offset in register laden
mov dl, farbwert  ;farbwert in register laden
mov [es:cx], dl     ;farbwert mit hilfe von segmentoverride präfix in dereferenziertes CX schreiben
```

also noch genauer kann ich es fast nicht mehr erklären

nocheinmal der link auf die interupt liste von R-Brown http://www.ctyme.com/intr/int-10.htm

im pmode funktioniert das ganze ganz ähnlich

dort machst du in deiner GDT einen eintrag für den graphikspeicher, im VGA modi is der flat offset wie schon erwähnt 0xA0000 wenn du den modus ändern willst brauchst du die grphikregister dazu die über den out befehl angesprochen werden, wie die allerdings alle genau funktionieren, das würde den rahmen dieses forums um megabytes an text sprengen...einfach mal googlen...

und was den zugriff auf den graphikspeicher betrifft.. das selbe in grün...

also wieder selector nehmen und

```
mov ax, selector
mov es, ax
mov cx, offset
mov dl, farbwert
mov [es:cx], dl
```

einzig erkennbarer unterschied hier... ich benutz anstat von 0xA000 hier den selektor der auf den eintrag der GDT zeigt...
ansonsten, aufpassen das du kein DPL laden willst für das dein CPL nich ausreicht... und natürlich sollte RPL = DPL sein.. wie halt immer außer bei call gates.. stell sicher das du nich versehendlich in der LDT landest, ja die üblichen dinge die man beim arbeiten mit pmode segmenten eben beachten muss....


So und wenn du das noch immer nich verstanden hast jetzt, dann sag uns zu aller erstmal in welchem modus du bist,... denn dann kann ich geziehlt darauf eingehen...


----------



## FastProg (21. September 2003)

Danke für deine Hilfe

Werde etwas herrum experimentieren


----------



## coolyo (5. Oktober 2003)

hi.... 
ich hab den code ausprobiert..aber bei mir kommt immer ein fehler hiner mov [es:cx], dl     ....das komische is, dass der fehler immer genau eine zeile danach kommt (fehler. Invalid effective adress)
der code, den ich genommen hab sieht folgendermaßen aus:

MOV AX, 13h
INT 10h

MOV AX, 0xA000
MOV ES, AX

MOV CX, 321
MOV DL, 2
MOV [ES:CX], DL


wo is der fehler?


----------



## chibisuke (5. Oktober 2003)

ups ja, da muss man die operator geröße explizit angeben


```
mov byte [es:cx], dl
```
so sollte es funktionieren...

hinweis: der asm code is nach NASM syntax verfasst

ich zeig dir mal n kleines beispiel:


```
[org 0x100]
[bits 16]
	jmp _start
_start:
	mov ax,0x0013		;
	int 10h			;switch to 640x480x16
        mov bx,0xA000  
        mov es,bx          	;set es to graphik memory  
	
	
	mov ecx,0xFF		;all colors
_loop2:
	mov eax, ecx		;backup collor for reusing ecx
        mov ecx,0xFFFF  	
_loop1:
	mov byte [es:ecx-1],al  ;write pixel to display memory
	loop _loop1		; next pixel
	call _whait		; whait, or it would be to fast to see it
	mov ecx,eax		;resore color value
	loop _loop2		;next color
	

	mov ah,08h		;whait for key
	int 21h			
	mov ah, 4ch		;exit process
	int 21h
_whait:
	mov ecx, 0xFFFF
_whait2:			;let the app whait a little time	
	hlt
	hlt
	hlt
	loop _whait2
	ret
```

kompilieren mit 
nasmw -fbin -o test.com test.asm


----------



## chibisuke (5. Oktober 2003)

ich hab den code eben noch assembliert und häng ihn dir als dateianhang dran

sorry wegen doppenposting, aber dateien nacfhträglich anhängen geht nich 

leider kann ich auch das com file nich direkt anhängen  und so sind aus 63Byte code datei 173byte zip geworden.. naja kann man nix machen


----------



## FastProg (10. Oktober 2003)

So endlich habe ich mal wieder Zeit zu schreiben

Ich hätte eine Frage zu dem Beispiel code, und zwar ob der im Realmode ist?
Ich bin noch anfänger in Assembler!


----------



## coolyo (10. Oktober 2003)

*nasmw*

fürs beispiel  
kann man die .com files (die man ja unter windows ausführen kann nur mit nasmw machen? ,..oder auch mit nasm ?
(nasm = netwide assembler for windows ? )  

und noch ne frage  ..
wie kann man im grafik modus linien zeichnen?..
ich wolltes erst mit den einzelnen pixeln machen.. aber das is mir irgendwie zu aufwendig geworden 320 pixel einzeln auf weiß zu stellen...ich hätte hochstens ne schleife machen können.. aber abgesehen davon, dass ich völlig vergessen hab, wie der ADD befehl , dachtich mich, dass es sicherlich viel zu lange dauern würde die schleife und dasses ja auch möglich sein müsste einfach gleich ganze linien zu zeichnen wo man nur die anfangs- und endkoordinatehn angeben muss... is das möglich?


----------



## chibisuke (10. Oktober 2003)

Ja der code ist realmode bzw v86 code... nasm = nasmw...die executeable von nasm heißt nasmw.exe daher...

linien zeichnest du indem du die entsprechenden pixel der linie auf die entsprechende farbe stellst, was anderes gibt es soweit ich weiß auf assembler ebene nicht.. es gibt zwar entsprechende codestücke die das übernehmen.. ich setz mich in den nächsten tagen mal hin und such mal meine graphikbibliothek raus die ich damals geschrieben hab....

tatsächlich macht auch windows intern das mit einer schleife wie auch alle anderen systeme...


----------



## FastProg (10. Oktober 2003)

Hi Leute

Ich habe jetzt schon etwas mit den Modus 13 gearbeitet (320x200Pixel 256Farben)

Weiß jemand wie man mit den modus 12 arbeitet (640x480Pixel 16Farben)
habt ihr vieleicht ein Beispiel?
Kann man unter den Modus auch mit Tricks 256Farben nehmen?

ach so, hat jemand ein Programm mit denen man BMP oder JPG usw in einen ASM code umwandeln kann?
So das man nicht alle Pixel einzel setzen muss 

Danke


----------



## coolyo (10. Oktober 2003)

was die 256 farben im 16farben-modus angeht bezweifel ich, dasses geht(ich weisse aber nich  )
aber was die bmp-files unter assembler angeht wüsstichs auch gerne.. ich hab mir MirageOS gesaugt.. und dabei sind die icon's auf dem desktop auch als bmp gespeichert (zumindest in der nicht-compileten version....leider weissich nich, obs compiled aus so is, da ich geine version gefunden hab, wo nur die fertig-compileten sachen dabei sind)...
kann plz nochma jemand posten, wie der ADD befehl richtig lautet ?
weil ichs irgendwie ned zum laufen bekomme ...mein code sieht folgendermaßen aus:

pixelnummer db 1

ADD pixelnummer, 2

...da kommt aber eine fehlermeldung ;(


----------



## FastProg (10. Oktober 2003)

Ich bin mir nicht sicher!
Ich Programmiere mit assembler erst seit ein paar wochen
und habe probiert das mit den Pixel zu setzen hinzubekommen. (was jetzt auch im modus 13 klapt)
Jetzt probiere ich erst das andere alles 

Probier es mal so:

MOV ax, pixelnummer             ;Setz Pixelnummer in AX
ADD ax, 1                                   ;Erweitere AX um eins
MOV pixelnummer, ax             ;Setze AX in Pixelnummer


Ich glaube, so war es mal in einen Beispiel erklärt, das man es erst in einen Register verschieben muss!
Falls es falsch ist würde ich mich auch um eine richtige antwort freuen


----------



## FastProg (10. Oktober 2003)

Hier gibt es einen BMP zu ASM konverter, leider nur schwarz und weiße Bilder.
Aber für den anfang schon sehr nützlich 

http://www.ticalc.org/pub/dos/graphics/bmp2asm.zip


----------



## coolyo (11. Oktober 2003)

..der scheint ja zu funzen... (eigentlich hättich ja auf den compiler auch selber kommen müssen ...hab nämlich nen TI-83 ...und insofern binnich oft auf der page..)
also..schon ma ..aber wie rufich die damit erstellte asm-file denn dann in assembler auf?


----------



## FastProg (11. Oktober 2003)

Hey coolyo

Das gleiche habe ich gerade auch probiert, leider ist kein Beispiel aufruf da
Wäre super wenn jemand helfen würde!
Oder ich muss ein Editor Programmieren mit den man Bilder Zeichnet und es in ASM Befehle umwandelt (mit Farben) das wird aber noch lange dauern


----------



## FastProg (11. Oktober 2003)

So ich habe mich gerade mal an den screen mode 12 herren gesetzt

```
mov ax,0x0012		;12h = 640x480 16
	int 10h			
        mov bx,0xA000  
        mov es,bx          	 
	
	
	mov ecx,0x00		
        mov al,16
	mov byte [es:ecx],al  		

	mov ecx,0x00		
	mov al,1
	mov byte [es:ecx+646],al  
	mov ecx,eax
```

Eigentlich müsste der erste Pixel eine andere Farbe als Pixel Zwei haben, geht aber nicht?
Mit Screen 13 mode hat es funkz

Kann jemand dieses Beispiel mit anderen Farben machen?


----------



## chibisuke (11. Oktober 2003)

also um bmp dateien auf den screen zu bringen ist es relativ einfach...

die BMP datei wird in den speicher geladen, dann überspringst du den BMP header (siehe BMP format spezifikationen)

und dann brauchst du das bild nur noch mit 2 schleifen in den graphikspicher blitten...

im prinzip ist das bild dann ein array als pixeln in der BMP datei..
entsprechend wenn du ein 320x200 pixel großes bild hast, so gehst du her
und sagst du hast das bild aus der datei nun in geladen und nennnst das array bild1

```
mov ecx, 64000
_loop1:
mov eax, _bild1
add eax, ecx
mov bl, [ds:eax]
mov byte [es:ecx], bl
loop _loop1
```

ob das nun im einzelnen mit der dereferenzierung stimmt, weiß ich jetzt net genau, müsst ich ausprobieren..


im mode 12 arbeitet man mit bitmasken...
erstmal setzt du nur schwarz oder weiß, und jedes pixel entspricht einem bit 
nun musst du wenn du andere farben haben willst mit hilfe der graphikregister das plane wechseln und dort das selbe wieder machen.. insgesamt sinds 4 planes daher 16 farben.. das ist allerdings relativ komplex also hab ich mich damit eigendlich nie richtig beschäftigt.
am besten guckt ihr dafür mal in den beschreibungen zum int 10h
siehe funktion 10XX

die hächsteauflösung die direkt im realmode benutzt werden kann ist irgendwas mit 2100 oder so...

wenn ihr über die normalen VGA auflösungen hinaus gehen wollt so müsst ihr euch mit dem VESA standart befassen, erwähnt sei das hier 64KB graphikspeicher nicht mehr ausreichen, aber der addressbereich nur 64KB hatt, entsprechend kommt ihr um s.G. bankswitches nicht herum...
das heißt ihr schreibt zuerst einen teil des graphikspeichers voll mit eurem bild, dann ruft ihn n VESA interupt (über int10h) auf und schaltet die speicherbank um, dann muss man wieder den selben speicherbereich beschreiben nur mit dem unterschied das es n anderer bereich des displays ist...
für näheres dazu siehe bitte int10h funktion $4F00 - $4F0C
sollte jemand auf die idee kommen das im PMode versuchen zu wollen muss er mit dem entsprechenden bios interupt das VESA Protected Mode Interface laden und über die funktionspointer zugreifen.


----------



## FastProg (11. Oktober 2003)

Hi chibisuke

kannst du vielleicht mein Beispiel so um schreiben das einer von den Zwei Punkten eine andere Farbe hat?

Wenn ich das alles als Beispiel habe, kapiere ich es schneller als wenn ich mehrere Seiten durch lesen muss !

Danke


----------



## coolyo (11. Oktober 2003)

*ich schließ mich an*

da schließ ich mich ma an 
kannste plz mal ein beispiel-proggy machen, das ein bild anzeigt ..wär echt nett 

zu den bildern habich nochne frage....in dem, was zuletzt geschrieben wurde hörte es sich eher so an, als könne man die bmp-files direkt ausgeben... muss man sie denn nun compilen oder nicht?


----------



## chibisuke (11. Oktober 2003)

gut ich setz mich nacher mal hin und schreib n beispiel... oder bei gelegenheit vieleicht gleich n tut zum thema...

is leider nur so das ich mein buch wo die register und so beschrieben werden verborgt hab.. naja ich find die infos auch im inet wenns is...

gut erstmal die restlichen biträge hier im forum und dann mach ich das...


und ja das bild wird NICHT rein kompiliert sondern direkt aus der bmp datei geladen...


----------



## coolyo (11. Oktober 2003)

gut..


----------



## chibisuke (11. Oktober 2003)

gut wie versprochen zeig ich hier wie man im mode 12 die graka anspricht...


```
[bits 16]
[org 0x100]


call _SetMode12
call _ClrScreen

mov ax, 13 
mov bx, 3  
mov cx, 639

_loop1:
pusha
call _PlotPixel
popa
dec cx
jnz _loop1

mov ax, 1
mov bx, 5
mov cx, 639

_loop2:
pusha
call _PlotPixel
popa
dec cx
jnz _loop2

mov ah, 08h
int 21h
mov ah, 4ch
int 21h

_SetMode12:
  mov ax, 12h
  int 10h
  mov dx,03ceh
  mov ax,0205h
  out dx,ax
  ret

_ClrScreen:
  mov   ax, 0xA000
  mov   es,ax
  mov   di,00h
  mov   ax,00h
  mov   cx,19200
  rep   stosw
  ret

_PlotPixel:  ;ax = farbe ;bx = y koordiante ;cx = x koordinate
  push ax
  mov   ax,0xA000
  mov   es,ax
  mov   di,bx
  shl   di,6
  shl   bx,4
  add   di,bx
  mov   bx,cx
  shr   bx,3
  add   di,bx
  and   cx,7
  mov   ah,128
  shr   ah,cl
  mov   dx,03ceh
  mov   al,8
  out   dx,ax
  mov   dl,[es:di]
  pop   ax 
  mov   [es:di],al
  ret
```

es handelt sich um ein kleines beispielprogramm das 2 linien auf dem screen zreichnet, für euch interessant ist vermutlich die funktion _PlotPixel

wie man sieht reicht es nicht aus nur einfach die entsprechenden bytes im graphikspeicher anzusprechen, hier muss man auch entsprechend auf die graphikregister noch zugreifen... außerdem wichtig ist etwas was häufig vergessen wird und dann große probleme bereitet, nämlich das man zuerst das byte das man ändert LESEN muss bevor man es schreibt, ansonsten kann es sein das es auf ettlichen graphikkarten nicht funktioniert.

im prinzip jedoch passiert nichts anderes als das zuerst der offset berechnet wird, der dann in di gespeichert ist, dann ein schreibzugriff auf dem graphik controler ausgeführt wird, und dann das byte geschrieben wird.. 


es existiert natürlich für diese aufgabe auch eine bios funktion (ah = 0Ch - int 10h) diese ist jedoch NICHT zu empfehlen da die verarbeitungsgeschwindigkeit der bios funktion etwa 1/100 vom dem beträgt was sie bei einer sauber programmierten treiber funktion hatt... außerdem ist die treiberfunktion auch im pmode anwendbar, man muss einfach nur einen eintrag in der GDT erstellen der auf 0xA0000 zeigt und die konstante von 0xA000 auf den offset der GDT richten...


----------



## FastProg (12. Oktober 2003)

Hi chibisuke

Ist dieses Beispiel für NASM geschrieben?
Ich Frage, weil bei einen anderen Beispiel habe ich einen Teil von diesen Code gesehen und es gab damit probleme!

Ok ich wärde es mal Testen, falls ich wieder Hilfe brauche mit den modus 12
Schreib ich wieder

Danke


----------



## chibisuke (12. Oktober 2003)

ja das ist NASM code...

auf lowlevel ebene benutz ich NASM, JLOC, ALINK, dJGPP, TC
nasm = assembler
jloc = relocator
alink = linker
djgpp = 32bit C++ compiler
tc = 16bit C compiler

alle beispiele die ich poste sind von mir getestet und auch mit dem NASM compiler kompiliert und bei bedanf mit alink gelinkt (nicht erforderlich bei den hier angegebenen beispielen)

die befehlsteile für den assemblier vorgang lautet:

nasmw -fbit -o datei.com datei.asm

entsprechend sollte auch der code keine probleme machen ;-)

ich häng das beispiel von gestern nochmal als assemblierte com datei an...


----------



## coolyo (12. Oktober 2003)

*bild-laden*

mach dann nochma plz n' beispiel zum laden eines bildes....bitte bitte bitte   ;-)


----------



## chibisuke (12. Oktober 2003)

hmmm....

na von mir aus.....dauert aber n wenig...
das heißt frühestens heute abend, eher morgen abend...


----------



## coolyo (12. Oktober 2003)

hmm..schade..wieso denn?
haste so viel anderes zu tun?..oder is der code sooo lang?
..naja..hauptsache du machstes  

schon ma im voraus  ;-)


----------



## chibisuke (12. Oktober 2003)

zum einen weil ich auch andere arbeit hab als da beispielcode zu schreiben... immerhin hab ich nebenbei n komplettes MMO-RPG zu entwickeln...

auf der anderen seite, muss die ganzen bios funktionien für dateihandling nachschlagen und das dauert...

trotzdem hier mal ein stück pseudocode

OpenFile()
file = ReadFileIntoMemory()
CheckFileFormat(file)
BlitFile(file + bitmapheader)

wobei checkfileformat nur prüft ob das bitmap format für den screenmode auch angemessen ist, BlitFile tut nix anderes als das gesamte bild in den graphikspeicher zu kopieren und die graphikregister zu setzen

um das zu verstehen muss man den aufbau des BMP dateiformates kennen... 
die BMP datei enthällt zuerst generelle informationen über das bitmap, den s.G. Header, den man beim blitten dann überspringen muss...
nachdem man ihn übersprungen hatt findet man die bitmap dateien wenn man glück hatt genau in dem format vor das man braucht, dazu muss einfach der screenmode und der bitmapmode angeglichen sein...
das heißt ein 256farb bitmap werde ich im idealfall im mode 13 blitten ein 16farb bitmap werde ich im idealfall im mode12 blitten...

und dann ist eigendlich die gesamte aufgabe noch das array als pixeln richtig im grpahikspeicher abzulegen...eventuell aufpassen wenn die breite des bitmaps ne andere is als die des bildschirms, denn dann kann man nicht direkt ein memcpy auf das gesamte anwenden, sondern muss zeile für zeile kopieren...


----------



## coolyo (12. Oktober 2003)

*linien-test*

also was das beispiel mit den linien angeht... da habich n' prob..
also die com datei  ...und auf meinem eigentlichen rechner  auch die bin datei, dich ich compiled hab..aber wennich genau die selbe bin datei mit meinem testrechner ausführen will (der eine VGA-Karte hat..und bei dem ansonsten auch alles andere funktioniert), dann kommt einfach nur ein schwarzer bildschirm und nix weiter passiert     :sad: :sad: :sad:


----------



## chibisuke (12. Oktober 2003)

schlecht... aber ich wüsste nicht das das irgendwas falsch is... hab den code direct aus ner C lib raus gerissen,  und das hatt bisher immer funktioniert

komisch... naja es gibt aber 3 möglichkeiten die graphikkarte anzusprechen.. nur die andere is n wenig komplexer... mal sehen vieleicht schreib ich bei gelegenheit die assembler funktonen dazu... die 3. is dann über bios...


----------



## coolyo (12. Oktober 2003)

naja..egal....hauptsache is erstma der code zum anzeigen einer bmp-file  ..
......das wär echt schonma ne riiiieeessen hilfe


----------



## chibisuke (13. Oktober 2003)

sorry hab  echt nich die zeit gefunden das in assembler zu realisieren...

aber in C würde es so aussehen:

char image[2048];
char* graphicMemory = (char*) 0x000A0000;
imagestart = &image[sizeof(BITMAPHEADER)]
FILE* datei = fopen("datei.bmp", "r");
fread(datei, image, 2048);
memcpy(image, graphicMemory, ((BITMAPHEADER*)image)->size);

assembler code dazu liefere ich sobald ich dazu komm nach, versprochen...


----------



## FastProg (14. Oktober 2003)

Hi Leute

Mit den Beispiel das zwei linien erstellt habe ich probleme
kann jemand diesen code so umschreiben das der zweite 
Punkt eine andere Farbe hat (es soll so laufen das man 
kein Windows brauch, sondern das Bios ansteuert)


```
mov ax,0x0012		;12h = 640x480 16
	int 10h			
        mov bx,0xA000  
        mov es,bx          	 
	
	
	mov ecx,0x00		
        mov al,16
	mov byte [es:ecx],al  		

	mov ecx,0x00		
	mov al,1
	mov byte [es:ecx+646],al  
	mov ecx,eax
```

Danke


----------



## FastProg (14. Oktober 2003)

Hi Leute

Weiß jemand von euch wie man auf Dateien zu greifen kann (lesen und schreiben) im FAT12

Danke


----------



## coolyo (14. Oktober 2003)

*betriebssystem*

also allen, die irgendetwas direkt mit dem bios machen wollen (also ohne Windows) ...z.B. ein eigenes Betriebssystem erstellen den kannich solange es NICHTS GRAFISCHES werden soll nur FDOS emfehlen.. einfach unter google suchen! FDOS is ein betriebssystem, das auf eine diskette passt und einiges kann ... dazu is der Source frei verfügbar und es is alles bis in detail erklärt (so, wie ich das sehe zumindest deutlich genug ). Es werden fast nur Bios-interrupts benutzt und es is eigentlich leicht zu verstehen. (Nachteile: wie schon angesprochen eben nicht grafisch und es kann nur dateien lesen..schreiben wird nicht unterstützt..aber das dürfte ja eigentlich leicht umzuändern sein)

....ma hoffen, das der assemblercode zum bilder ausgeben bald fertig wird ...... wie gesagt schon ma im voraus  ;-) ;-) ;-)

PS: kennt wer nen funktionierenden guten freeware disassembler?


----------



## FastProg (14. Oktober 2003)

Hi coolyo

Ich habe FDOS schon oft erwähnt, und ich wollte dich aufmerksam machen 
das es bald eine GUI für FDOS geben wird 

Aber kann jemand mein Beispiel oben so um ändern das der zweite Punkt 
eine andere Farbe hat? (Es wäre noch besser wenn 
alles noch Kommentiert wird)

Danke


----------



## FastProg (15. Oktober 2003)

Hi Leute

Hab wieder ein paar Fragen, kann jemand dieses Beispiel so um ändern, dass der zweite Punkt eine andere Farbe hat!
Es ist sehr wichtig! 


```
mov ax,0x0012		;12h = 640x480 16
	int 10h			
        mov bx,0xA000  
        mov es,bx          	 
	
	
	mov ecx,0x00		
        mov al,16
	mov byte [es:ecx],al  		

	mov ecx,0x00		
	mov al,1
	mov byte [es:ecx+646],al  
	mov ecx,eax
```

Und ist es mit tricks möglich mehr Farben als 16 unter den Modus 12 zu bekommen.
Ich habe irgend wo gelesen das man in den modus 13 mit Tricks mehr als 256 Farben bekommen kann

Und eigentlich muss es dieses doch auch für den Modus 12 geben, oder?


----------



## chibisuke (15. Oktober 2003)

also... 1.) Disassembler kann ich ndisasmw empfehlen.. das is der disassembler der mit NASM ausgeliefert wird...

2.) 

```
mov ax,0x12
        int 10h				 
	
        xor ecx, ecx	
        xor edx, edx	
        mov al,0x0C16
        int 21h	

        mov edx, 1	
        mov ecx, 6
        mov al, 0x0C14
        int 21h
```

die einfache variante davon, erwarte aber nicht das du damit hohe frameraten erreichst, da der aufruf von der bios funktion etwa 20 - 30x so lang dauert wie die entsprechenden graphikfunktionen direkt selbst gecodet....

nein du kannst im mode 12 16 farben darstellen und nicht mehr. Na gut ok es gibt eine möglichkeit, aber das erfordert sehr exaktes timing von seite deines graphiktreibers, gute kentnisse der IO maps, und was vor allem wichtig ist, extrem gute kentnisse was das beschreiben der graphik plains betrifft... denn wenn du das machen willst musst du jeden pixel in dem dem moment auf den bildschirm schreiben wo der monitor ihn auch liest, bzw. nur wenige taktzyklen vorher.. das das eigendlich nahezu unmöglich ist muss ich ja wohl kaum erwähnen, schon von daher das die graphikkarte ständig busmaster sein muss... das heißt sowas wie sound, netzwerk, oder auch nur drucker kann nicht gleichzeitig mit graphikzugriff erfolgen...
Ich werde daher diese art des zugriffes auf keinen fall hier erläutern, da es sich hier bestimt um 20 seiten code handelt...

Dateien lesen und schreiben kannst du mir den entweder mit den bios funktionen von int 21h unter dos.. oder ansonsten musst du dir die fat header mit int 13h von der disk hohlen, die parsen und dann mit int 13h die daten lesen, oder selbst direkt über die IO register im DMA modus die daten in den speicher lesen...

und beispiel für graphik.. sobal ich dazu komm liefer ich es euch nach, wird aber vermutlich erst am WE sein, da ich da zuerst noch ettliche bios interupts nachschalgen muss....


----------



## FastProg (16. Oktober 2003)

Danke

Werde etwas herrum experimentieren 
Falls ich wieder Hilfe brauche melde ich mich wieder hier (das kann nicht lange dauern  )


----------



## FastProg (16. Oktober 2003)

Hi
Ich habe eine Datei erstellt, mit den inhalt

```
mov ax,0x12
        int 10h				 
	
        xor ecx, ecx	
        xor edx, edx	
        mov al,0x0C16
        int 21h	

        mov edx, 1	
        mov ecx, 6
        mov al, 0x0C14
        int 21h
```

und das als bin compiliert, das ausgeführt mit FDOS aber es passiert nichts!
Wieso?

FDOS DOWNLOAD bei http://www.visual-opal.de oder http://www.FDOS.tk

kann jemand diesen Code Kommentieren?
Und verbessern falls nötig!
Leider habe ich keine ahnung wie man einen Pixel in modus 12 setzt und die Farbe ändert.

Danke


----------



## chibisuke (18. Oktober 2003)

das liegt daran weil es für DOS geschrieben ist... (int 21h)

die alternative für das pixelsetzen hab ich schon gezeigt, ne 3. möglichkeit gibts noch die ich aber hier sicher nicht zeigen werde, weil das mindestens 3 seiten code sind...


----------



## FastProg (18. Oktober 2003)

Hi

Und wo bekommt man diese drei Seiten?
Vielleich ist das dass was ich brauche  (Drei Seiten  )
Oder gibt es ein gutes buch darüber?


----------



## chibisuke (18. Oktober 2003)

also das ansprechen der graphikplains ist wirklich nichts mehr für leihen... und das is auch nich so einfach das man jetzt sagt so jetzt hab ich 3 seiten assemblercode und jetzt passt das, sondern da musste schon echt ahnung von haben... da musste dann die einzelnen farbbestandteile eineln als bitmasken in den speicher übertragen.. vor allem macht man das auch kaum mehr auf assembler ebene weil der code einfach zu komplex wird..

es gibt viele bücher zum thema graphikprogrammierung, aber in letzter zeit kaum welche die sich mit low-level programmierung beschäftigen...
du kannst aber versuchen ob du irgendwo noch ein etwas älteres buch bekommst zum thema... so in richtung VGA-Graphikprogrammierung unter DOS oder so...

aber ich würd so und so langsam mal abstand von VGA nehmen und mich mit VESA auseinander setzen.... vor allem, weil wenn du VGA kannst kann kommt gleich als nächstes die forderung.. ja jetzt will ich es mal mit 1024x768 und 24bit graphik versuchen... und dann kommste um VESA so und so net mehr rum...

am besten ist es natürlich du suchst dir gleich ne anständige library für solche sachen... http://qlibdos32.sourceforge.net/qlib/about.php gut dir das mal genau an ;-)


----------



## coolyo (18. Oktober 2003)

*?*

?..habich mich da jetzt irgendwie verlesen..oder hat da jemand grad behauptet, dass fdos für DOS geschrieben is?........gehts noch gut
der int 21 is zwar von miraus auch n' Dos interrupt...aber im kernel von fdos wird der int 21h selbst definiert... => es braucht kein DOS um zu laufen...abgesehen davon... wie siehts mit dem bmp-laden aus ? 

zu VESA: ich krieg irgendwie keine VESA-unterstützung hin...und selbst bei fertigen sachen, die eigentlich funzen (MinuetOS) schmierter immer ab, wennich VESA-Unterstützung auswähle..... PC: Athlon XP 1,5 (1,33 GHz), GeForce 3 Ti 500, 256 MB DDR Ram.... woran kanns liegen?...oder is das ein fehler von MinuetOS?

was die höheren sprachen als Assembler angeht, da habich wohl oder übel keine andere wahl als bei Assembler zu bleiben weilich nich programme für dos machen will sondern ein Betriebssystem ... daher bräuchtich für C dann die ganzen files wie "stdio.h" und so .... die ich dann aber angeblich (wie mir gesagt wurde) selbst machen müsste weil die immer von dem entsprechenden betriebssystem abhängig sind ( => keine windows-stdio.h ohne windows und keine linux-stdio.h ohne linux)... also mussich dann ja bei assembler bleiben.. außerdem sind assembler-proggy's ja deutlich kleiner als z.B. C programme 
(selbes ergebnis bei c 10 - 20 mal so groß, wie mit assembler)... wo dann das prob entstehen könnte, dasses irgendwann nichmehr auf eine diskette passt.... vor allem mit den ganzen files wie stdio.h .....und dann.... sollich jedesmal ne cd verbrennen?....... oder es am besten gleich auf die festplatte schreiben...gut..wenn jemand dazu ma n' funzendes tutorial schreiben kann  ......was aber ja wohl kaum passieren wird......insofern....MUHMUHMUH 

PS: weiss jemand, wo's ne tabelle von den ASCII-Key's gibt?... und von den sonder-sonder-zeichen wie z.B. die smily's oder sowas, die manchmal entstehen? <= bei assembler logischer weise ;-)


----------



## chibisuke (18. Oktober 2003)

1.) ich sagte das codestück das ich gepostet hab is für dos, nicht fdos, das haste falsch verstanden

2.) natürlich kannst du höhere sprachen benutzen, und die header dateien sind überalls gleich, aber die lib dateien dazu nicht...

ich hab selbst erfahrung im programmieren von betriebssystemen, schreib nämlich selbst frag an einem, und das is eigedlich fast komplett in C/C++ geschrieben...

natürlich hast du keine libs zur verfügung, aber der witz ist, das du einfach deine funktionen die du brauchst in assembler schreibst und die dan dazu linken kannst.. auf die art und weise kannst du die C sprachkonstrukte benutzen und die funktionalität aber von deinem OS her...

Das die C programme größer sind ist nicht zwangsläufig so... naja fehlt nur um n paar byte..... jedenfalls kommt das bei den meisten OSes daher das da librarys dazu gelinkt werden müssen.. diese haben selbst bereits mehrere KB... 

das einzige was du beachten musst ist, wenn du einen kernel schreibst in C.. dann musst dein loader modul für einen gelinkten kernel ausgelegt sein, das heißt du musst dafür sorgen das der linker code das system nicht crasht, weil normalerweise ist ein kernel zu reloziert und nicht gelinkt,...

die ascii tabelle gbts z.B. in der MSDN nachzulesen...

zu beachten ist, das wenn du n PMode OS schreibst du auf keinen fall die VESA bíos funktionen direkt aufrufen darfst, sonst crasht es... da musst du folgendes machen:
zuerst muss die IDT, LDT, und GDT stehen...
dann machst du
ee = 1
dann bist du im v86 mode... nun rufst du den bios interupt dafür auf, und läst dir das VESA PROTECTED MODE INTERFACE geben... und damit arbeitest du, das sind funktionspointer auf das pmode interface des vesa bios,....

beispiel für BMP liefere ich euch sobald ich endlich dazu komme...


----------



## coolyo (18. Oktober 2003)

axo..hmm...na dann... aber wie kriegich dass denn hin, dasss....achne ....ach mist..... ich kack irgendwie grad voll ab   ...
also wennich das richtig verstanden hab kann man die herder files, wie stdio.h einfach übernehmen... d.h. sozusagen einfach vom Windows klauen und zum eigenen Betriebssystem packen..... und die header dateien graifen dann wiederrum auf library's zu, die dann die eigentliche arbeit verrichten und die ich dann selbst schreiben müsste....richtig?....
(gibtes sowas vielleicht irgendwo schon fertig zum saugen  )

..und... was is MSDN ?..... (bzw. wenns MicrosoftDevelopmentblabla is, dann ...wo findet man da auf der page ne ascii-liste?....ich hab keine gefunden..... nur irgendwelche VB-proggy's dazu)

trotzdem


----------



## chibisuke (19. Oktober 2003)

ja der ANSII standart schlägt vor das die standart header dateien gleich sein sollen..

eine header datei enthält ja noch keine funktionaltät, sie sagt dem compiler nur das da von außerhalb später noch funktionen dazu kommen, sagt ihm die namen und die möglichen parameter der funktion... außerdem reagiert die dann noch auf verschiedene system meist anders, muss man in dem fall einfach n stück anpassen...

wenn du das hast kommt erst der harte teil... wenn du guckst bei deinem c kompiler dann ist da irgendwo eine libc.lib 
das ist die library datei die zu stdio.h stdlib.h conio.h und so weiter gehöhrt... so... diese lib datei ist eine sammlung von funktionen die bereits vorkompiliert sind.. da gibt es dann bei deinem compiler package ein zusatzprogramm dabei, mit dem man solche dateien erzeugen und verändern kann...

nun musst du die funktionen die in den header dateien die du benutzen willst angegeben sind, schreiben, und dann einfach in so eine lib datei zusammenpacken und dann dem compiler sagen das er die benutzen soll anstat der libc.lib

nein die gibts nicht fertig, weil die von system zu system anders sind, ich würd mich aber mal n wenig bei linux umgucken, da liegt der sourcecode von der libc nämlich offen, da kannste dich großteils dann bedienen...


MSDN = Microsoft Development Network
aber wenn ein windows programmierer von der MSDN redet, dann meint er meist die funktionsreferenz davon... entweder zu finden als hilfedatei in VStudio.. oder sonst http://msdn.micosoft.com/


----------



## FastProg (19. Oktober 2003)

Hi Leute

Wie kann man den die Hohen aufloesungen unter NAsm nutzen, wuerde mich ueber ein paar Tutorials freuen


----------



## coolyo (19. Oktober 2003)

*schleife?*

hi,

hab ma ne andere frage 
ich wollte ne schleife machen, bei der man nen buchstaben eingeben kann, der dann logischerweise auch ausgegeben wird....und das so lange, bis enter gedrückt wurde.... aber es is egal, was ich drücke...er kommt noch aus der schleife raus! was is daran falsch?

____________________________________
lesenobdasteilrichtigis:

MOV AH, 00h               ;auf eingabe warten
INT 16h

MOV AH, 0Ah               ;String ausgeben
MOV BH, 1                   ;Bildschirmseite 1
MOV CX, 1                   ;keine wiederholung
MOV BL, 15                 ;Farbe 15: weiß (passend zum blauen BG)
INT 10h

MOV BX, 1                   ;BX = 1
ADD 1, BX                   ;BX = BX+1
CMP BX, 13                 ;BX = 13?
JNE SHORT lesenobdasteilrichtigis        ;wenn BX != 13 dann schleife wiederholen
______________________________________

der schleifenname is zwar e..aber mir is nix besseres eingefallen
was is an dem code falsch?... bitte korregieren ....


----------



## chibisuke (19. Oktober 2003)

is dir schon mal aufgefallen was du da für nen stuss zusammen geschrieben hast?

MOV BX, 1 ;BX = 1
ADD 1, BX ;BX = BX+1
CMP BX, 13 ;BX = 13?
JNE SHORT lesenobdasteilrichtigis ;

der code läst ihn jedesmal prüfen ob 2 == 13 und das ist logischerweise zwangsläufig immer false.. zero flag wird also gecleared beim cmp.. und entsprechend spricht JNE an... folge.. endlosschleife..

2.) glaub ich das du 13d mit 13h verwechselst... 13d = 0Ch also...
und wenn ich es richtig im kopf hab ist enter aber 13h... (\r)

also mach da gefälligst ein

cmp al, 13h
jne lesenobdasteilrichtigis

--------------------------------------------------------------

für höhere auflösungen hab ich schon x mal gesagt in dem thread, musst du die VESA unterstützung benutzen.. 

aber wenn das so weiter geht hier setz ich mich bei gelegenheit echt mal hin und schreib n tut zum thema VESA auf low-level ebene...

draus... das short kannste dir bei bedingten sprüngen so und so schenken, da bei bedingten sprung operationen was anderes als short eh nicht möglich ist..


----------



## coolyo (19. Oktober 2003)

oh...ups...mist...k *rofl*  

gut......  das prob wär dann ja gelöst...

...aber was das mit VESA angeht..... also ich weiss echt nich worauf du dich da beziehst, denn wie ich ne höhere auflösung hinbekomme habich noch nie und nimmer gefragt und das das nur mit VESA geht is mir klar..aber egal....

t h x  & cya

PS: heißtes 
ADD 1, BX

oder
ADD BX, 1


----------



## coolyo (19. Oktober 2003)

wasn' dat fürn dreck...wieso kann man in diesem forum denn kein  t.h.x schreiben
(ohne die punkte gehts nich..da wirds immer gelöscht)


----------



## chibisuke (20. Oktober 2003)

worauf ich mich da beziehe?
na auf dir frage die FastProg vor dir gestellt hatt...

eigendlich heiß es
add ziehloperand. quelloperand

das heiß es muss
add bx, 1

oder in dem fall wohl einfacherweise 
inc bx
 heißen


----------



## coolyo (23. Oktober 2003)

*SSH dekodieren*

moin,

hab ma na gaaanz andere frage... kennt wer ein programm, mit dem man SSH-packete entschlüsseln kann( zumindest SSH 1)? ...oder weiss jemand, ob es überhaupt möglich is?

denn eigentlich müsste es ja möglich sein...

Vorraussetzung:
Vor und nach der SSH-session vollzugriff auf den SSH Server (Linux rechner mit SuSE 7.1) 
Während der session komplette überwachung des transfers.

Ich hab die pakete auch mit Ethereal aufgezeichnet... aber das kann SSH nich entschlüsseln... ;(

plz help!...schon ma im voraus 

Coolyo


----------



## chibisuke (23. Oktober 2003)

das funktioniert nur, wenn du entweder zugriff auf eine der beiden endstellen der verbindung hast wobei du dann die daten an einer stelle abfangen kannst wo sie nicht verschlüsselt sind..
z.B. bei einem SSH tunnel kannst du mit SSH den tunnel auf localhost redirecten und dann unverschlüssekt dahin verbinden...

oder ansonsten... musst du den kompletten transfer haben.. also weg vom ersten SYN musst du alles aufgezeichnet haben...

in dem fall kannst du dir ein programm basteln das mit einer SSH lib die daten entschlüsselt, ist aber nich ganz einfach.. das es sowas fertig gibt ist mir nicht bekannt..


----------



## FastProg (24. Oktober 2003)

Hi Leute

Hat jemand ein gutes Tutorial für VESA?
Würde mich freuen ;-)

Es sollte kein C/C++ verwenden, wenn es ein langer Code ist setze ich ihn in meinen ASM Editor (der leider noch nicht ganz fertig ist). Dort kann man alles in kleine bereiche packen und in andere projekte dazu laden, damit das programmieren mit ASM leichter wird.

Ich glaube, dass ich mal einen Link zu meinen proggi poste, wenn es fertig ist
(Ich habe es mit Visual Basic programmiert)


----------



## chibisuke (24. Oktober 2003)

tutorials zu VESA gibts kaum welche was ich gesehen hab... de fakto.. das einzig nützliche was ich als ich zum thema VESA bisher gefunden hab, ist die spezifikation selbst, und n paar librarys die allesamt in höheren sprachen geschrieben sind...

die spezifikation sagt aus das VESA im realmode initialisiert werden muss (oder im V86 modus)...
int 10h /AX = 4F02h - SET SuperVGA VIDEO MODE
im prinzip das equivalent zu AH = 00h

Int 10/AX=4F05h - VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL
das is für bankswitches...

VESA SuperVGA BIOS v2.0+ - GET PROTECTED-MODE INTERFACE
damit bekommt man das interface im VESA im PMode nutzen zu können

das sind die wichtigsten funktionen.. naja im prinzip ist es dann so wie im mode 13 nur das man eben bei 16bit 2byte nebeneinander für die farbe hatt bei 24bit 3 und bei 32bit 4 und das speicherfenster muss man dann einfach weiterschieben wie mans brauchtl...


----------



## assembler (7. Oktober 2004)

ich möchte testen welches diskettenlaufwerk vorhanden ist

wie geht das?
nomalerweise doch mit  
mov ah,08h 
int 13h
und dann die lösung in bl

funktioniert aber nicht


----------



## assembler (8. Oktober 2004)

*testen welche CPU vorhanden ist*

Hi
Ich möchte feststellen welche CPU vorhanden ist. Ich weiss das, dass mit dem CPUID Befehl geht. Aber den gibt es ers ab dem 80486 Prozessor. Wie kann ich testen welche CPU vorhanden ist vor dem 80486? Also z.B: ob der 80286 oder 80386 vorhanden ist.

Danke!


----------



## FastProg (11. Oktober 2004)

Geh mal auf, http://www.menuetos.org oder so, da findest du ein komplesstes OS, das in Assembler geschrieben wurde, vielleicht hilft dir das weiter


----------



## T0ast3r (24. Januar 2005)

Wo hasst du überhaupt Assembler gelernt
Es gibt keine Bücher davon....


----------



## Dennis Wronka (25. Januar 2005)

T0ast3r hat gesagt.:
			
		

> Wo hasst du überhaupt Assembler gelernt
> Es gibt keine Bücher davon....


Was wie wo? Klar gibt es Buecher ueber ASM. Hab sogar eins. Weiss nur nicht wie's heisst, und kann das leider auch nicht checken da es in "good" old germany ist.


----------



## FBIagent (4. Februar 2005)

Der 12h ist nicht linear im speicher, der 13h schon


----------



## TomTaylor (4. August 2005)

Höhere Auflösungen funktionieren eigentlich sehr gut über den VESA. Jedoch ist die Anwendung wesentlich aufwendiger als für den 320x200x256 Farben-Modus. Dann dieser brauch ja genau nur 64.000 Bytes! Und somit kann der komplette Video-Speicher in einem Segment angesprochen werden.

Bei höheren Auflösungen/Farbtiefen werden jedoch wesentlich mehr Bytes verbraucht. Im VESA ist das über sogenannte "banks" gelöst. Dort hat man je "bank" 64KB zu Verfügung zum Schreiben und Lesen. Für den entsprechenden Bildschirmbereich muss dann die entsprechende "bank" aktiviert sein. Es gibt Interrupt-Aufrufe, die eine "bank" umschalten können... aber viel zu langsam. Es gibt dafür auch eine schnellere Alternative.

Bei VESA kommt dann hinzu, dass bestimmt Funktionen auf der Grafikkarte implementiert sind, die unbedingt zu benutzen sind wenn die Performance nicht arg leiden soll. So gibt es die "Mapping" Funktion zum Verschieben eines Bildschirm-Bereiches (Fensterobjekte) welche aber nur über einen FAR CALL anzusprechen ist. Ausserdem habe ich keine Dokumentation hierzu gefunden.

Falls es jemand interessiert, kann ich Code posten für z.B. 320x200 mit 24 Bit Farbtiefe oder Auflösungenen bis zu über 1600x1200x32 Bit. Alles machbar mit VESA.


----------



## stephsto (9. August 2005)

Hi,

ich bin mir zwar nicht sicher, aber ich glaub das ist im BIOS abgespeichert. Schau dir einfach mal mit debug das BIOS im Speicher an. Liegt von 0 bis 07C00 glaub ich. Ich meine da schon mal Spezifikationen meines Prozessors gefunden zu haben. Für nen normalen PC tut's das allemal.


----------



## billgatesm (9. August 2005)

*Re: testen welche CPU vorhanden ist*



			
				assembler hat gesagt.:
			
		

> Hi
> Ich möchte feststellen welche CPU vorhanden ist. Ich weiss das, dass mit dem CPUID Befehl geht. Aber den gibt es ers ab dem 80486 Prozessor. Wie kann ich testen welche CPU vorhanden ist vor dem 80486? Also z.B: ob der 80286 oder 80386 vorhanden ist.
> 
> Danke!


Diese Frage hast du nicht selber geschrieben. Die hast du kopiert. Also zu faul um selbst zu formulieren und zu schreiben.


----------

