- Problem:
Ich versuche, die ITEE EQ dh '-If-Then Else-Else Equal' Block, wenn R6 an die Arbeit zu machen == 0, mit THEN in das END Etikett Verzweigungen, aber der Assembler ein Fehler auf der Leitung rief: BEQ ENDARMv7-M Montage ITEE Verwendung
- Programminfo:
Ich mache ein Programm, das in pertinence mit Optimierung ist. Ich benutze eine Gradientenabsenkung, um zu dem Punkt zu konvergieren, wo der Gradient 0 ist, um die Lösung x * zu finden, die eine Funktion f (x) minimiert. Ich benutze C-Sprache, um eine Assembly-Funktion aufzurufen, die dieses Programm hier ist.
Hier ist mein Programm, in dem die Fehler ist:
CMP R6, #0 @ Compare f'(x) with 0
ITEE EQ @ If R6 == 0, Then-Else-Else
BEQ END @ Calls END label if equal
SUBNE R0, R6 @ Change R0(x) in the opp direction of gradient to get lower value of f(x) if not equal
BNE optimize @ Branch to optimize if not equal
Dies ist mein erstes Montageprogramm die NXP LPC1769 für eine Schule Zuordnung verwenden. Lass mich wissen, was ich vermisse oder was ich falsch gemacht habe. Vielen Dank!
Hier ist mein ganzes Programm:
.syntax unified
.cpu cortex-m3
.thumb
.align 2
.global optimize
.thumb_func
optimize:
@ Write optimization function in assembly language here
MOV R5, INLAMBDA @ R5 holds value of inverse lambda(10) ie to eliminate floating point
LDR R6, #2 @ Load R6 with value '2' ie constant of f'(x)
MUL R6, R1, R6 @ Multiply R6(2) with R1(a) & store to R6(results)
MLA R6, R6, R0, R2 @ Multiply R6(results) with R0(x) & sum with R2(b) to get f'(x). Store & update results to R6
SDIV R6, R5 @ Divide R6(results) by R5(1/lambda) to get f'(x) * lambda
CMP R6, #0 @ Compare f'(x) with 0
ITEE EQ @ If R6 == 0, Then-Else-Else
BEQ END @ Calls END label if equal
SUBNE R0, R6 @ Change R0(x) in the opp direction of gradient to get lower value of f(x) if not equal
BNE optimize @ Branch to optimize if not equal
@ End label
END:
BX LR
@ Define constant values
CONST: .word 123
INLAMBDA: .word 10 @ Inverse lambda 1/lambda(0.1) is 10
Nachricht genau gesagt, der Fehler, was das Problem ist:
Mit anderen Worten: Ihre erste 5-Zeilen-Snippet kann einfach ausgedrückt werden als 'Fehler: Zweig letzte Befehl sein muss, in der IT-Block - 'beq END'' –
Es sei denn, es war der Fehler von armasm: "A1603E: Diese Anweisung im IT-Block hat UNPRÄZISIERBARE Ergebnisse", was eher weniger klar ist, oder vielleicht ein anderer, noch weniger hilfreicher Assembler. In jedem Fall ist es immer gut, die Fehlermeldung _specific_ in die Frage selbst einzufügen, nicht zuletzt, weil das erste, was viele Leute mit einem unbekannten Fehler machen, es in eine Suchmaschine einfügen, um zu sehen, was auftaucht. – Notlikethat