inline asm: dividieren zweier variablen


zico

Member
Joined
Jun 3, 2006
Messages
273
wie das subject schon sagt, möchte ich zwei variablen, welche normalerweise mit C dividiert werden über assembler laufen lassen.

das ganze sieht pseudomäßig in etwa so aus:

for (i=0;i<ende;i++) {
ergebnis = i*((variable1/variable2)+(variable3/variable4)
}

das ganze ist natürlich etwas komplexer.

variable1-4 hier brauchen jede menge CPU-zeit, alleine für die division. Ich frage mich, wie dies mit inline assembler zu lösen wäre.
Sprich, es würde schon reichen, wenn ich var1&2 und var3&4 über asm berechnen könnte.
 
Für welche Architektur?
ARM, also gp2x?
Intel x86, also fuer PC?

Bei Intel Assembler hast Du div,
das ist eigentlich schoen dokumentiert.
Bei ARM muesste ich mich schlau machen,
aber da gibt es sicher eine Dokumentation dazu.

Btw: Du kannst das Programm auch so übersetzen,
dass Du den Assemblercode siehst...

Dann: Was sind das fuer Zahlen?
Int, float, double?

Je nachdem ist das normal, dass das
etwas Rechenzeit braucht...

Fuchs
 
Wenn dich Z80 Assembler ein wenig weiterbringen sollte, dann kannst du dir mal folgende URL anschauen:
http://cpcwiki.com/index.php/Programming:Integer_Division.

Wenn es nicht so auf die Genauigkeit denn mehr auf Geschwindigkeit ankommt, dann kannst du auch mit den Logarithmusgesetzen arbeiten, da die eine Multiplikation/Division auf eine einfache Addition/Subtraktion umwandeln. Da gibts z.B. auf folgenden Link ein Beispiel (Multiplikation):
http://cpcwiki.com/index.php/Progra...t_Unsigned_.28using_log_.2F_antilog_tables.29
 
also nochmal für dich, Fuchs:

Ja, antürlich möchte ich dies aus ARM übersetzen. Das is ja das Problem, dass ich meist nur Code für x86 finde, der ja wohl sehr stark vom ARM code abweicht....

Das ganze ist ein Texturmapper, welcher sehr oft aufgerufen wird und die "lägne" der FOR anweisung durch die Auflösung definiert wird.
Dadurch würde ich es zumindest mal gern versuchen, mit Assembler zu beschleunigen.
 
Gut, zu der ARM Architektur habe
ich auf die Schnelle nur eine Dokumentation
gefunden, und gem. der gibt es keine direkte
Instruktion fuer eine Division. Moeglich also,
dass er es tatsaechlich in Deinem Fall mit mehreren
Subtraktionen versucht, was in der Tat sehr zeitaufwaendig ist.

Wie die Loesung in dem Fall aussieht wurde weiter oben schon beschrieben.

Fuchs
 
hm ich muss zugeben, dass die links zum cpc wiki mir noch etwas zu kryptisch ind um das wirklich zu versthen (ergibt für mich alles keinen zusammenhang - vor allem nicht as inline asm betrifft).

Ich glaub ich muss mich da noch mnehr an wissen aneigenen...

Das Problem ist das suchen und finden von Tutorials.
Gute x86 Tuts gibts en masse, aber war ARM betrifft, ... nix wirkliches für "Anfänger" dabei... zumindest nicht nach meinem verständis (Erklärung, beschreibungen, praktische Anwenderbeispiele).
 
Fuer Anfaenger ist Assembler eh nicht
sonderlich toll, zumindest in meinen Augen.

Ich habe Intel x86 Assembler (und der ist noch heilig)
im Studium, schon das kann bitter sein.

Aber ebend, es ist sicher nichts unmoegliches,
wenn man die Dokumentationen liest.
Etwas ausprobieren dazu kann auch nicht schaden.

Fuchs
 
Naja ein wenig x86 Assembler krieg ich zumindest von der Theorie schon etwas hin... aber ARM... puh...
 
hi Zico

Guck mal da http://tofla.iconbar.com/tofla/arm/arm02/index.htm

"Assembly Language - Division"

und ist für ARM-Processoren.
 
Back
Top