一、汇编语言怎么写
我们都知道,c语言可以写成c语言然后编译。那么汇编语言了?
汇编语言用汇编语言写,然后写出来为.s文件。所以我们只需要任意一款可以编写.s文件的编辑器就可以啦,例如:source insight、notepad等。
二、写一个试试
/*
* 点亮LED1: gpf4
*/
.text
.global _start
_start:
/* 配置GPF4为输出引脚
* 把0x100写到地址0x56000050
*/
ldr r1, =0x56000050
ldr r0, =0x100 /* mov r0, #0x100 */
str r0, [r1]
/* 设置GPF4输出高电平
* 把0写到地址0x56000054
*/
ldr r1, =0x56000054
ldr r0, =0 /* mov r0, #0 */
str r0, [r1]
/* 死循环 */
halt:
b halt
三、分析
说实话,我一开始看着这些代码,我也蒙。
后来看了别人的分析才知道是啥:
1、启动
大家其实也没有必要在开始太过于了解这两句话,就先当作#include "stdio.h"和main函数看待就好,就是一个c文件的必须部分
.text //这个的意思是,下面的代码放到 .text这个代码分段中
.global _start //声明一个全局变量 ,叫做_start
//这个的作用是因为,arm编译器需要这样一个全局变量作为程序的起点,类似于C语言的main函数
2、配置GPIO
这里就很有意思了,我们在c语言中点灯,如果是采用stm32这种单片机的库函数的话,往往是直接使用一个函数,就可以成功。但是如果是直接操作寄存器,那么这里就会很好懂啦。
首先,将GPIO寄存器设置为输出模式
我们在S3c2440芯片手册里面查到:
设置这一个寄存器可以配置GPIO。
然后
不同的位对应不同的管脚
我们要设置GPIO4就找到对应的第九位和第八位,就是x00000100,这样的话,第9-8位就是0b01,也就是对应输出模式。
/* 配置GPF4为输出引脚
- 把0x100写到地址0x56000050
*/
ldr r1, =0x56000050 //将0x56000050写入r1
ldr r0, =0x100 /* mov r0, #0x100 */ //将0x100写入r1
str r0, [r1] //将r0的值写入r1中的地址上(可以理解为将r1指向的地址写值)
3、设置GPIO的电平
同样,我们可以在手册中找到:
所以我们只需要将GPF寄存器的第4位设置为1就可以啦:
/* 设置GPF4输出高电平
* 把0写到地址0x56000054
*/
ldr r1, =0x56000054 //同样将0x56000054写入r1
ldr r0, =0 /* mov r0, #0 */ //将0 写入r0,
str r0, [r1] //将r0的值写到r1存的地址中去
4、死循环
这里解释一下,第一个halt 意思是计算机进入暂停,那第二个指令意思是跳转到halt。那么arm就会不停的暂停,也就是死循环
halt: //暂停
b halt //跳转到暂停
四、编译
在很多单片机的使用中,我们都可以一键编译,方便是真的方便,但是,我们永远不会知道计算机是怎么真正的编译文件的。
我们这样看,.s文件虽然是非常接近机器运行的语言,但是机器还是不能直接使用,因为机器只能识别二进制文件,那么怎么把.s文件编译成为二进制文件了?
当然,我们自己也没有这个本事来直接编译.s文件,所以我们需要借助arm_gcc_linux这个工具来帮助我们编译。那么怎么使用这个工具链了?
1、安装linux虚拟机和arm-gcc-linux工具链。
这个网上教程太多了,我就不一一列举
2、编写makefile
我们有了工具,当然还需要一些操作。比如,我们怎么让这个工具编译我们想编译的文件,并且编译的过程中是不是要打印编译信息等等配置,我们为了写这些配置给工具使用就要按照他的规则写一个规则文件,这个文件就是大家耳熟能详的makefile。
all: #这里就是一个标志,我们以后如果用了make all命令,那么就会执行下面的操作
arm-linux-gcc -c -o led_on.o led_on.S #将led_on.S文件编译成为中间代码文件.o文件
arm-linux-ld -Ttext 0 led_on.o -o led_on.elf #将目标文件来凝结成为 led_on .elf文件
arm-linux-objcopy -O binary -S led_on.elf led_on.bin #将连接文件生成可执行文件,.bin也就是二进制文件
arm-linux-objdump -D led_on.elf > led_on.dis #将链接文件反汇编为.dis文件,我们可以看这个文件来看机器的执行过程
clean: #这里就是一个标志,我们以后如果用了make clean命令,那么就会执行下面的操作
rm *.bin *.o *.elf #删除所有.bin,.o.elf文件
3、make编译:
首先跳转到对应的文件夹下面
保证自己的makefile文件和.s文件都在这个文件夹下面,然后:输入make命令
五、成功
上一篇:ARM汇编语言学习笔记(三)看反汇编文件,学机器内部操作
下一篇:ARM汇编语言学习笔记(一)介绍
推荐阅读最新更新时间:2024-10-22 14:35
设计资源 培训 开发板 精华推荐
- stc8g和ch552
- 【训练营】基于涂鸦WB3S模组的设备开关控制器+896756A
- LTC2054 的典型应用 - 单个微功率零漂移运算放大器
- AM6TW-4818SZ 18V 6瓦双输出DC-DC转换器的典型应用
- REF192 精密微功率、低压差堆叠电压基准的典型应用电路
- LTC4214 负电压热插拔控制器的典型应用
- ADL5390-EVAL,基于 ADL5390 20 MHz 至 2.4 GHz RF/IF 矢量乘法器的评估板
- 雪花灯设计
- LTM8042EV-1 降压-升压模式的典型应用电路,以 500mA 的电流驱动 5 个白光 LED 并采用 PWM 调光
- 适用于LoRa™的USI®STM32™Nucleo扩展板