Slide 1

Slide 1 text

想標題好難 terrynini38514 terrynini

Slide 2

Slide 2 text

Before Start gcc-arm-linux-gnueabi g++-arm-linux-gnueabi gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gdb-multiarch install

Slide 3

Slide 3 text

JazelleⓇ TrustZoneⓇ ARM ARMv5 ARMv6 ARMv7-A/R ARMv8-A SIMD NEONTM Adv SIMD VFPv2 VFPv3/v4 ThumbⓇ-v2 A32+T32 ISAs AArch32 A64 ISA AArch64 CRYPTO CRYPTO

Slide 4

Slide 4 text

ARM ARM7TDMI、ARM9TDMI
 ARM7EJ、ARM9E、ARM10E Before ARM11 naming

Slide 5

Slide 5 text

ARM Cortex-A Application profile Cortex-R Real-time profile Cortex-M Microcontroller profile After ARM11 naming

Slide 6

Slide 6 text

ARM $ arm-linux-gnueabi-gcc -march=armv7-a -mthumb hello.c -o hello 000103fc : 103fc: b580 push {r7, lr} 103fe: af00 add r7, sp, #0 10400: f240 4084 movw r0, #1156 ; 0x484 10404: f2c0 0001 movt r0, #1 10408: f7ff ef68 blx 102dc 1040c: 2300 movs r3, #0 1040e: 4618 mov r0, r3 10410: bd80 pop {r7, pc} Thumb

Slide 7

Slide 7 text

ARM 000103fc : 103fc: e92d4800 push {fp, lr} 10400: e28db004 add fp, sp, #4 10404: e59f0014 ldr r0, [pc, #20] ; 10420 10408: ebffffb3 bl 102dc 1040c: e3a03000 mov r3, #0 10410: e1a00003 mov r0, r3 10414: e24bd004 sub sp, fp, #4 10418: e8bd4800 pop {fp, lr} 1041c: e12fff1e bx lr 10420: 00010494 .word 0x00010494 $ arm-linux-gnueabi-gcc -march=armv7-a hello.c -o hello ARM

Slide 8

Slide 8 text

ARM r0~r10 general purpose r11 FP Frame Pointer r12 IP Intra Procedural Call r13 SP Stack Pointer r14 LR Link Register r15 PC Program Counter CPSR Current Program Status Register register

Slide 9

Slide 9 text

ARM Mnemonic{S}{Condition} Rd, Rn, operand2 { } 內的東西是 optional instruction

Slide 10

Slide 10 text

ARM MOV R1, #0xFA05 MOV R0, #256 MOVW R3, #0xBEEF MOVT R3, #0xDEAD MVN R2, #0xF R0 R1 R2 R3 R4 0x00000100 0x0000FA05 0xFFFFFFF0 0xDEADBEEF mov

Slide 11

Slide 11 text

ARM MOV R1, #0xFA05 MOV R0, #256 MOVW R3, #0xBEEF MOVT R3, #0xDEAD MVN R2, #0xF MOV R4, R0, LSL #1 R0 R1 R2 R3 R4 0x00000100 0x0000FA05 0xFFFFFFF0 0xDEADBEEF 0x00000200 mov 有時候 mov 會噴錯是因為編碼問題,關鍵字 Modified immediate constants in ARM instructions

Slide 12

Slide 12 text

ARM AND R0, R1, R2 ;r0 = r1&r2 ORR R0, R1, R2 ;r0 = r1|r2 EOR R0, R1, R2 ;r0 = r1⊕r2 logical

Slide 13

Slide 13 text

ARM mov r0, #0x1000 mov r1, #0x100 str r1, [r0] ldr/str 0x100 0x1000 0x1004 0x1008 0x100C 0x1010 0x1014

Slide 14

Slide 14 text

ARM mov r0, #0x1000 mov r1, #0x100 str r1, [r0] ldr r2, [r0] add r2, r2, #1 str r2, [r0, #4] ldr/str 0x100 0x101 0x1000 0x1004 0x1008 0x100C 0x1010 0x1014

Slide 15

Slide 15 text

ARM mov r0, #0x1000 mov r1, #0x100 str r1, [r0, #4] ldr/str 0x100 0x1000 0x1004 0x1008 0x100C 0x1010 0x1014 r0 0x1000

Slide 16

Slide 16 text

ARM mov r0, #0x1000 mov r1, #0x100 str r1, [r0, #4]! ldr/str 0x100 0x1000 0x1004 0x1008 0x100C 0x1010 0x1014 r0 0x1004

Slide 17

Slide 17 text

ARM mov r0, #0x1000 mov r1, #0x100 str r1, [r0], #4 ldr/str 0x100 0x1000 0x1004 0x1008 0x100C 0x1010 0x1014 r0 0x1004

Slide 18

Slide 18 text

ARM str r1, [r0, #4] str r1, [r0, r2] str r1, [r0, r2, LSL#2] ldr/str

Slide 19

Slide 19 text

ARM N negative 1: result is negative Z zero 1: result is zero C carry set to 1 if add produced a carry set to 0 if sub produced a borrow V overflow set to 1 if the result of an add, subtract, or compare is greater than or equal to 231, or less than -231 T Thumb 0: arm mode, 1: thumb mode E Endian 0: little endian, 1: bit endeian CPSR ARM and Thumb-2 Instruction Set Quick Reference Card

Slide 20

Slide 20 text

ARM conditional execution .global main main: mov r0, #2 cmp r0, #3 addlt r0, r0, #1 cmp r0, #3 addlt r0, r0, #1 bx lr

Slide 21

Slide 21 text

ARM conditional execution r0 = 2 if( r0 < 3) r0 += 1 if( r0 < 3) r0 += 1 return r0

Slide 22

Slide 22 text

ARM conditional execution CMP R1, #3 
 IT EQ
 LDREQ R1, [R5] if( r1 == 3 ) r1 = *r5

Slide 23

Slide 23 text

ARM conditional execution CMP R1, #3 
 ITT EQ 
 LDREQ R1, [R5] LDREQ R2, [R5] if( r1 == 3 ){ r1 = *r5 r2 = *r5 }

Slide 24

Slide 24 text

ARM conditional execution CMP R1, #3 
 ITTE EQ 
 LDREQ R1, [R5] LDREQ R2, [R5] ADDNE R1, #1 if(r1 == 3){ r1 = *r5 r2 = *r5 }else{ r1 += 1 }

Slide 25

Slide 25 text

ARM branch .global main main: mov r0, #1 mov r1, #2 loop: cmp r0, #1024 beq end mul r0, r0, r1 b loop end: bx lr

Slide 26

Slide 26 text

ARM .text .global _start _start: .code 32 add r2, pc, #1 bx r2 .code 16 mov r0, #1 branch