裸机
欧阳海宾
这个作者很懒,什么都没留下…
展开
-
汇编条件判断 eq neq
汇编条件判断 eq neqcpsr[30]是zero位,主要保存最近的一次“是否相等”的条件判断的结果zero位状态由以下指令来设置cmp r0 , r1cmp r0 , #100除cmp之外,运算操作都可以通过加上s后缀来设置修改zero位结果几乎所有的指令(除了cmp和加了s后缀的指令:说白了就是修改zero位的指令原创 2017-09-03 19:36:40 · 8845 阅读 · 0 评论 -
汇编中调用printf
/********************* 汇编中调用printf*****************//********************** uboot中go命令调用这个裸机程序 **************************///转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/details/77816900#def原创 2017-09-03 15:42:46 · 7964 阅读 · 1 评论 -
汇编函数调用c程序
汇编函数调用c程序程序实例:按键控制led灯/************************* types.h **************************/#typedef unsigned char u8;#typedef unsigned int size_t;/************************* led_key.c **************原创 2017-09-03 15:39:33 · 966 阅读 · 0 评论 -
裸机程序常识1 _start程序入口标号 -Ttext链接地址作用,如何使用uboot中的函数
裸机程序常识裸机程序常识1:我们的逻辑程序是直接运行在UBOOT之上的,2:裸机程序是没有任何库函数的,包括printf3:裸机程序时直接操作寄存器的4:裸机程序的入口是_start()函数连接器会检查是否有_start函数存在,而编译器和连接器是按照函数定义的顺序来排列代码,所以_start函数作为整个bin文件的入口,类似于main函数,必须定义在所有其他函数的前面原创 2017-09-02 21:31:47 · 1547 阅读 · 0 评论 -
ARM指令集 mov指令,ldr=伪指令,地址访问指令ldr,str,位运算指令and,orr,eor,bic,逻辑位移指令lsl,lsr
每条arm指令都会操作寄存器,寄存器就类似于c语言中的变量,r0~12通用寄存器1:mov指令mov r0,#100 //r0=100 常量整数只有12位来存储mov r0,r1 //r0=r1mvn r0,#100 //r0=~100mvn r0,r1 //r0=~r1 2:使用伪指令(编译器会预处理为CPU认识的指令)ld原创 2017-09-03 10:40:46 · 3438 阅读 · 0 评论 -
裸机程序常识2 CPU运行的7种模式 system and user ,supervisior ,Abort ,IRQ,FIQ , undefined
7种模式system and user应用程序运行模式,低权限,其实7中模式中也只有这一种模式是地权限的模式,其他全是高权限模式!supervisior操作系统和裸机运行的模式Abort发生错误,如应用层直接访问内核空间的内存:IO寄存器地址等IRQ,FIQ中断模式undefined未定义指令,例如定义了一个函数指针并且给它赋了地原创 2017-09-03 10:34:09 · 500 阅读 · 0 评论 -
ARM指令中如何判断一个立即数是 有效立即数
ARM指令中如何判断一个立即数是有效立数在ARM处理器的汇编语言中,对指令语法格式中的的常数表达式有这样的规定:“该常数必须对应8位位图,即常数是由一个8位的常数循环移位偶数位得到的。”首先从ARM指令系统的语法格式说起。一条ARM指令语法格式分为如下几个部分:{}{S} ,{,}其中,是指令助记符,是必须的,而{}为指令执行条件,是可选的,如果不写转载 2017-09-03 10:30:06 · 2647 阅读 · 0 评论 -
c程序调用汇编函数
c程序调用汇编函数程序实例:按键控制led灯/************************* main.c **************************/static int (*printf)(const char *format,...) = (int (*)(const char *format,...))0xc3e11ad0void _start(){ pri原创 2017-09-03 15:32:39 · 1651 阅读 · 0 评论 -
汇编函数封装 pc寄存器 符号标签 数字标签
1:汇编函数封装(pc寄存器)读:每次读取该寄存器的值,都能获得当前正在执行的指令的实际地址+8写:将一个地址写入该寄存器,将立即触发跳转,本质就是函数指针,注意此时没有+8的偏移量图片1汇编函数封装 mov lr , pc pc b func //调用函数 pc+4 ... pc+8 (这就是为什么读取pc时会自动pc+8原因了!) ..原创 2017-09-03 11:57:07 · 692 阅读 · 0 评论 -
.section 段
#define printf 0x43e11ad0.section .text //表明下面全是代码段.global _start_start: push {lr} //printf("bss_start=0x%x, bss_end=0x%x\n", __bss_start__, __bss_end__); //给printf传递3个参数 ldr r0, =fmt ldr原创 2017-09-03 21:54:19 · 809 阅读 · 0 评论 -
汇编中调用printf:传递参数超过4个,用栈传递参数
/********************* 汇编中调用printf:传递参数超过4个,用栈传递参数*****************//********************** uboot中go命令调用这个裸机程序 **************************///转载请注明原文地址:http://blog.csdn.net/oyhb_1992/article/detai原创 2017-09-03 16:21:38 · 2861 阅读 · 0 评论