Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

arm assembler
Gehe zu Seite 1, 2  Weiter
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Informatik-Forum -> arm assembler
 
Autor Nachricht
skizZ
Full Member
Benutzer-Profile anzeigen
Full Member


Anmeldungsdatum: 01.11.2006
Beiträge: 461
Wohnort: Darmstadt

BeitragVerfasst am: 26 Jun 2008 - 09:43:12    Titel: arm assembler

Hallo,

ich soll in ARM-Assembler ein Unterprogramm schreiben, welches den Absolutbetrag zurückliefert. Dabei soll die APCS Konvention beachtet werden.

Dafür habe ich genau 5 Zeilen. Leider weiß ich nicht, ob es den Befehl "abs" im ARM Assembler gibt um den Absolutbetrag zu bilden.

Code:
abs:   mov r3, r0                   //Parameter in r3 schreiben
   abs r3      //Absolutbetrag bilden   
                mov r0, r3                 //Ergebnis zurück in R0





So, wie genau würde nun der Rücksprung funktionieren?
Patric-01
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 23.06.2008
Beiträge: 6

BeitragVerfasst am: 26 Jun 2008 - 10:40:46    Titel:

Hi,

Also rücksprung musst du einfach mit "RET" machen,
aber dann musst du das "unterprogramm" im Hauptprogramm via "CALL" aufrufen, also so hab ich das in Erinnerung.
Und bezüglich Befehl ABS, kann ich mir nich vorstellen das es den gibt wär ja sonst irgendwie zu Einfach die Aufgabe?!
Und was mich noch dazu einfällt, ARM basiert ja auf dem RISC-Konzept, das heist es es wird auf komplexe Befehle verzichtet die mehrer CPU zyklen benötigen.
Ist jetzt halb bei ABS so die Frage, nen ARM befehlssatz hab ich grad nich auf die schnelle gefunden.

Aber man kanns ja auch leicht anderst machen.
Wenn das bit an höchstwertigster Stelle 1 ist -> negative Zahl (wegen 2er Komplement)
dann - 1 rechnen und dann invertieren und voila hat man die Zahl blos positive.
Und wenn das bit eh 0 ist is se sowieso scho positive

Und das schafft man sicherlich in 5 Zeilen ;P

Grüße
smoother
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 05.09.2006
Beiträge: 506
Wohnort: Hannover

BeitragVerfasst am: 26 Jun 2008 - 13:13:30    Titel:

siehe auch hier: http://support.microsoft.com/kb/q31810/ http://www.dpgraph.com/assembly.html (mal nach " Absolute value of an integer" suchen)
skizZ
Full Member
Benutzer-Profile anzeigen
Full Member


Anmeldungsdatum: 01.11.2006
Beiträge: 461
Wohnort: Darmstadt

BeitragVerfasst am: 26 Jun 2008 - 13:23:42    Titel:

Also danke erstmal, aber das mit dem "call" und "ret" passt nicht zum ARM-Prozessor Smile Das gehört zur ia32 Architektur.

Auch der Link von dir bezieht sich nicht auf ARM, die Idee ist zwar gut, aber ob es solche Befehle für ARM gibt?

Das dumme ist, dass es sehr schwer ist eine Befehlsliste für ARM zu finden und das Script offenbart auch nicht wirklich alle Befehle Very Happy

Also nächster Versuch bitte Smile
skizZ
Full Member
Benutzer-Profile anzeigen
Full Member


Anmeldungsdatum: 01.11.2006
Beiträge: 461
Wohnort: Darmstadt

BeitragVerfasst am: 26 Jun 2008 - 13:35:11    Titel:

Was haltet ihr davon?

Code:
abs:       mov r3, r0   //Parameter in r3 schreiben
       cmp r3, #0   //r3 mit 0 vergleichen
       bge return   //wenn >= 0, dann springe zu return
       neg r0, r0   //wenn kleiner 0, negiere
