-1

这个 Keil uVision 程序应该加载一个正整数 ASCII 数字(例如 1234)。该程序应将其转换为寄存器 R1 中的 BCD 编码数字,以及寄存器 2 中的 HEX 数字......有人可以解释一下它在下面的作用吗?尤其 :

MOV     R4,#10

AND     R1,R3,#0xF
MLA     R2,R4,R2,R3

???这是程序:

LDR R0, =Wert ; Pointer laden
    LDR R1,[R0]
    BL KONVERT ; Unterprogramm KONVERT aufrufen
endlos         B        endlos


KONVERT
    LDRB    R3,[R0],#1 ; Byte laden
    AND     R1,R3,#0xF ; ASCII-HEX-Wandlung
    MOV     R2,R1 ; HEX-Zahl
    MOV     R4,#10

    LDRB    R3,[R0],#1 ; nächstes laden
    AND     R3,R3,#0xF ; ASCII-Hex-Wandlung
    ORR     R1,R3,R1,LSL #4 ; BCD-Wert bilden
    MLA     R2,R4,R2,R3 ; HEX-Zahl

    LDRB    R3,[R0],#1 ; nächstes laden
    AND     R3,R3,#0xF ; ASCII-Hex-Wandlung
    ORR     R1,R3,R1,LSL #4 ; BCD-Wert bilden
    MLA     R2,R4,R2,R3 ; HEX-Zahl

    LDRB    R3,[R0],#1 ; nächstes laden
    AND     R3,R3,#0xF ; ASCII-Hex-Wandlung
    ORR     R1,R3,R1,LSL #4 ; BCD-Wert bilden
    MLA     R2,R4,R2,R3 ; HEX-Zahl

    BX      LR ; Rücksprung
4

1 回答 1

1
MOV     R4,#10
; loads constant 10 decimal into R4

AND     R1,R3,#0xF
; 0x0F & R3 are stored in R1 (AND operation). This is used to remove the 0x30 offset of the numbers 0-9 in ASCII

MLA     R2,R4,R2,R3
; (R2 * R4) + R3 are stored in R2 (Multiply-Accumulate operation)

ARM 信息中心是解决此类问题的良好起点。

于 2013-12-17T21:20:46.957 回答