装配中的BEQ不分支

时间:2018-07-02 17:02:56

标签: assembly arm stm32 stm

我正在编写一个使某些指示灯闪烁的程序。用户将输入灯光切换和灯光顺序之间的延迟时间。因此,例如,用户将输入“ string_test 500000 123456”。两者之间的延迟将是500000,我认为它小于毫秒,因为500000相当快。数字123456将是LED编号。所以1-2-3等。当我通过调试器运行代码时,除了卡在BEQ上之外,其他所有操作都应按预期进行。如果我正常运行代码,则只有第一个灯亮起然后熄灭,该程序。我仍然必须清理代码,将延迟更改为更用户友好的方式,依此类推,但是我需要帮助的是为什么当r6为0时为什么它不在beq分支?我附加了我的汇编代码,因为我正在获取值从用户那里没问题,我也可以在调试器中循环通过LED,而没有问题,这使我相信组装方面的问题。 ASM文件中还有其他功能,这可能有问题吗?我在ARM组装中使用STM32板。

@@ Function Header Block
    .align  2              @ Code alignment - 2^n alignment (n=2)
                            @ This causes the assembler to use 8 byte alignment

    .syntax unified         @ Sets the instruction set to the new unified ARM + THUMB
                            @ instructions. The default is divided (separate instruction sets)

    .global string_test

    .code   16              @ 16bit THUMB code (BOTH .code and .thumb_func are required)
    .thumb_func             @ Specifies that the following symbol is the name of a THUMB
                            @ encoded function. Necessary for interlinking between ARM and THUMB code.`enter code here`

    .type   string_test, %function   @ Declares that the symbol is a function (not strictly required)

@ Function Declaration : int string_test(int delay,char *p, int count)
@
@ Input: r0, r1 , r2 (i.e. r0 holds the delay, r1 holds the lights, r2 holds the number of elements in the array(COUNT))
@ Returns: r0
@ 

@ Here is the actual function
string_test:

    push { r0, r1, r4-r7, lr}   @push the registers I am using to the stack
    mov r5, r0  @Move the delay size into r5
    mov r6, r2  @Move the array size into r6

loop:

    ldrb r7, [r1]
    mov r8, r1
    sub r7, #48

    mov r0, r7                  @move the value in r7 to r0 so BSP_LED_Toggle can use it 
    bl   BSP_LED_Toggle

    bl busy_delay

    mov r0, r7                  @move the value in r7 to r0 so BSP_LED_Toggle can use it 
    bl   BSP_LED_Toggle

    bl busy_delay
    mov r1, r8
    add r1, #1

    sub r6, #1
    cmp r6, #0

    beq endLoop

    b loop

endLoop:

    pop { r0, r1, r4-r7, lr}   @pop the registers I am using to the stack
    bx lr

我还注意到BEQ正在尝试使用xPSR寄存器

0 个答案:

没有答案