kermit配置/反汇编/c和汇编混合编程/计算机存储介质/GPIO编程

本文介绍了使用GCC编译器进行C语言程序编译的方法,包括如何使用-g参数保留调试信息以便于反汇编查看源代码。此外,还详细探讨了C与汇编语言之间的混合编程技巧,并给出了具体的代码示例。

kermit配置


反汇编

wuyingqiang@ty-kf1:~/1$ gcc hello.c  -o app

wuyingqiang@ty-kf1:~/1$ gcc hello.c -g -o app
-g参数决定反汇编之后的文件中,还能否看到c代码

wuyingqiang@ty-kf1:~/1$ objdump -dSsx app > file

两种情况下, cat file。 查看文件内容,c代码出会不一样。

wuyingqiang@ty-kf1:~/1$ file app 
app: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xd32f8a05fb02a3bd91cbc3c43a358569a62aa21e, not stripped

c和汇编混合编程

ATPCS协议,
汇编用寄存器传参,参数个数在4个以内

x86中c语言利用栈来传递参数,从右向左依次压栈。
c调用汇编
//main.c
#include <stdio.h>

extern int myadd(int a, int b);

int main(void)
{
int a = 3;
int b = 5;
int c;
c = myadd(a, b);
printf("%d\n", c);
return 0;
}
//myadd.s
AREA MYADD, CODE, READONLY
;ENTRY
EXPORT myadd
myadd
ADD R2, R0, R1
MOV R0, R2
MOV R15, R14;MOV PC, LR
END

--------------------------
汇编调用c
//main.c
#include <stdio.h>

extern int fun(int a, int b);
int add(int a, int b)
{
return a+b;
}
int main(void)
{
int res;
int a = 3, b = 5;
res = fun(a, b);
printf("%d\n", res);
return 0;
}
//fun.s
AREA FUN ,CODE, READONLY
IMPORT add
EXPORT fun
fun
add r0, r0, #1
add r1, r1, #1
mov r8, r14
bl add
mov r5, r0
mov r14, r8
mov pc, r14
end
----------------------------------
内嵌汇编
//main.c
#include <stdio.h>
int main(void)
{

__asm 
{
mrs r5, CPSR
bic r5, r5, #0xf
orr r5, r5, #0x2
msr CPSR_cxsf, r5
}
printf("hello\n");
return 0;
}



计算机存储介质



DRAM:内存,动态随机存储器。
SRAM:cache缓存(cpu内部),静态随机存储器。
cpu内部有
IROM:只读存储
IRAM:可读可写
bootloader程序会使用到。

GPIO编程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值