私はARMアセンブリ(Raspberry pi)のプログラムで作業していますが、問題があります。ARMアセンブリ - CMP間違った出力
私はこのコードを持っていますが、下の部分は常に実行しています(スキップ$)。
mov r1, #3
mov r3, #4
add r2, r1, r3
bl Debug
cmp r2, #0x0A
ble skip$
mov r0, #10
sub r0, r0, r1
mov r3, r0
bl Debug
skip$:
何が欠けていますか?
デバッグ機能は、r0-r4を使ってUARTをPCに送信するだけです。私はこれを実行すると
は、最後に、r3は
ローレンスWuyts
編集事前にまだ4
おかげでなければなりません7.次のとおりです。ここで 使用される他の機能があります。
Debug:
push {r0 - r4, lr}
mov r4, r0
mov r0, #10
bl UART_write
mov r0, r4
bl UART_write
mov r0, #11
bl UART_write
mov r0, r1
bl UART_write
mov r0, #12
bl UART_write
mov r0, r2
bl UART_write
mov r0, #13
bl UART_write
mov r0, r3
bl UART_write
pop {r0 - r4, pc}
UART_write:
push {r0 - r2, lr}
ldr r1, =UART0_FR
wait_write$:
ldr r2, [r1]
tst r2, #0x20
bne wait_write$
ldr r1, =UART0_DR
and r0, #0x000000ff
str r0, [r1]
pop {r0 - r2, pc}
第二編集: 私は、スタックポインタのセットアップにこのコードを使用しました。
setup_stack:
mov r0, #0xD1 @ FIQ
msr cpsr, r0
ldr sp, =stack_fiq
mov r0, #0xD2 @ IRQ
msr cpsr, r0
ldr sp, =stack_irq
mov r0, #0xD7 @ ABT
msr cpsr, r0
ldr sp, =stack_abt
mov r0, #0xDB @ UND
msr cpsr, r0
ldr sp, =stack_und
mov r0, #0xDF @ SYS
msr cpsr, r0
ldr sp, =stack_sys
mov r0, #0xD3 @ SVC
msr cpsr, r0
ldr sp, =stack_svc
mov pc, lr
そして、これが私のリンカーである:
.= ALIGN(0x1000);
/* Stack space */
. = . + 0x800;
stack_svc = .;
. = . + 0x800;
stack_und = .;
. = . + 0x800;
stack_abt = .;
. = . + 0x800;
stack_irq = .;
. = . + 0x800;
stack_fiq = .;
. = . + 0x400000;
stack_sys = .;
それで 'Debug'はそれが使用するすべてのレジスタを保存して復元しますか? – Notlikethat
@Notlikethatはい、私は使用されたすべてのレジスタにプッシュとポップを使用しました。 –
blデバッグ行をコメントアウトすると失敗しますか? –