2013-12-14 113 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