嵌入式linux——汇编、C语言基础(一)
一、汇编语言基础
(断断续续的记录自己的笔记。。。2018-10-11)
1. mov指令
基本用法: mov r0, #0
mov指令是赋值指令,用法如上,把立即数0放入到寄存器r0中。
2. bl指令
bl是跳转指令,1)跳转到某个位置去执行可以是汇编语言中的标号,也可以是某个c文件中的函数。2)把返回地址保存到lr寄存器中,返回地址就是下一条指令的地址
3. ldm和stm
这两个和ldr、str是不同的,ldm和stm一次可以操作多个寄存器或者操作多次内存,目前我还没写过这个代码,只是在反汇编文件文件中看到过,比如我学过一个,如下:
ldmia sp, {fp,sp,pc}
...
stmdb sp!, {fp,ip,lr,pc}
ia和db是完成操作而后地址递增和地址先减而后完成操作。以第二条来说,先减在存,把fp、ip、lr、pc寄存器的压入栈中,这几个寄存器是有顺序的,按照标R的标号,高标号存在高地址。sp后面的!是sp最后的值是修改过的值。这条指令:sp先减,再存pc(R15);再减,再存lr..................
4. ldr和str
ldr是读寄存器,也可以像mov那样用,当操作数太大就不能用mov,必须用ldr,因为mov不能操作一个特别大(超出范围的数),而伪指令ldr可以,伪指令不是真的汇编指令,在编译时候,他会被拆分成几条真的汇编指令,完成工作。一次只操作一个寄存器或者操作一次内存
str是写寄存器。用法如下:把数0x12345678放到寄存器r0中,再把这个数写入大r1指的地址中。
ldr r0, =0x12345678
str r0, [r1]
二、C语言基础
嵌入式linux——汇编、C语言基础(一)的更多相关文章
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...
- 嵌入式LInux之C语言提升篇---Skr Skr Up Up
嵌入式C语言提升 致敬:每一个奋斗的人! Up Up UpC语言常见编译错误1.预处理错误 -E 1-1 找不到源文件错误 自己定义头文件 使用 “xxx.h” 搜索的目录 ./ ...
- 【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux经常使用命令 Linux启动过程具体解释 熟悉L ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
- 嵌入式Linux学习笔记之第一阶段---基础篇
嵌入式Linux学习分五个阶段 第一阶段: 01嵌入式环境搭建初期 02C语言语法概述 03C语言内存操作 04c语言函数 05linux基础 06gun基础 第二阶段: 01-linux之io系统编 ...
- 零基础小白要如何跟好的学习嵌入式Linux
作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学 ...
- 零基础小白要如何跟好的学习嵌入式Linux(转)
作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学 ...
- 必备Linux命令和C语言基础
每一个学习嵌入式单片机的伙伴我相信对于这两个都不陌生,这毕竟是嵌入式单片机的生存之道 所有基础还是要打牢的 有句老话说的好基础不牢地动山摇 下面看下系统的资料吧 希望能对大家有所帮 ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
随机推荐
- 学习笔记CB013: TensorFlow、TensorBoard、seq2seq
tensorflow基于图结构深度学习框架,内部通过session实现图和计算内核交互. tensorflow基本数学运算用法. import tensorflow as tf sess = tf.S ...
- git 分支管理记录
测试环境 :虚拟机(VMware Fusion Centos 6.5) 1.安装git环境 [root@localhost ~]# yum -y install git 2.检测git是否安装成功 [ ...
- Redis管道功能
Redis管道,Redis存储用户浏览数据 当频繁的存储获取Redis数据库中的数据时,可以使用Redis的pipeline(管道)功能,将多个相互没有依赖关系的读写操作,如:下一步执行的Redis操 ...
- KMeams算法应用:图片压缩与贝叶斯公式理解
from sklearn.datasets import load_sample_image import matplotlib.pyplot as plt from sklearn.cluster ...
- URL编码表 Base64编码表 HTTP消息含义
URL编码表 backspace 8% A 41% a 61% § %A7 Õ %D5 tab 9% B 42% b 62% « %AB Ö %D6 linefeed %0A C 43% c ...
- C++ Boost库分类总结
c# 程序员写c++,各种不适应.尤其是被内存操作和几十种字符串类型的转换,简直疯了,大小写转换竟然要手动写代码实现. Boost看介绍不错,也不知道能不能跨平台.过几天要上linux写c++, 也不 ...
- req和resp常用的方法
req: 1. setAttribute()在Request域中存储数据 2. setCharacterEncoding()设置请求参数的编码方式,只对post请求有效 3. getMethod() ...
- Lunar Lander 月球冒险
发售年份 1979 平台 街机 开发商 雅达利(Atari) 类型 飞行模拟 https://www.youtube.com/watch?v=McAhSoAEbhM
- linux下目录简介——/proc
1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文 ...
- eclipse+gradle
一.gradle 下载与安装 下载地址:http://services.gradle.org/distributions/ 下载后,放到:D:\gradle-4.6 在系统环境变量path,中加:D: ...