立即数

新的开始——LED灯汇编机器码的点亮方式

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-30 05:38:45
在几个月前看2440视频的时候,发现太多知识欠缺,购买开发板期间补习makefile,linux,arm汇编和arm构架之后,现在重新开始学习。 先看板子LED硬件连接图: 可以看到LED 1,2,4连接GPF4,5,6。故,查看芯片手册GPF IO口: 有寄存器地址,有对应位的功能,剩下的就是我们的编程了。 写在前面:基本汇编拾遗 Load/Store 内存访问指令: LDR:字 数据读取指令 LDRB:字节读取指令 LDR R0,[R1];把内存单元R1中的数据读取到R0寄存器中 。。。LDR,STR还有很多后缀的指令不详举例了,以后用到再说明 STR:字数据写入指令 STRB:字节数据写入指令 STR R0,[R1,#0X100];把R0中的数据保存到内存单元(R1+0X100)中 B:跳转 MOV:移动 MOV R1,R0;把R0的值赋值给R1 伪指令:LDR(上面一个LDR的用法是汇编指令,但是LDR也可以是伪指令) LDR R0,=0X1234;表示把0x1234赋值给R0,你可能会想,MOV不就可以达到效果了吗? 但是,MOV只能处理立即数,当我们不能保证一个数是否是立即数的时候,请使用LDR伪指令。 关于什么样的数才能算是立即数,可以参考ARM体系结构 P24对立即数的叙述。 简单介绍一下: 每个立即数由一个8位的常数循环右移偶数位得到

汇编语言---GCC内联汇编

我怕爱的太早我们不能终老 提交于 2020-01-05 09:57:48
GCC支持在C/C++代码中嵌入汇编代码,这些代码被称作是"GCC Inline ASM"(GCC内联汇编); 一、基本内联汇编 GCC中基本的内联汇编非常易懂, 格式如下 : __asm__ [__volatile__] ("instruction list"); 其中, 1.__asm__ : 它是GCC定义的关键字 asm 的宏定义(#define __asm__ asm),它用来声明一个内联汇编表达式,所以,任何一个内联汇编表达式都以它开头,它是必不可少的;如果要编写符合ANSI C标准的代码(即:与ANSI C兼容),那就要使用__asm__; 2.__volatile__ : 它是GCC关键字 volatile 的宏定义;这个选项是可选的;它向GCC声明"不要动我所写的instruction list,我需要原封不动地保留每一条指令";如果不使用__volatile__,则当你使用了优化选项-O进行优化编译时,GCC将会根据自己的判断来决定是否将这个内联汇编表达式中的指令优化掉;如果要编写符合ANSI C标准的代码(即:与ANSI C兼容),那就要使用__volatile__; 3.instruction list : 它是汇编指令列表;它可以是空列表,比如:__asm__ __volatile__("");或__asm__("");都是合法的内联汇编表达式

ARM汇编指令

让人想犯罪 __ 提交于 2019-12-10 07:40:14
转载: arm汇编指令-Bingghost-博客园 学习嵌入式系统时的资料收集 ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令 一、跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ.使用专门的跳转指令 分支指令 B 带链接的分支指令: BL 带状态切换的分支指令 BX Ⅱ. 程序计数器PC控制 直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值 可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令 可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。 ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令: 1、B指令 B指令的格式为: B{条件} 目标地址 2、BL指令 BL指令的格式为: BL{条件} 目标地址 BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容, 因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个 指令处执行。 该指令是实现子程序调用的一个基本但常用的手段 3、BLX指令 BLX指令的格式为: BLX 目标地址 BLX指令从ARM指令集跳转到指令中所指定的目标地址

DataGridView编辑后立即更新到数据库的两种方法

ε祈祈猫儿з 提交于 2019-12-08 07:09:26
 DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据。最近在做一个迷你超市管理系统,要大量用到这个控件。所以花时间好好研究了下。 这是迷你超市管理系的库存数据DataGridView,用户一定会想如果能直接在DGV中修改数据就好了。 是的,这是一个很好的想法,这个功能微软早就帮我们想到了,现在可以使两种方法加以实现。下面就来介绍一下他们。 第一张方法:基于DataAdapter对象创建一个CommandBulider,用来生成Sql命令,修改数据源,从而直接更改数据表的内容。   前提是:     1.这个表必须有主键,否则该对象无法生成Update和delete、insert的Sql命令,报异常:      对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。     2.实例化SqlCommandBuilder对象的数据适配器对象SqlDataAdapter必须预先设置好SelectCommand属性     3.更新的表中不能包括image类型的字段(列)   由于出错的情况有很多,程序员无法完全掌握,所以我们强烈建议将更新代码写在try catch里  下面是此方法的实例:         /// <summary> /// 数据适配器

2.6-MIPS指令简介

走远了吗. 提交于 2019-12-03 11:54:12
  MIPS秉承着指令数量少, 指令功能简单的设计理念,那这样的设计理念 是如何实现的呢?在这一节,我们就将来分析MIPS指令的特点。   相比于X86指令所提供的动辄上千页的指令说明,MIPS指令 只用这两页纸就可以说清楚了。MIPS指令的基本格式 就分为这三种,R型,I型和J型。R型指的是寄存器型, I型指的是立即数型,J型指的是转移型。 我们用这张表对MIPS的指令进行不同纬度的分类,横轴是按照指令的格式 分为R型、I型和J型,纵轴则是根据指令的功能类型分为运算指令、 访存指令和分支指令。首先,我们来看指令格式为R型的运算指令。 R型指令总共包含六个域,其中最高位的opcode域 是六个比特,最低位的funct域也是六个比特, 中间的四个域,均为五个比特,我们分别来看各个域的用途。 opcode域,用于指定指令的类型,对于所有的R型指令,这个域的值,均为零, 但这并不是说明R型指令只有一种,它还需要用funct域来更为精确的指定指令的类型。所以说,对 于R型指令,实际上一共有12个比特操作码, 那大家可以思考一下,为什么不将opcode域和funct域合并成一个12比特的域呢? 那样岂不是更直观明了吗?我们再来看这些5比特的域。 RS域,这个域通常用来指定第一个源操作数所在的寄存器编号, rt域通常用来指定第二个源操作数所在的寄存器的编号,

opencv 图片特效-灰度2

匿名 (未验证) 提交于 2019-12-03 00:34:01
opencv 图片特效 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联网企业架构(干货) python 学习持续更新 ElasticSearch 笔记 kafka storm 实战 (干货) scala 学习持续更新 RPC 深度学习 灰度处理 方法1 imread #imread #方法1 imread import cv2 img0 = cv2.imread('image0.jpg',0) img1 = cv2.imread('image0.jpg',1) print(img0.shape) print(img1.shape) cv2.imshow('src',img0) cv2.waitKey(0) 方法2 cvtColor #方法2 cvtColor import cv2 img = cv2.imread('image0.jpg',1) dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 颜色空间转换 1 data 2 BGR gray cv2.imshow('dst',dst) cv2.waitKey(0) 方法3 RGB R=G=B = gray (R+G+B)/3 import cv2 import