Also mein Code konvertiert derzeit eine Zeichenfolge in eine ganze Zahl. Mein Code funktioniert derzeit und ist funktional, aber ich brauche ein "-" am Anfang der Eingabe, um zu beurteilen, ob es ein Negativ ist oder nicht. Ich habe keine Ahnung, wie ich das machen soll und finde keine Quellen. Ich übergebe gerade (test3: .asciz "-48") ins Register r0. und wenn ich im Debugger laufe, erhalte ich 45. hier ist mein Code als Referenz.ARM Assembly akzeptiert '-'
.global stoi
.text
stoi:
push {r4,r5,r6,r8,r9,lr}
@r0 = buffer
mov r1,#0 @r1 = n = 0
mov r9,#0 @buffer counter
mov r4,#48 @0 checker
mov r5,#57 @9 checker
b 5f
5:
ldrb r3,[r0,r9] @r3 = c
b 1f
1:
cmp r3,r4 @cmp c to 0(48 in ASCII)
bge 2f
b 4f
2:
cmp r3,r5 @cmp c to 9(57 in ASCII)
ble 3f
b 4f
3:
sub r6,r3,#'0' @r6 = (c - '0')
@strb r6,[r0,r9]
add r1,r1,r1,lsl#2 @r1 = n * 10
add r1,r1,r1,lsl#0
add r1,r1,r6 @n = n * 10 + (c - '0')
add r9,r9,#1 @add to buffer
b 5b
4:
mov r0,r1
pop {r4,r5,r6,r8,r9,pc}
Hinweis: Beginnen Sie mit der Implementierung des Algorithmus in einer Hochsprache, in der Sie arbeiten bequem, dann stufen Sie die Referenzimplementierung allmählich auf die Ebene entsprechen und Fähigkeiten des Assembler-Codes. – doynax
danke für den Ratschlag, aber ich bin neu in der Programmierwelt und die einzige Sprache, die ich bisher gelernt habe, ist Python. und das ist eine einfache "int (string)". –
Mein Punkt ist, dass Assemblersprachendetails eine Ablenkung vom Verstehen des Algorithmus sind. Beginnen Sie mit der Skizzierung des Prinzips, wie Sie es in Python manuell ausführen würden, ohne die unterstützenden Funktionen zu verwenden, durch ein Flussdiagramm oder eine andere Methode. Setzen Sie sich dann hin und implementieren Sie den Assemblercode. – doynax