GNU 汇编语法适用于所有的架构,并不是 ARM 独享的,GNU 汇编由一系列的语句组成,每行一条语句,每条语句有三个可选部分,如下:
label: instruction @ comment
举例:
add:
MOVS RO, #0X12 @设置R0=0X12
“add:”就是标号,“MOVS R0,#0X12”就是指令,最后的“@设置 R0=0X12”就是注释。
用户可以使用.section伪操作来定义一个段,汇编系统预定义了一些段名:
.text:代码段
.data:初始化的数据段
.bss:为初始化的数据段
.rodata:只读数据段
也可以自己使用.section来定义一个段,每个段以段名开始,以下一段名或文件结尾结束,比如:
.section .testsection @定义一个testsection段
汇编程序的默认入口标号为_start,也可以在链接脚本中使用ENTRY指明其它的入口点,下面的代码使用_start作为入口标号:
.global _start
_start:
ldr r0, =0x12 @r0=0x12
.global 是伪操作,表示_start 是一个全局标号,类似 C 语言里面的全局变量一样,常见的伪操作有:
.equ 变量名
,表达式,比如.equ num, 0x12,表示 num=0x12。GNU汇编支持函数,函数格式为:
函数名:
函数体
返回语句 @ 不是必须的
返回语句不是必须的。
参考:《ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf》的A4章节
处理器内部传输数据,常见的操作有:
数据传输常用的指令有3个:MOV、MRS、MSR,用法如下:
指令 | 目的 | 源 | 描述 |
---|---|---|---|
MOV | R0 | R1 | 将R1里面的数据复制到R0中 |
MRS | R0 | CPSR | 将特殊寄存器CPSR里面的数据复制到R0中 |
MSR | CPSR | R1 | 将R1里面的数据复制到特殊寄存器CPSR中 |
MOV RO, R1 @将寄存器R1中的数据传递给R0寄存器
MOV R0, #0X12 @将立即数0X12传递给R0寄存器
MRS R0, CPSR @将特殊寄存器 CPSR 里面的数据传递给 R0,即 R0=CPSR
MSR CPSR, R0 @将 R0 中的数据复制到 CPSR 中,即 CPSR=R0
ARM 不能直接访问存储器,比如 RAM 中的数据,用汇编操作RAM需要借助存储器访问指令,一般先将要配置的值写入到 Rx(x=0~12)寄存器中,然后借助存储器访问指令将 Rx 中的数据写入到RAM,读取过程相反。
常用的存储器访问指令有两种:LDR 和 STR:
指令 | 描述 |
---|---|
LDR Rd, [Rn, #offset] | 从存储器 Rn+offset 的位置读取数据存放到 Rd 中 |
STR Rd, [Rn, #offset] | 将 Rd 中的数据写入到存储器中的 Rn+offset 位置 |
LDR R0, =0X0209C004 @将寄存器地址0X0209C004加载到R0中
LDR R1, [R0] @读取地址0X0209C004中的数据到R1寄存器中
读取寄存器 GPIO1_GDIR 中的值,读取到的寄存器值保存在 R1 寄存器中,上面代码中 offset 是 0,也就是没有用到 offset。
LDR R0, =0X0209C004 @将寄存器地址0X0209C004加载到R0中
LDR R1, =0X20000002 @R1保存要写入到寄存器的值
STR R1, [R0] @将R1中的值写入到R0中保存的地址中
LDR 和 STR 都是按照字进行读取和写入的,也就是操作的 32 位数据,如果要按照字节、半字进行操作的话可以在指令“LDR”后面加上 B 或 H,比如按字节操作的指令就是 LDRB 和 STRB,按半字操作的指令就是 LDRH 和 STRH。
函数调用时,在调用函数之前,需要将调用者的当前处理器信息保存起来(也就寄存器),当被调用函数执行完之后需要恢复现场。在进行现场保护的时候需要进行压栈(入栈)操作,恢复现场就要进行出栈操作。
压栈的指令为 PUSH,出栈的指令为 POP,PUSH 和 POP 是一种多存储和多加载指令,即可以一次操作多个寄存器数据,他们利用当前的栈指针 SP 来生成地址,PUSH 和 POP 的用法如下:
指令 | 描述 |
---|---|
PUSH <reg_list> | 将寄存器列表存入栈中 |
POP <reg_list> | 从栈中恢复寄存器列表 |
PUSH {R0~R3, R12} @将R0~R3和R12压栈
压栈完成后的堆栈如图:
POP {R0~R3, R12} @恢复R0~R3,R12
PUSH 和 POP 的另外一种写法是“STMFD SP!”和“LDMFD SP!”,上面的代码可以改为:
STMFD SP!, {R0~R3, R12} @将R0~R3和R12压栈
LDMFD SP!, {R0~R3, R12} @出栈,恢复R0~R3和R12
STMFD 可以分为两部分:STM 和 FD,同理LDMFD 也可以分为 LDM 和 FD。STM 和 LDM 就是多存储和多
加载,可以连续的读写存储器中的多个连续数据(区别于STR和LDR)。
FD 是 Full Descending 的缩写,即满递减的意思。根据 ATPCS 规则,ARM 使用的 FD 类型的堆栈,SP 指向最后一个入栈的数值,堆栈是由高地址向下增长的,也就是前面说的向下增长的堆栈,因此最常用的指令就是 STMFD 和 LDMFD。STM 和 LDM 的指令寄存器列表中编号小的对应低地址,编号高的对应高地址。
有多种跳转操作,比如:
上述两种方法都可以完成跳转操作,但是一般常用的还是 B、BL 或 BX,用法如下:
指令 | 描述 |
---|---|
B <label> | 跳转到label,如果跳转范围超过了+/-2KB,可以指定B.W <label>使用32位的跳转指令 |
BX <Rm> | 间接跳转,跳转到存放于Rm中的地址处,并且切换指令集 |
BL <label> | 跳转到标号地址,并将返回地址保存到LR链接寄存器中 |
BLX <Rm> | 跳转到Rm指定的地址,并将返回地址保存到LR中,切换指令集 |
使用较多的是B指令和BL指令。
_start:
ldr sp, =0x80200000 @设置栈指针
b main @跳转到main函数
上述代码就是典型的在汇编中初始化 C 运行环境,然后跳转到 C 文件的 main 函数中运行。
push {r0, r1} @ 保存r0, r1
cps #0x13 @ 进入SVC模式,允许其它中断再次进入
bl system_irqhandler @加载C语言中断处理函数
cps #0x12 @ 进入IRQ模式
POP {r0, r1} @ 出栈
str r0, [r1, #0x10] @ 中断执行完成,写EOIR
汇编进行算术运算,比如加减乘除,常用运算指令如下:
汇编语言也可以使用逻辑运算指令,常用的运算指令用法:
提到数据库,你多半会联想到事务,进而还可能想起曾经背得滚瓜乱熟的ACID,不知道你有没有想过这个问题,事务有原子性、隔离性、一致性和持久性四大特性,为什么偏偏给隔离性设置了级别?被隔离的隔离性一切还得从事务说起。1.事务(transaction)的起源学习数据库事务的时候,一个典型的案例就是「转账」,这篇文章也不能免俗,故事就从招财向陀螺借100块钱开始吧。一个看似非常简单的现实世界的状态转换,转换成数据库中的操作却并没有那么单纯。这个看起来很简单的借钱操作至少包含了两个动作:陀螺的账户余额-100招财的账户余额+100要保证转账操作的成功,数据库必须把这两个操作作为一个逻辑整体来执行,这个逻辑整体就是一个事务。1.1.事务的定义事务就是包含有限个(单条或多条)数据库操作(增删改查)的、最小的逻辑工作单元(不可再分)。说到这里不得不吐槽一下,事务的英文是transaction,直译为“交易”的意思,但是不知道为什么被意译成了“事务”,让人很难从字面上理解这个概念的含义。中国人对翻译的“信达雅”的偏执在计算机领域或多或少有点不讨喜。1.2.哪些存储引擎支持事务并不是所有的数据库或者所有的
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:https://github.com/sunshinelyz/mykit-delay PS:欢迎各位Star源码,也可以pr你牛逼哄哄的代码。写在前面很长一段时间内,国内互联网公司都在提倡“去IOE”,但是很多企业还是愿意为昂贵的Oracle数据库买单,不少读者所在的公司也在用Oracle,很多读者自行安装Oracle数据库时,多多少少遇到了些问题,苦恼于几天下来还是没能解决问题。这不,不少读者跑来问我,让我输出一篇如何在物理机上安装Oracle的文章,最好是安装过程中不会出现各种“疑难杂症”。哈哈,这要求不过分,我周末也着实捣鼓了一番,不过我是安装在CentOS7/CentOS8虚拟机中的,效果和在物理机中一样,整个过程也算是小有所成吧!输出此文,记录捣鼓的过程,与各位Oracle开发者共勉。环境准备1.CentOS7/CentOS864位最小化安
引言习惯了在windows下敲敲点点的同学,习惯了没有窗口视图就无从下手的同学,来到linux第一个面临的问题就是,core发行版根本不提供gui,太费空间,太费资源,要啥窗口?所以电影里看到很多懂的,不懂的,懂的装不懂的,不懂的装懂的那么演员们,都在奋力敲击键盘,一串串荧幕输出像火箭似的飞速狂奔。这大概只有拷贝文件,或者debug时才能有的盛举吧。没错儿,在linux下,你是PC小白也好,是行业大神也罢,都得敲那么两下子,这叫——“专业”。本文给那些想写个命令行程序,体验一把geek范的同学一次机会,教你3分钟内迅速跻身geek之列。代码时间使用脚手架指令生成一个命令行类:phpartisanmake:consoleWelcomeNewUsers--command=email:newusers复制该指令在app/Console/Commands/文件夹下生成一个WelcomeNewUsers.php的类,因为使用了--command选项,所以类内指定了命令调用的名字。namespaceApp\Console\Commands; useIlluminate\Console\Comman
这篇文章教小白怎么在腾讯云服务器上如何发布自己的网站,做一个自己的网站很简单,做一个好站很难(领取腾讯云优惠券)腾讯云新客专属福利2860元代金券http://t.cn/EynQerH腾讯云热卖云产品3折起http://t.cn/E2j4VwJ2019新春采购节,30款云产品感恩回馈http://t.cn/ExAqp2x购买腾讯云服务器 选择windows操作系统 进入腾讯云服务器管理中心,在更多中选择重装系统-》服务市场-》基础环境-》php运行环境(windows2008...)wamp框架-》开始重装。 重装完成后,在本地电脑上点击开始——》输入mstsc回车——》输入服务器IP地址——》输入服务器登录密码——》进入远程服务器 进入服务器后打开localhost测试环境是否配置完成。 浏览器中输入localhost/phpadmin/打开数据库,完成数据库操作 数据库默认账号root密码websoft9, 打开文件地址如图片所示,把你的网站上传到此目录即可。更新你网站数据库配置和域名地址即可。
文章目录前言一、收货地址功能实现二、效果前言在电商系统中,收货地址是必不可少的功能,没有收货地址用户在下单就没法收到货,而且一个用户会有多个收货地址,比如寄给自己,或者寄给别人。一搬在收货地址选择中会有个默认收货地址以防止每次下单都要选择地址。一、收货地址功能实现//miniprogram/pages/address-list/index.js Page({ /** *页面的初始数据 */ data:{ radio:0, selectedAddressId:0, addressList:[], slideButtons:[{ type:'warn', text:'删除' }] }, //选择地址 asynconSlideButtonTap(e){ //e.detail.index是选择按钮的序号 letid=e.currentTarget.dataset.id console.log('slidebuttontap',e.detail,id) letres=awaitwx.wxp.request4({ url:`http:
SpringCloud源码系列(1)——注册中心Eureka(上) SpringCloud源码系列(2)——注册中心Eureka(中) SpringCloud源码系列(3)——注册中心Eureka(下) SpringCloud源码系列(4)——负载均衡Ribbon(上) SpringCloud源码系列(5)——负载均衡Ribbon(下) SpringCloud源码系列(6)——声明式服务调用Feign 一、Feign基础入门 1、Feign概述 在使用SpringCloud开发微服务应用时,各个服务提供者都是以HTTP接口的形式对外提供服务,因此在服务消费者调用服务提供者时,底层通过HTTPClient的方式访问。我们可以使用JDK原生的URLConnection、Apache的HTTPClient、OkHttp、Spring的RestTemplate去实现服务间的调用。但是最方便、最优雅的方式是通过SpringCloudOpenFeign进行服务间的调用。 Feign是一个声明式的WebService客户端,它的目的就是让WebService调用更加简单。SpringC
[财务][数据化分析][帆软]行式报表-行式引擎适用于大数据量情形下。 这个设计器,只能用FineReport搞。没关系的,FineBI里面可以兼容展示FineReport报表。 在公司采买的时候,如果资金上允许,请直接购买FineBI。 行式引擎适用于大数据量情况下。使用此引擎很多报表特性将不再支持,详细内容清查看文档相关章节。 通过配置工作目录连接FineBI并进行设计。 一、行式报表简介 https://help.finereport.com/doc-view-396.html 1.描述 在 行式报表 中,介绍了行式列表报表的制作方式,下面来介绍几个在行式报表下的典型应用示例。 在线视频教程请点击: 行式报表 2.索引 小节内容简介文档链接 条件属性 在满足一定条件下改变单元格的格式或者显示成不同的值。 添加预警,间隔背景色-条件 数据过滤 从大量的数据当中,获取到符合条件的数据。 筛选数据-过滤 数据排序 报表展示时,有些数据排序后显示更有层次。 排序 结果集筛选 通过
幸福健康成功的人们所选择的50个生活方式 1.停止摄入咖啡因 尽管人们认为在咖啡因的帮助下他们状态更好,事实是,并没有。其实我们对咖啡因已经如此依赖使得我们使用它只是为了恢复原本的状态。当我们不使用咖啡因时,就会状态欠佳,变得心有余而力不足。 这难道不荒唐吗? 饮食健康、睡眠充足以及锻炼得宜,你的身体自然会提供比咖啡因所能提供的更多更好的能量给你。戒掉咖啡看看会怎样。你可能会遭受戒断期的头痛。但是过几天,你会感觉棒极了。 2.早中晚祈祷或冥想 在Genius网络策划活动最近的一次采访中,乔·波兰问托尼·罗宾斯,他通过做什么来集中注意力。“你冥想吗?你会怎么做?”乔问道。 “我不知道我在冥想。我不知道我想冥想及啥都不想,”托尼回答说,“我的目标是理清思路。” 并非全然的冥想,托尼有一套晨间惯例,包括几个呼吸练习以及想象技巧让他思路清晰及注意力集中。对我来说,我用祈祷和琢磨(我的冥想版本)作为同样的载体。 不管你采用什么方法,目标都应该是清晰和集中。今天你想如何? 在未来24小时内哪些事情最为重要? 我得到了最好的结果,因为我清晨的祈祷和冥想是有动机的;我下午的祈祷和冥想是有策略的;而我晚
Description 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权值增加v A2 x v: 将第x个节点所在的连通块的所有节点的权值都增加v A3 v: 将所有节点的权值都增加v F1 x: 输出第x个节点当前的权值 F2 x: 输出第x个节点所在的连通块中,权值最大的节点的权值 F3: 输出所有节点中,权值最大的节点的权值 Input 输入的第一行是一个整数N,代表节点个数。 接下来一行输入N个整数,a[1], a[2], …, a[N],代表N个节点的初始权值。 再下一行输入一个整数Q,代表接下来的操作数。 最后输入Q行,每行的格式如题目描述所示。 Output 对于操作F1, F2,
【TcaplusDB知识库】TcaplusDB表数据缓写介绍 缓写功能介绍: 表数据缓写服务是指tcaplus的增量数据可以缓写到第三方系统(目前支持MySQL和Kafka),用作产品数据查询与分析。其原理为tcapsvr将(从启用缓写开始的)增量写入数据(基于tcaplusbinlog)同步到tcapdb,tcapdb再写入/更改到MySQL或者Kafka中。所以该功能必须保证tcapdb机器有访问MySQL或者Kafka的权限,如果是MySQL,还要有在Mysql建表的权限。否则改功能无法配置成功。 以缓写MySQL为例(Kafka入口跟配置步骤类似),配置方法为:进入表管理页面,找到相应的表,右边有"缓写"链接,即可配置缓写: 缓写页面如下,填入相应的参数即可配置缓写: 提交后会生成事务,配置服务。 其中: 缓写周期:代表数据用户可以接受的数据从Tcapdb同步到第三方系统的延迟,最小1s,这个值越大,代表用户对时延越不敏感。Tcapdb侧会对缓写周期时间窗口内的请求做去重(例如,1s内对同一个key有多次Replace操作,去重后只需要将最后一次Replace后的内容
需求: 使用Flume读取Linux的文本文件,将文本文件中的数据发送到kafka 前置条件: 安装好zk集群,安装好kafka集群 配置Flume 1.在Flume官方下载最新的flume wget http://mirrors.shu.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz 2.解决flume安装包 cd/export/software/ tar-zxvf apache-flume-1.9.0-bin.tar.gz -C/export/servers/ cd/export/servers/ ln-sapache-flume-1.9.0-binflume su-root vi/etc/profile exportFLUME_HOME=/home/hadoop/export/severs/flume exportPATH=$PATH:$FLUME_HOME/bin 3.创建flume配置文件 cd/export/servers/flum
题意:有n台电脑,分布在一个二维坐标系中,两台距离不超过d的电脑可以相互通信,初始所有的电脑都是坏的,给出一组操作,第一种操作是修复某台电脑,只有修好的电脑才可以互相通信,第二种操作是询问两台电脑是否可以直接或间接通信。 解法:并查集。将电脑间距离不超过d的两台电脑用无向边连接,当修复一台电脑时就把它和相邻的点合并,查询时只要看是否在一个集里就可以了。 代码: #include<stdio.h> #include<iostream> #include<algorithm> #include<string> #include<string.h> #include<math.h> #include<limits.h> #include<time.h> #include<stdlib.h> #include<map> #include<queue> #include<set> #include<stack>
1.环境概述 2.删除一个节点 本实验中以删除第二个节点为示例。 2.1删除数据库实例 在第一个节点上(存活的节点)上使用DBCA删除第二个节点的实例。 执行完以上操作可以看下crs_stat–t ,这时可以发现已经找不到第二个实例信息了。 2.2清除ASM实例 在第一个节点上(存活的节点)上执行。 检查前后两次对比: 删除ASM实例相关文件 删除ASM实例的初始化参数文件(被删除节点操作) 例如:rm-f/u01/oracle/product/10.2.0/asm_1/dbs/*ASM* 删除与ASM实例相关的日志文件(被删除节点操作) 例如:rm-f/u01/oracle/product/10.2.0/asm_1/admin/+ASM 备注:由于ASM实例文件和ORACLE文件使用的是一套,在这里这一步暂且不执行,先不删。 2.3删除监听 在存活节点上使用netca删除节点的
记录自己在开发中只用一次,但是容易忘记的问题,PL/SQL-ORACLE配置远程数据库访问: 1,下载PL/SQL连接工具,链接:https://pan.baidu.com/s/1kVeeLNp密码:u2hi 2,解压压缩包,配置instantclient_11_2里的tnsnames.ora 3,配置机器对应的环境变量 NLS_LANG=SIMPLIFIEDCHINESE_CHINA.ZHS16GBK TNS_ADMIN=D:\install\PLSQL\instantclient_11_2 4,打开pl/sql进去后配置(工具--首选项--连接), Oracle主目录名=D:\install\PLSQL\instantclient_11_2 OCI库=D:\install\PLSQL\instantclient_11_2\oci.dll 5,配置完成重新打开pl/sql进行登录连接。
描述 title()方法:将字符串中的单词“标题化”,即首字母大写,其余字母转化为小写。 upper()方法:将字符串中的小写字母转化为大写字母。 lower()方法:将字符串中的大写字母转化为小写字母。 语法 str.title() str.upper() str.lower() 复制 参数 NA 返回值 title(): 返回一个首字母大写,其余字母均为小写的字符串 upper():返回一个字母全大写的字符串 lower():返回一个字母全小写的字符串 实例 #!/usr/bin/python3 new_str='hello,PYTHON' print(new_str.title()) print(new_str.upper()) print(new_str.lower()) 复制 输出: Hello,Python#首字母大写,其余小写 HELLO,PYTHON #转为字母全大写 hello,python#转为字母全小写 复制 note:在处理用户的输入时,我们无法保证用户输入的大小写,所以可以
元旦的年前思绪(2021~2022) 2021年就要过去了啊,感觉从1918班到1922班,一切都太快了. 还没有忘记去年的元旦晚会,就要迎来今年的元旦晚会了. OI 退役狗竟然还记得有OI这个东西,还记得博客园(bushi 不过今年cj的竞赛很拉胯就是了,大家基本都回来搞学科力(我的竞争力又--) 旺财和lzf越来越强了,wyl手握银牌还是年级前30,蛤yujun和母鸡也应该能稳稳上线. 我每天和zzy苟且偷生,在晚一下课混日子,(我们都有光明的未来) 学科 分班之后竟然分到了jenny班,从憨憨到德育名师更多的还是不适应吧. 感觉其实也没有很严格,只是和过去自由放荡的日子反差太大了(我才不放荡/ww 好在学科也越来越好(除了物理和数学天天暴毙,语文波澜不定,化学生物赋分,英语要看运气),也没有其他的大问题 还有157天,未来可期,剩下能做的就是努力了! 感觉我好强\(QwQ\) GoodBye2021,Hello2022
###Theerrormayexistin/src/main/resources/com/star/css/dao/sql/workflow.xml ###TheerrormayinvolveCOM.STAR.insertHistoryStep-Inline ###Theerroroccurredwhilesettingparameters ###SQL:insertintoWORKFLOWSTEPEN(WORKFLOWSTEPID_PK,BEGINDATE,WORKFLOWINSTANCEID_FK,ISMANUAL,DETAILMESSAGE,PROCESSORID,COMPLETEDATE,OPERATORID,OPERATEDATE,statusid,name_,code_,MEM,CREATEID,MODIFYID,MODIFYDT)values(?,?,?,?,?,?,?,?,?,1,?,?,?,?,?,?) ###Cause:java.sql.SQLException:ORA-01536:spacequotaexceededfortablespace'TBLCSS' ;u