嵌入式linux——汇编、C语言基础(一)
2024-08-31 04:22:41
一、汇编语言基础
(断断续续的记录自己的笔记。。。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语言基础
最新文章
- 四则运算之C++实现篇
- 对SharePreference的封装
- 【Lucene4.8教程之四】分析
- C# 之 静态字段初始化
- QT/C++ 智能指针
- Sqlserver 时间字段批量增加
- Image Style Transfer:多风格 TensorFlow 实现
- web服务器学习1---httpd-2.4.29源码手动编译安装
- Tips_一级菜单栏实现
- python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
- MongoDB update修改器 目录
- Java操作队列
- jQuery文档操作--append()、prepend()、after()和before()
- 20165326 java第三周学习笔记
- mongodb副本集升级步骤
- Excel:一维表和二维表 互转
- executeBatch()批量执行Sql语句
- 82.Linux之VMware10.0.4_x64安装
- Ant是什么
- OSGi是什么:Java语言的动态模块系统(一)