2011-10-17 18 views
6

Tôi đang gặp sự cố khi giải mã khối mã lắp ráp này. Giá trị của r1 sẽ là bao nhiêu và tôi sẽ đến đó bằng cách nào?movw và movt trong lắp ráp cánh tay

3242ba66 f6454118 movw r1, 0x5c18 
3242ba6a  466f mov  r7, sp 
3242ba6c f6c0415a movt r1, 0xc5a 
3242ba70 f2460002 movw r0, 0x6002 
3242ba74 f6c0405a movt r0, 0xc5a 
3242ba78  4479 add  r1, pc 
3242ba7a  4478 add  r0, pc 
3242ba7c  6809 ldr  r1, [r1, #0] 

Trả lời

26

movw theo sau là một movt là một cách phổ biến để nạp một giá trị 32-bit vào một thanh ghi. Nó tương đương với HOẶC-ing hai giá trị tức thời đó với nhau, với movt là 16 bit trên. Trong trường hợp này, r1 = (movt immediate value << 16) | (movw immediate value)).

3242ba66 f6454118 movw r1, 0x5c18 // r1 = 0x5c18 
3242ba6a  466f mov  r7, sp 
3242ba6c f6c0415a movt r1, 0xc5a // r1 = (r1 & 0xffff) | (0xc5a << 16) 
3242ba70 f2460002 movw r0, 0x6002 
3242ba74 f6c0405a movt r0, 0xc5a 
3242ba78  4479 add  r1, pc  // r1 = r1 + pc 
3242ba7a  4478 add  r0, pc 
3242ba7c  6809 ldr  r1, [r1, #0] // r1 = *(r1 + 0) 
+0

Vì vậy, trong trường hợp này, giá trị đó hoặc r1 sẽ là bao nhiêu? – user1000039

+3

Phần nào của lời giải thích mà bạn gặp khó khăn? –

+0

Hai bit cuối cùng. Vì vậy, thêm r1 vào máy tính và * (r1 + 0). Giá trị của máy tính sẽ là gì? Và không * có nghĩa là cùng một điều như trong c + + (nhà điều hành suy luận)? – user1000039