首页 > 系统相关 >Linux操作系统ARM指令集与汇编语言程序设计

Linux操作系统ARM指令集与汇编语言程序设计

时间:2023-04-13 20:33:02浏览次数:48  
标签:r0 r1 mov delay ldr 指令集 Linux LED ARM

一、实验目的

1.了解并掌握ARM汇编指令集

2.应用ARM指令集编写一个程序操控开发板上的LED灯

二、实验要求

应用ARM汇编指令集编写程序,实现正常状态下开发板上的LED灯不亮,按下一个按键之后开发板上的LED灯进入流水灯模式。

三、实验原理

四个LED灯的电路如下图所示:

img

img

四个按键电路图如下所示:

img

img

img

将LED灯的控制地址放入一个寄存器中,并将其设置为输出模式:

img

img

把按键控制地址的内容全置零,为输入模式(复位值为0,此步骤可省略)。

四、实验结果

将生成的二进制代码用烧写脚本烧写到SD卡中,插入开发板的SD卡槽,从SD卡启动,按下按键即开启LED流水灯模式。

五、结果分析

通过掩码取出按键数据地址中的值的状态来判断按键是否按下,若按下则跳转到LED流水灯的程序当中。

流水灯程序即顺序的程序结构,依次点亮LED灯,延时并熄灭,达到流水效果。

六、附录:实验源代码

.text
.globl _start
_start:
	// Set GPM4CON[0:3]as output
	ldr r1, =0x110002E0 @GPM4CON address 					
	ldr r0, =0x00001111
	str r0, [r1]
	//Set GPX3CON[2:5] as input
	ldr r1, =0x11000C60 @GPX3CON address
	mov r0, #0
	str r0,[r1]			@default is input.So,this section canbe omitted
Key_led:
	//Read the state of keys
	ldr r1, =0x11000C64 @GPX3DAT address->keys
	ldr r3, =0xFFFFFFC3 @Key mask
	ldr r0, [r1] 		@ Read the state of keys
	orr r0, r0,r3		@ get the bits of keys
	mov r0,r0,ROR #2	@ align to the led bits
	cmp r0, #0xFFFFFFFE
	beq led_blink
	bl Key_led
led_blink:
	ldr r1, =0x110002E4
	mov r0, #0xE
	str r0, [r1]
	bl delay
	ldr r1, =0x110002E4
	mov r0, #0xD
	str r0, [r1]
	bl delay
	ldr r1, =0x110002E4
	mov r0, #0xB
	str r0, [r1]
	bl delay
	ldr r1, =0x110002E4
	mov r0, #0x7
	str r0, [r1]
	bl delay
	bl Key_led
delay:
	mov r0, #0x200000
delay_loop:
	cmp r0, #0
	sub r0, r0, #1
	bne delay_loop
	mov pc, lr

内核资料领取,  Linux内核源码学习地址。

标签:r0,r1,mov,delay,ldr,指令集,Linux,LED,ARM
From: https://blog.51cto.com/u_15481245/6188359

相关文章

  • Linux操作系统汇编指令入门级整理知识点
    前言我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了,不过我还真的遇到了一个,那是之前的一个同事,因为在写代码时遇到了成员函数权限及可见性的问题,导致他无法正确调用想执行的函数,结......
  • linux上一些额外好玩的东西安装
    1.linux_hotspothttps://blog.csdn.net/weixin_41114301/article/details/127165479git的依赖:sudoapt-getinstallhostapdiptablesdnsmasq安装git:sudoapt-getinstallgitgitclonehttps://github.com/oblique/create_apcdcreate_apsudomakeinstallsudo......
  • linux入门4
    file查看文件的类型[root@nfs-serverlianxi]#filesc.txtsc.txt:UTF-8Unicodetext mv    mv-move(rename)files     mv[OPTION]...[-T]SOURCEDESTSOURCE源DEST目的地destination   1.移动(剪切)move 文件可以移动到文件夹里 后面接的文件夹......
  • Linux程序内存释放不回收问题
    最近在测试一个程序,内存表现很诡异,记录一下。测试环境:vmware虚拟机,操作系统:ubuntu16.04x64程序中有一段业务需要申请大块内存,业务完成后再释放掉。测试表现:程序启动占用内存约90M,执行一次业务后,内存增长约200M,且不回落,这样约5次后,内存增长到约1G后趋于稳定。开始感觉有内存......
  • ARM平台内核的编译
    目的:在Ubuntu上编译出树莓派的内核。由于linux内核非常庞大,大约有1.4w个c文件,一千多万行代码,但是linux内核编译出来才才几M,这是为什么呢?因为linux是开源的,支持多平台、多架构。所以里面包含了很多平台的代码。我们现在要的是树莓派这个平台上的内核,所以其他的平台......
  • linux入门3
       1.显示/etc/passwd的前15行内容[root@blueendingnovaxiang]#head-15/etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/s......
  • LINUX grep sed awk genek
    grep-o'^>\S\+'test.fasta|less-Sgrep-o'^>\S\+'test.fasta|grep-o'[^>]\+'sed中的正则表达式echo-e"AB\n\nC\tD\n\nE">testfile#查看格式vitestfile:setlist#删除空行sed'/^$/d'testfile......
  • 查看linux进程/线程跑在哪个cpu核上
    方法一:使用top-Hppid然后按f,选择p,然后esc就行了方法二: psH-opid,lwp,psr,comm -p11115psr对应系统cpu线程号......
  • linux开发之Make
    简述代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,他根据makefile来行动。makefile是一个名字叫Makefile(或makefile)的文件,它一堆规则的定义,它定义了具体该怎么编译,链接等操作。当源代码有几十上百时,手动输......
  • windows上编写shell拷到linux执行报错
    1.最近随手在windows写了个自动安装docker的shell脚本,然后传到linux服务器执行竟然报以下错  2.进入vim查看突然看到下截图红色框地方 最后查阅资料发现,这个标志的产生原因是因为在windows下,文件的换行符是\r\n,而在linux下换行符是\n,所以,使用cat-Ainstall_docker.sh......