草庐IT

arm汇编

全部标签

C/C++ 反汇编:关于Switch语句的优化措施

流程控制语句是C语言中最基本的判断语句,通常我们可以使用IF来构建多分支结构,但同样可以使用Switch语句构建,Switch语句针对多分支的优化措施有4种形式,分别是,IF-ELSE优化,有序线性优化,非线性索引优化,平衡判定树优化。与IF语句结构不同,IF语句会在条件跳转后紧跟语句块,而SWITCH结构则将所有条件跳转都放置在一起,判断时需要重点观察每个条件跳转指令后面是否跟有语句块,以辨别SWITCH分支结构。在switch分支数小于4的情况下,编译器将采用模拟IF-ELSE分支的方式构建SWITCH结构,这样则无法发挥出SWITCH语句的优势,当分支数大于3并且case的判断值存在明显

汇编学习笔记之转移指令

什么是转移指令:可以修改IP,或同时修改CS和IP的指令统称为转移指令。转移指令可以通过修改CS和IP的值来实现对CPU执行内存某处代码的控制段内转移:指令转移方式IP=IP+位移。等同于JMP当前IP+需要位移字节段内转移只修改IP,还是处于一个CS段地址内,例如:JMPAX段内短转移:JMPSHORT标号段内短转移,位移为8bit位,最高位为符号位。剩余7个bit位可位移,位移间距是:-128~127,也就是说在编译之后,使用JMPSHORT标号指令往前转移最多128个字节,往后转移最多127个字节。代码示例:ASSUMECS:CODECODESEGMENT START: MOVAX,0

汇编之使用标志寄存器进行指令转移

根据单个条件标志的设置情况转移指令英文含义格式测试条件JZ/JEjumpifzero/equal结果为零/相等则转移JZ/JEOPRZF=1JNZ/JNEjumpifnotzero/equal结果不为零/不相等则转移JNZ/JNEOPRZF=0JSjumpifsign结果为负则转移JSOPRSF=1JNSjumpifnotsign结果为正则转移JOOPRSF=0JOjumpifoverflow溢出则转移JOOPROF=1JNOjumpifnotoverflow不溢出则转移JNOOPROF=0JP/JPEjumpifparity/parityeven奇偶位为1则转移JP/JPEOPRPF=1JN

ARM Cortex-A、Cortex-M和Cortex-R简介

ARMCortex-A,Cortex-M和Cortex-R是ARM处理器系列的不同产品线,针对不同的应用场景和要求进行了优化。以下是它们之间的主要区别:1.应用场景:Cortex-A系列处理器主要用于高性能计算设备,例如智能手机、平板电脑、个人电脑和服务器等。它们通常具有较高的时钟频率和更大的存储容量。Cortex-M系列处理器专为嵌入式系统设计,用于低功耗、实时控制和物联网设备。Cortex-R系列处理器专为实时应用程序设计,如实时嵌入式系统中用于自动驾驶、工控系统和医疗设备等。2.处理能力和性能:Cortex-A系列处理器具有更大的指令集和更高的时钟速度,能够处理复杂的应用程序和任务。Co

基于Linux平台交叉编译 flutter arm64应用

   操作系统ubuntu20.04,开发工具AndroidStudio+Flutter,运行平台RK3566Linux。截止现在Flutter官方尚未正式对Linuxarm64进行支持,仅有flutter-elinux可用。开发环境的搭建过程遇到了很多的坑,幸运的是最终完成了。为避免后来者再次浪费时间,特撰此文以飨读者。   本文仅记录编译环境的搭建和验证,不涉及具体的应用开发。一、操作系统以及基础环境准备1、操作系统准备 本文选用ubuntu20.04。其他版本作者没试过,如果你验证某版本可行请留言。2、准备基础环境 安装unzipcurlclangcmakepkg-config以及g++

Debian arm系统安装wxPython

一、系统版本二、安装wxPython-4.0.4.tar.gz1、下载依赖>sudoaptupdate>sudoapt-getinstallbuild-essentiallibgtk-3-devlibwebkit2gtk-4.0-devlibssl-devlibcurl4-openssl-devlibgstreamer-plugins-base1.0-devlibnotify-devfreeglut3freeglut3-devlibtiff-dev-y2、安装wxPython下载wxPython-404源代码,解压,进入解压目录:构建python包:>python3build.pybuild安

刷机教程-arm-N1

刷机所需工具本次刷词用到的零碎工具比较多,不过都是常见刚需设备,大家可以按照清单核对一下。1.N1本体2.电脑一台说明:U口需要稳定。3.USB公对公线说明:请使用尺寸在0.5米以内的USB2.0协议的公对公线,USB3.0亲测不识别,绿联这款2.0协议的就行。4.U盘说明:容量大于等于8G。5.路由器6.网线7.显示器8.鼠标说明:原版系统需要开adb,非原版系统在没有配套遥控器的前提下也可以用鼠标操作,2.4G鼠标亲测即插即用。9.螺丝刀说明:如果刷过第三方系统且该系统不具备管理员权限就需要拆机了,N1的螺丝孔位非常深而且小,所以需要上精密螺丝刀。另外短接其实用正常尺寸的一字起即可,如果没

IMX6ULL ARM Linux开发板SD卡启动,SD卡的分区与分区格式化创建

一、确定TF卡挂载到ubuntu上的设备名称及分区情况1.在ubuntu不接入TF卡的情况下, 使用df-lh/dev/sd*命令查看当前"/dev/sd开头"的设备。##输入df-lh/dev/sd*命令,敲回车键~$df-lh/dev/sd*2.将TF卡接入到ubuntu,再次使用df命令,进行查看,多出来的设备即是TF卡挂载到ubuntu的设备名称如图所示,多出来的/dev/sdb1/dev/sdb2即为TF卡的挂载分区,TF设备名称为/dev/sdb注:因为我之前已经对SD卡进行过分区,分出两个区,sdb1为分区1(存放Linux内核及设备树文件),sdb2为分区2(存放根文件系统)u

嵌入式学习---ARM中断控制系统

目录外部事件与CPU的交互方式查询方式中断方式什么是中断源S3C2440支持60个中断源FIQ和IRQ中断处理流程将外设中断通知给CPUSUBSRCPND寄存器INTSUBMSK寄存器SRCPND寄存器INTMSK寄存器INTMOD寄存器INTPND寄存器硬件中断处理是实时系统设计的最重要、最关键的问题。外部事件与CPU的交互方式查询方式程序不断地查询各设备的状态,并做出相应的反应。该方式实现比较简单,常用在比较单一的系统中,比如一个温控系统中可以使用查询方式不断检测温度的变化。特点:实现简单;但CPU利用率很低,不适合多任务的系统。中断方式当事件发生时,硬件会设置某个寄存器;CPU在每执行完

arm-eabi-gcc 和 arm-none-eabi-gcc 都是基于 GCC 的交叉编译器

 arm-eabi-gcc和arm-none-eabi-gcc都是基于GCC的交叉编译器,用于编译ARM架构的嵌入式系统。它们的命名规则如下:arm表示目标架构是ARM。eabi表示嵌入式应用程序二进制接口(EmbeddedApplicationBinaryInterface),是一种用于嵌入式系统的标准接口。gcc表示GNU编译器集合(GNUCompilerCollection),是一种开源的编译器。none表示没有指定供应商或操作系统。它们的主要区别是:arm-eabi-gcc是Android平台使用的交叉编译器,它可以编译Android的boot、kernel、filesystem和应用