Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Assembler » Zeichen einer Zeichenkette zählen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.11.2008, 18:30 Uhr
mydigitalme



Hi Leute.
Ich bin absoluter Assembler-Neuling und ich muss sagen ich hab doch einige Probleme.

Ich hab ein Programm vorgegeben bekommen und soll ein Unterprogramm schreiben, in welchem die Anzahl der Zeichen einer Zeichenkette gezählt werden sollen.


Code:
; --------------- Daten-Bereich -------------------------------------
   AREA   Daten, DATA, READWRITE, ALIGN=4

; Speicher fuer Stack
STACK  SPACE  400
Top_Stack

; --------------- Konstanten-Bereich --------------------------------
   AREA   Konstanten, CODE, READONLY, ALIGN=4

; Zeichenketten zum Test
STRING1      DCB    "Hello World", 0
STRING2        DCB    "AAAA", 0
STRING3        DCB    0


; --------------- Programm-Bereich ----------------------------------
   AREA    RESET, CODE, READONLY, ALIGN=4
; Einsprungstelle nach Reset
                EXPORT     Reset_Handler
Reset_Handler
                LDR     SP,=Top_Stack   ; stack-Pointer laden

                LDR     R0,=STRING1
                BL      strlen
                
; Ende des Hauptprogramms
endlos            B       endlos

;********************************************************************
;* Hier das eigene Unter-Programm einfügen                            *
;********************************************************************
strlen              
               ADD R1, #0
loop            CMP R0, R1
        BEQ done
        ADD R1, R1, #1
        B loop
done
    B endlos


;********************************************************************
;* Ende des eigenen Unter-Programms                                    *
;********************************************************************

   END



Nun zählt er allerdings nicht die Zeichen sondern den Registerwert.
Also steht in Register R0 4030 und im Register R1 auch.

Habt ihr ne Idee wie ich das lösen kann?

Gruß
mydigitalme

Dieser Post wurde am 17.11.2008 um 09:06 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.11.2008, 23:42 Uhr
Hans
Library Walker
(Operator)


also wie PC-Assembler sieht es nicht gerade aus. Auf was für'n Prozessor soll das denn laufen?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.06.2009, 22:14 Uhr
Pablo
Supertux
(Operator)



Zitat von Hans:
also wie PC-Assembler sieht es nicht gerade aus.


ist es auch nicht, das ist ARM Code.

@mydigitalme: damit bqn, usw benutzt werden kann, müssen die status bits des CPSR gesetzt werden.


Code:
strlen:
stmfd   sp!, {r1-r3, lr} ; r1-r3, lr auf Stack sichern
mov r1, #0    ; r1 := 0
mov r2, #0    ; r2 := 0
test_zero_byte:
ldrs r3, [r0, r1] ; r3 := r0[r1/4] das s am Ende von ldr setzt die Status bits
moveq r0, r2  ; r0 := r2, nur dann, wenn r3 == 0
ldmfdeq  sp!, {r1-r3, pc} ; r1-r3 wiederherstellen und zurückspringen ,
                                  ; nur dann, wenn r3 == 0
add r2, r2, #1    ; r2++
add r1, r1, #4    ; r1 := 4
b test_zero_byte


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 04.06.2009 um 22:39 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.07.2009, 00:21 Uhr
Hans
Library Walker
(Operator)


Hi Pablo,

ist ja nett, das Du mir die Frage noch beantwortet hast, was für'n Assembler das ist.
Aber dem Fragesteller dürfte das mittlerweile wahrscheinlich egal sein, weil die Frage ja schon ein halbes Jahr alt ist, und er auf meine Nachfrage ja nicht reagiert hat.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.07.2009, 22:10 Uhr
Pablo
Supertux
(Operator)



Zitat von Hans:

ist ja nett, das Du mir die Frage noch beantwortet hast, was für'n Assembler das ist.


hab oben bereits geschrieben: ARM
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Assembler ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: