Kurs: Kleines Ensamblador ABC. Das hier se no komplette Anleitung ser, en Ensamblador a erlernen. Aber lo debería una Profano-User gestatten, erste Assemblerprogämmchen a redactar.
Zunächst una vez: Für Ensamblador benötigt uno no grosse Anzahl de Befehlen, con 10 Befehlen (total hay encima 90) es uno ya bien bedient, alles otro es unnütz, porque el MASM32 Ensamblador High-Level-Syntax (.mientras que / .endw / .if / .endif usw.) unterstützt. Und su es una Profano-User ya el meiste bekannt.
In Ensamblador hay Register, el son Speicherbereiche, el 4 Byte (Largo-Int) groß son. Einige Register dürfen wahlweise auch sólo 1 oder 2 Bytes groß ser. Diese Register heißen eax, ebx, ecx, edx, edi y esi. Dann hay todavía ebp, el ellos aber primero salvo acht dejar debería. Und lo son todavía esp, el es auch primero tabu para ellos. Zudem benutzt Ensamblador esp como Stackpointer.
Diese Register puede auch como Integer oder Byte vorkommen. Als Integer heißen ellos entonces ax, bx, cx, dx, di y si.
Als Byte, como hay una vez el HiByte y el LoByte, en diesem Formato heißen ellos entonces ah y al, bh y bl, ch y cl y todavía dh y dl. Edi y esi puede sólo como Largo-Int oder Integer benutzt voluntad.
Lo dürfen siempre sólo zwei Register con el selben Byte-Größe zusammen benutzt voluntad !!!
El Tarea uno Registers: Ein Register kann una Zahl zwischenspeichern y Ensamblador rechnet en algunos Befehlen con el Werten einiger Register aktualisiert esta selbstständig. El Register son also para speichern y para rechnen como. Variables hay natürlich auch.
Hier unos pocos Beipspiele: KompilierenMarcaSeparaciónWerte dd 0,0,4,6,874,414425 ;6 Long-Ints
Zahlen dw 45,263,4663 ;6 Integer
dw 364,67,3
Nochmehr db 4,5,1,90,34 ;5 Bytes
Text db Hallo,0 ;Und ein 6 bytes langer String (immer mit Nullbyte !!!)/pre> Kommen wir para ersten y wichtigsten Befehl: mov. Mov es para Move y heißt verschiebe. Se puede así Pagar en una Register mover oder una Registerwert en una más Register kopieren. Der linke Valor es el Ziel, el rechte Valor Es el Quelle. KompilierenMarcaSeparación Add addiert zwei Werte miteinander y schreibt el neuen Valor en el linke Register: KompilierenMarcaSeparación Sub subtrahiert zwei Werte y schreibt el neuen Valor en el linke Register: KompilierenMarcaSeparación Mul multipliziert zwei Werte y schreibt el neuen Valor después de eax. En uno Multiplikation dürfen sólo eax y edx verwendet voluntad. Will uno vorzeichenbehaftete Pagar multiplizieren, entonces muß anstatt el mul el imul verwendet voluntad. mul es en el Ausführung pero más rápido.. KompilierenMarcaSeparación Div dividiert zwei Pagar. An el Division son drei Register daran beteiligt, eax, edx y una Register ihrer Wahl. edx muß Null ser ! KompilierenMarcaSeparación So ahora puede wir schonmal rechnen.
Manchmal wünschen nosotros aber todavía mehr Register. El gibts pero no. Aber wir puede el Stack como Registerablage mißbrauchen.
Mit push legen wir una variable oder una Register en el Stack de. KompilierenMarcaSeparación Mit pop puede wir valor otra vez de Stack runternehmen. Das muß aber en umgekehrter Reihenfolge passieren. KompilierenMarcaSeparación Stellt euch el Stack como una Stapel con Briefen antes. Wenn Yo drei Briefe daraufpacke, entonces muß Yo el beiden obersten otra vez wegräumen, en a el ersten el drei Briefe a gelangen.
Jmp gleicht Profans Goto y se para Schleifen y Sprünge benutzt. KompilierenMarcaSeparación Lea es ähnlich como mov. Nur übergibt lea no valor uno Variables oder uno Registers, pero el Zeiger en el Variable/Register. KompilierenMarcaSeparaciónjmp más ;Datenbereich überspringen
data dd 333,444,555,666 ;Hier 4 Longints
más:
mov eax,data ;In eax es ahora 333. Der erste Valor de data se übergeben
lea edx,data ;In edx es ahora el Zeiger en data
mov eax,[edx+0] ;333 después de eax. Das +0 podría hier weggelassen voluntad
mov ebx,[edx+4] ;444 después de ebx
mov ecx,[edx+8] ;555 después de ecx
mov esi,[edx+12] ;666 después de esi
mov eax,222 ;222 después de eax
mov [edx+4],eax ;222 después de daten+4. El 444 se also por 222 ausgetauscht.
Ups, el eckigen Klammern bedeuten, el no Registerinhalt transferencia se, pero el Inhalt, en el el Register zeigt.
Invoke es eigentlich kein richtiger Befehl, pero auch ya High-Level-Syntax. invoke startet una API oder una Dll-Función. Übergeben voluntad todos nötigen Parámetro. KompilierenMarcaSeparación Wenn el API una Rückgabewert übergibt, es él después de el Aufruf en el Register eax. addr speicherbereich übergibt el Zeiger en una Variablenspeicher, es aber sólo en invoke gestattet. Ebensogut hätte uno escribir puede: KompilierenMarcaSeparación So, el wären el versprochenen 10 Befehle Aber como puede wir ahora Register y Variables vergleichen y Bedingungen y Verzweigungen programa ? Ganz simplemente, el Rest puede wir con High-Level-Syntax hacer. Ähnlich como en Profano...
.mientras que y .endw es el Assemblergegenstück a Profans Mientras que y EndWhile. KompilierenMarcaSeparación .romper y .continue hay auch, genauso como en Profano.
Für Bedingungen y Verzweigungen hay .if, .elsif, .más y .endif. Und el funktioniert como en Profano KompilierenMarcaSeparación Das == es de paso el Gleichzeichen.Weitere Vergleichsoperatoren son: KompilierenMarcaSeparación Sollen mehrere Bedingungen abgefragt voluntad, entonces son cada Bedingungen en Klammen a conjunto, z.B. .if (eax==0) && (ebx>=0).
Ein Synonym para Profans whileloop hay ebenfalls.Es mittels uno .repeat / .until Bucle: KompilierenMarcaSeparación Un .repeat / .until Bucle kann ebenfalls mittels .romper verlassen, y mittels .continue neu comenzó voluntad.
So, hier endet unser Ensamblador Crashkurs. Yo wirklich alles Unnötige weggelassen. y somit el User el Möglichkeit gegeben, de Grund en anzufangen. Lo son todavía viele viele Befehle mehr, aber el meisten son wirklich por konfortablen High-Level Befehle ersetzt worden. Ein gute Auflistung aller Befehle hay hier: [...] (auch en el Anhang para Runterladen)
Yo habe hier auch darauf verzichtet, irgendwelche Optimierungen vorzunehmen (xor eax,eax anstatt mov eax,0), sólo porque lo unos pocos Taktzyklen más rápido es. Ensamblador es wirklich así sauschnell y el neuen Prozessoren trabajo tan bueno, el solche Optimierungen kaum todavía qué hermachen.
Lo lohnt se , el komplette MASM32 Paket (Freeware) runterzuladen.
Moderation: El einfachste Möglichkeit Inline-Ensamblador en seinen Programmen utilizarse, es en nativen Características: [...] Ejemplo: KompilierenMarcaSeparación |