汇编指令总结、练习、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;

}

相关推荐
C++ 老炮儿的技术栈32 分钟前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
cch89185 小时前
Java vs 汇编:高级与低级的终极对决
java·开发语言·汇编
2301_789015626 小时前
C++:智能指针
c语言·开发语言·汇编·c++·智能指针
独小乐2 天前
007.GNU C内联汇编杂谈|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·汇编·单片机·嵌入式硬件·arm·gnu
Lzh编程小栈4 天前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
cch89185 天前
汇编与C语言:底层对话VS高效指挥
c语言·开发语言·汇编
jwn9996 天前
PHP vs 汇编:编程语言的两极对决
开发语言·汇编·php
cch89186 天前
汇编vs易语言:底层与中文编程终极对决
汇编
cch89187 天前
汇编VS高级语言:从硬件操控到高效开发
汇编
cch89187 天前
汇编与Java:底层与高层的编程对决
java·开发语言·汇编