汇编指令总结、练习、C与汇编混合使用

---------------------------------------------------------------------------------------------------------------------------------

这是一些示例代码,可以对照上面的笔记,分析这些代码到底做了什么,将下面这12个练习

.global _start

_start:

@practice1

mov r0,#2

lsl r0,#2

ldr r1,=0x5

sub r0,r0,r1

ldr r1,=0x12345678

add r0,r0,r1

@parctice2

ldr r1,=0x3

ldr r2,=0x5

mul r3,r2,r1

ldr r4,=0x19

sub r0,r4,r3

add r0,#6

@practice3

ldr r2,=0xffff

ldr r3,=0x12345678

and r1,r2,r3

bic r0,r3,r2

lsr r0,#16

add r0,r1

@practice4

ldr r0,=0xabcd

ldr r1,=0x4

bic r0,r0,r1

ldr r1,=0xb

orr r0,r0,r1

ldr r1,=0xf07f

and r0,r0,r1

@parctice5

ldr r0,=0x5 @a

ldr r1,=0x6 @b

ldr r2,=0xa @c

cmp r0,r1

addgt r1,r1,#1

cmp r0,r2

addle r2,r2,#1

@parctice6

start1:

mov r0,#0

mov r1,#1

loop:

add r0,r0,r1

add r1,r1,#1

cmp r1,#100

ble loop

@ bgt stop

@partice7

ldr r0,=0x40000000

ldr r1,=0x12345678

str r1,[r0]

ldr r2,[r0]

@partice8 @0x40000000,0x4000ffff

mov r0,#0x40000000

mov r1,#1

loop1:

str r1,[r0],#4

add r1,r1,#1

cmp r1,#10

ble loop1

ldr r2,=0x40000000

ldr r3,[r2]

ldr r4,=0x40000100

str r3,[r4]

@parctice9

ldr r0,=0x40000000

ldr r1,=0x1234

str r1,[r0],#4

ldr r1,=0xabcd

str r1,[r0]

ldr r2,[r0],#-4

add r3,r3,r2

ldr r2,[r0]

add r3,r3,r2

@parctice10

mov r0,#0x40000000

mov r1,#0x11

mov r2,#0x22

mov r3,#0x33

stmia r0!,{r1-r3}

stmdb r0!,{r4-r6}

@practice11

ldr sp,=0x4000fff0

mov r1,#0x11

mov r2,#0x22

mov r3,#0x33

stmfd sp!,{r1-r3}

mov r1,#0

mov r2,#0

mov r3,#0

ldmfd sp!,{r1-r3}^

@practice12

mrs r0,cpsr

mov r1,#1

bic r0,r0,r1,lsl #7

msr cpsr,r0

mrs r0,cpsr

mov r1,#1

orr r0,r0,r1,lsl #7

msr cpsr,r0

stop:

b stop


汇编和C语言的相互调用

(1)汇编调用 C

mov r0,#2

mov r1,#3

ldr sp,=0x4000fff0

bl add

(2) C 内嵌汇编格式

int add(int a,int b)

{

int c;

/*
asm
(
"add r0,%1,%2\n"
"mov %0,r0\n"
:"=r"(c) //arm ---> C
:"r"(a),"r"(b) // C ---> arm
:"r0" //xiu gai guo de ji cun qi
);
*/

c=a + b;

return c;

}

相关推荐
矿渣渣1 天前
RM Cortex-A7 架构中“SEV”汇编指令解析
汇编·架构
CYRUS STUDIO2 天前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·汇编·算法·网络安全·逆向·ollvm
淬渊阁2 天前
汇编学习之《运算和逻辑指令》
汇编·学习
长安——归故李3 天前
51单片机彩灯控制与数码管结合
汇编·单片机·嵌入式硬件·青少年编程·c#·51单片机·硬件工程
淬渊阁3 天前
汇编学习之《扩展指令指针寄存器》
汇编·学习
淬渊阁3 天前
汇编学习之《push , pop指令》
汇编·学习
leluckys4 天前
逆向-ARM64汇编二
汇编
小麦嵌入式4 天前
Linux驱动开发实战(九):Linux内核pinctrl_map详解与优势分析
linux·c语言·汇编·驱动开发·stm32·嵌入式硬件·硬件工程
淬渊阁4 天前
汇编学习之《指针寄存器&大小端学习》
汇编·学习
淬渊阁4 天前
汇编学习之《段寄存器》
汇编·学习