2013-12-14 110 views
-1

此的Keil uVision程序应该加载一个正整数ASCII数字(例如1234)。该方案应该将其转换为BCD码数字在注册R1,并在注册2十六进制数... 有人可以解释我下面做什么的? 尤其:的Keil:汇编程序,ASCII号码转换成BCD和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 
+0

I'T相当有据可查的,所以问题出在哪里? – Devolus

+0

如果您不懂德语,可以使用http://translate.google.com/。 – nrz

+0

MOV R4,#10没有记录,并且谢谢你没有帮助.. – user2774480

回答

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 Infocenter对于这样的问题一个很好的起点。

+0

它有什么用来将常量10加载到R4中? – user2774480

+0

它用于在r2中构建十六进制数(HEX-Zahl)。例如。你有一个像1234那样的字符串,即“一千二百三十四”。您从最高有效位数开始读取,乘以10并添加下一个数字,乘以10,依此类推。 – Manu3l0us

+0

(((((1 * 10)2)* 10)3)* 10)+ 4 = 1234 – Manu3l0us