:return       mov pc, lr   //rückgabe
skizZ
Full Member
Benutzer-Profile anzeigen
Full Member


Anmeldungsdatum: 01.11.2006
Beiträge: 461
Wohnort: Darmstadt

BeitragVerfasst am: 26 Jun 2008 - 13:41:10    Titel:

Code:
abs:       pop r0   //Parameter aus Speicher holen
       cmp r0, #0   //r0 mit 0 vergleichen
       bge return   //wenn >= 0, dann springe zu return
       neg r0, r0   //wenn kleiner 0, negiere
:return       mov pc, r0   //rückgabe


da man keinen beitrag im moment editieren kann, poste ich neu Sad
Patric-01
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 23.06.2008
Beiträge: 6

BeitragVerfasst am: 26 Jun 2008 - 14:02:53    Titel:

sieht gut aus nur musst du noch eins abziehen bevor dus invertierst weils als zweier komplement und nicht als einer komplement dargestellt wird

http://de.wikipedia.org/wiki/Zweierkomplement

und wegen call und ret, dachte das geht überall ;P
skizZ
Full Member
Benutzer-Profile anzeigen
Full Member


Anmeldungsdatum: 01.11.2006
Beiträge: 461
Wohnort: Darmstadt

BeitragVerfasst am: 26 Jun 2008 - 19:38:17    Titel:

Code:

abs:          cmp r0, #0   //r0 mit 0 vergleichen
                bge return   //wenn >= 0, dann springe zu return
                neg r0, r0   //wenn kleiner 0, negiere
                b return    //Return
:return      mov pc, r0   //rückgabe



So funktioniert es, ich muss kein -1 mehr machen Smile
M.T.Lars
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 16.04.2009
Beiträge: 2
Wohnort: Ungarn

BeitragVerfasst am: 16 Apr 2009 - 15:09:48    Titel:

CPU ARM ASSEMBLER

ABS. WERT (R0) AUSRECHNEN

TEXT:
.........1, WERT STEHT IN R0 (32 BIT)
.........2, MANN PRÜFT OB WERT ÜBERHAUPT NEGATIV IST (BIT 31 SET?)
.........3, WENN JA DAN NEGIERT ES. (0-WERT)
.........4, ERGEBNIS STEHT IN R0

(ICH BENUTZE MEIN OPCODES, ABER DIE HEXCODE FÜR DIE BEFEHLE SIND VORHANDEN)

ABS:............................................; R0=WERT (32 BIT)
(E3500480) TSUB 0 #80000000.....; WERT R0 NEGATIV?
(82600000) SUBR.HI 0 #0.............; JA DANN 0-WERT
..................................................; AB HIER STEHT IN R0 DER
..................................................; ABS WERT ZU VERFÜGUNG
(E1A0F00E) RTS............................; END
M.T.Lars
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 16.04.2009
Beiträge: 2
Wohnort: Ungarn

BeitragVerfasst am: 16 Apr 2009 - 15:36:17    Titel:

Code:

CPU ARM ASSEMBLER
 
ABS. WERT (R0) AUSRECHNEN
TEXT: 1, WERT STEHT IN R0 (32 BIT)
      2, MANN PRÜFT OB WERT ÜBERHAUPT NEGATIV IST (BIT 31 SET?)
      3, WENN JA DAN NEGIERT ES. (0-WERT)
      4, ERGEBNIS STEHT IN R0

* ICH BENUTZE MEIN OPCODES, ABER DIE HEXCODE FÜR DIE BEFEHLE SIND VORHANDEN

ABS:                             ; R0=WERT (32 BIT)
 (E3500480) TSUB 0 #80000000     ; WERT R0 NEGATIV?
 (82600000) SUBR.HI 0 #0         ; JA DANN 0-WERT
            ...                  ; AB HIER STEHT IN R0 DER ABS WERT ZU VERFÜGUNG
 (E1A0F00E) RTS                  ; ENDE
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Informatik-Forum -> arm assembler
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum