当前位置: 首页 > news >正文

企业网站功能清单vs2008如何新建网站

企业网站功能清单,vs2008如何新建网站,网站链接优化,网络营销推广的步骤计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备#xff1a;将其他信号转换为计算机可以识别的信号#xff08;电信号#xff09;。输出设备#xff1a;将电信号#xff08;#xff10;、#xff11;#xff09;转为人或其他设备能理解的… 计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备将其他信号转换为计算机可以识别的信号电信号。输出设备将电信号、转为人或其他设备能理解的信号。运算器CPU对信息处理和运算的部件常进行算术运算和逻辑运算其核心是算术逻辑单元ALUCPU中用各种各样的数字电路搭配成各种各样的运算电路如加、减法等。控制器整个计算机的指挥中心存储器存放程序和数据的部件也是计算机能够实现“存储程序控制”的基础。 程序指令的有序集合 ROM flash (EMMC)、磁盘空间 、掉电不丢失数据 只读存储器_百度百科 RAM 内存、掉电丢失数据 随机存取存储器_百度百科 IO逻辑输入/输出 计算机系统中的高低电平逻辑1和0数据在计算机中的存储、传输、运算都是以二进制形式进行的。 数据的传输通过总线真正传递的是电信号高低电平0、1。运算在电路中进行集成电路中运算。 电压电压差 电势差 模拟信号模拟信号是连续的模拟信号可以是任意数值状态 数字信号数字信号是离散不连续的数字信号只有“0”和“1”两种状态 三级存储结构 cache 速度快、价格贵、容量小、断电丢失、CPU可以直接访问。存储当前正在执行的程序中的活跃部分,以便快速地向CPU提供指令和数据 基本原理 高速缓存Cache详解(西电考研向_多路组相联-CSDN博客 主存储器速度、价格、容量介于CACHE和辅助存储器之间、断电丢失、CPU可以直接访问。存储当前正在执行的程序和数据 辅助存储器速度慢、价格低、容量大、断电不丢失、cpu不可以直接访问。存储暂时不运行的程序和数据需要时再传送到主存 Cache对程序员来说一般会有透明性也就是程序员其实是看不到Cache的因此不能对它进行操作。 总线 总线Bus是计算机各种功能部件之间传送信息的公共通信干线它是由导线组成的传输线束 按照计算机所传输的信息种类计算机的总线可以划分为数据总线、地址总线和控制总线分别用来传输数据、数据地址和控制信号系统总线。 数据总线 1是CPU与内存或其他器件之间的数据传送的通道。 2数据总线的宽度决定了CPU和外界的数据传送速度。 3每条传输线一次只能传输1位二进制数据。如: 8根数据线一次可传送一个8位二进制数据(即一个字节)。 4数据总线是数据线数量之和。 地址总线 1CPU是通过地址总线来指定存储单元的。 2地址总线决定了cpu所能访问的最大内存空间的大小。如: 10根地址线能访问的最大的内存为1024位二进制数据1024个内存单元 3地址总线是地址线数量之和。 控制总线 1CPU通过控制总线对外部器件进行控制。 2控制总线的宽度决定了CPU对外部器件的控制能力。 3控制总线是控制线数量之和。 总结 数据总线的宽度决定CPU与其他元器件一次最大传送的数据量 地址总线的宽度决定CPU的寻址能力 控制总线决定CPU对其他元器件的控制能力。 例子 DMA总线 DMA(Direct Memory Access)即直接存储器访问使用DMA总线可以不通过CPU直接在存储器及外设之间进行数据传递。不做控制功能 单片机基础 单片机简介 单片机Single-Chip Microcomputer是一种集成电路芯片。 微控制单元(Microcontroller UnitMCU) 又称单片微型计算机(Single Chip Microcomputer )或者单片机其采用集成电路技术将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、定时器/计时器、多种I/O口和中断系统等功能集成到一块硅片上。可以说单片机就是一个小而完善的微型计算机系统。 https://www.bilibili.com/video/BV1HW411a7SS/?spm_id_from333.337.search-card.all.clickvd_source2820d6227cdfd0cc24c48e011da53b66 SoCSystem on Chip片上系统SoC的定义多种多样由于其内涵丰富、应用范围广很难给出准确定义。一般说来 SoC称为系统级芯片也有称片上系统意指它是一个产品是一个有专用目标的集成电路其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术用以实现从确定系统功能开始到软/硬件划分并完成设计的整个过程。SoC就是定制功能版本的MCU 百度百科 单片机型号 51单片机8051 STC89C51 宏晶科技 STC AT89C51 ATMEL 宏晶科技公司 宏晶科技_百度百科 ATMEL公司 ATMEL公司_百度百科 32单片机 STM32 意法半导体ST GD32 兆易创新GD 32位处理器 - 处理数据宽度是32位的。 处理器位数CPU单次运算最大处理的数据位数 意法半导体 意法半导体_百度百科 兆易创新 兆易创新科技集团股份有限公司_百度百科 开发板/最小系统板 开发板通常是学习用途功能比较全接口丰富是用于研发、研究、学习的一块板子。 STM32U5开发板介绍 最小系统板是个核心板集成了核心的通用功能可以根据需求定制各种不同的底板通用性较好。再者核心板作为一块独立的模块被分离出来也降低了开发的难度增加了系统的稳定性和可维护性通常用于做项目也可以作为模块在产品里在直接用。 STM32 简介 https://www.st.com.cn/zh/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html STM32 | 产品 | STM32 | MCU单片机 | 意法半导体STM | STMCU中文官网 STM32是意法半导体公司生成一款32位的微控制器。 STM32功能强大、性能优异、片上资源丰富、功耗低、是一款经典的嵌入式微控制器。 命名规范 ST 意法半导体 M 微控制器 32 32位处理器 类型 F 通用/基础型 foundation G 多用途型 general-purpose L 低功耗 low power H 高性能 High performance S 简单/标准型 Standard U超低功耗 系列 0 精简系列 1/2/3 增强系列 4/7 高性能系列 子型号 00/01/02/03/05/07 引脚数量 K/6-32脚 C/8-48脚 R-64脚 V-100脚 Z-144脚 A-168脚 I-176脚 B-208脚 N-216脚 存储量 6 32KB 8 : 64KB B 128KB C 256KB D 384KB E 512KB G 1MB I 2MB 封装 U - UQFN封装 T - TQFP封装 工作温度 6 - -40 ~ 85度 STM32的优势 STM32 | 产品 | STM32 | MCU单片机 | 意法半导体STM | STMCU中文官网 产品型号丰富可选择性强 运算速度快功耗低 处理器外设接口丰富 库函数开发体系学习资料多应用广泛。 ARM体系结构 STM32G030采用ARM Cortex-M0内核架构 STM32U575采用ARM Cortex-M33内核架构 M33内核详情 https://www.st.com.cn/content/st_com/zh/arm-32-bit-microcontrollers/arm-cortex-m33.html 想了解其他架构请点击下方链接 冯·诺依曼架构哈佛架构嵌入式学习_冯诺依曼架构-CSDN博客 认识ARM ARM代表一个公司 安谋国际科技股份有限公司_百度百科 ARM是一家公司ARM公司是一家芯片知识产权IP供应商它与一般的半导体公司最大的不同就是不制造芯片且不向终端用户出售芯片而是通过转让设计方案由合作伙伴生产出各具特色的芯片。 ARM可以表示一些处理器的统称 早期经典处理器ARM7 ARM9 ARM11 后续处理器开始以cortex命名 Cortex-X系列 超高性能 Cortex-A系列 针对开放式操作系统的高性能处理器 应用于智能手机、数字电视、智能平板等高端运用 Cortex-R系列 提供非常高的性能和吞吐量同时保持精准的时序属性和可预测的中断延时通常用于时序关键的应用中 针对实时系统、满足实时性的控制需求 应于汽车制动系统、动力系统等 Cortex-M系列 为单片机驱动的系统提供了低成本优化方案 应用于传统的微控制器市场、智能传感器、汽车周边、物联网设备等 ARM表示一种指令集 指令能够指示处理器执行命令称为指令 - 指令集处理器能够识别的指令的集合称为指令集 ARM指令集所有指令机器码都专用32bit存储空间代码灵活指令简洁执行ARM指令PC每次自加4 Thumb指令集所有指令机器码都专用16bit存储空间代码灵活指令简洁执行ARM指令PC每次自加2 ARM的命名有指令集架构、 处理器架构、 处理器型号三类命名规则 架构: arm-v4arm-v5arm-v6arm-v7(32Bits)arm-v8(64Bits 架构指支持的汇编指令集不同架构汇编指令集不同 问目前主流处理器架构 ARM架构、Intel X86/X64架构、MIPS架构、RISC-V开源 指令集RISC和CISC 精简指令集(RISC)--微处理器 只保留常用的的简单指令硬件结构简单复杂操作一般通过简单指令的组合实现一般指令长度固定且多为单周期指令。 RISC处理器在功耗、体积、价格等方面有很大优势所以在嵌入式移动终端领域应用极为广泛 举例如有加法运算器 没有乘法运算器 3*3 ---》333 复杂指令集(CISC)--电脑CPU 不仅包含了常用指令还包含了很多不常用的特殊指令硬件结构复杂指令条数较多一般指令长度和周期都不固定 CISC处理器在性能上有很大优势多用于PC及服务器等领域 Cortex-M33的寄存器 1通用寄存器 R0-R1213个通用寄存器。其中 R0-R7为低端寄存器可作为16位或32 位指令操作数R8-R12为高端寄存器只能用作32位操作数 R13栈指针寄存器 SP(the stark pointer)它用于访问堆栈内存(例如堆栈PUSH或POP操作)。 R14链接寄存器LR(the link register)用于存储子程序或者函数调用的返回地址 R15程序计数器PC(the program counter register)存储下一条将要执行的指令的地址。 2特殊寄存器 xPSR组合程序状态寄存器该寄存器由三个程序状态寄存器组成 应用程序状态寄存器 APSR保存程序计算结果的状态标志 N负数标志 Z零标志 C进位借位标志 V溢出标志 中断程序状态寄存器 IPSR包含当前ISR中断服务程序的异常编号 执行程序状态寄存器 EPSR包含Thumb状态位 CONTROL控制寄存器 控制处理器处于线程模式时使用哪个堆栈 0使用MSP 处理器模式时固定使用MSP 1使用PSP CPU运行原理 根据下载的程序运行程序是指令的有序集合 一条指令机器码的执行通常分为三个阶段 1)取指控制器将PC寄存器中的值发送给内存,内存将对应地址中的指令(机器码)传送回CPU的指令寄存器IR中 2)译码指令译码器对IR中的指令进行识别将指令(机器码)解析翻译成具体的运算操作(/-/*...) 3)执行控制器控制运算器中对应的运算单元进行运算运算结果写入寄存器 注意PC每取地址一次自加一次。PC的值自动增加使PC指向内存中的下一条指令 思考 1.运算器不同处理指令不同。不同的处理器上如何运行同一个c语言程序 假设指令集有乘法指令结果并没有乘法运算器怎么办 指令流水线 指令的执行是按照流水线 取指--》取指器 根据PC值取指令 译码--》译码器 执行--》执行器 以上三个器件都是单周期的器件三个器件的工作是独立 指令1 指令2 指令3 指令4 指令5 1 取指 2 译码 取指 3 执行 译码 取指 4 执行 译码 取指 5 执行 译码 取指 6 执行 译码 7 执行 PC永远指向当前取指指令的地址一旦取到指令pc后移4byte保存下一条指令地址。 指令流水线机制的引入确实能够大大的提升指令执行的速度但在实际执行程序的过程中很多情况下流水线时是无法形成的比如芯片刚上电的前两个周期、执行跳转指令后的两个周期等。 所以指令流水线的引入以及优化只能使平均指令周期不断的接近1而不可能真正的达到1且流水线级数越多芯片设计的复杂程度就越高芯片的功耗就越高。 编译原理 gcc编译流程分为四个步骤 预编译处理主要是进行宏替换和拷贝包含的头文件到本文件 编译检查代码的规范性,是否有语法错误等,没错的话将代码编译成汇编语言 3汇编将汇编文件转换成二进制目标文件 链接链接库函数生成可执行文件 机器码二进制是处理器能直接识别的语言不同的机器码代表不同的运算指令处理器能够识别哪些机器码是由处理器的硬件设计所决定的不同的处理器机器码不同所以机器码不可移植 汇编语言是机器码的符号化即汇编就是用一个符号来代替一条机器码所以不同的处理器汇编也不一样即汇编语言也不可移植 C语言在编译时我们可以使用不同的编译器将C源码编译成不同架构处理器的汇编所以C语言可以移植 ARM的数据类型 char字节8位 halfword半字:16位 word全字32位 doubleword64位(cortex-a) quadword128位(ARM-v8) ARM-v7架构32bit处理器 ARM-v8架构64bit处理器 处理器的32位和64位什么含义 32位一条指令可以进行32位数据的运算 64位一条指令可以进行64位数据的运算 字节序 大端对齐 低地址存到高地址高地址存放到低地址 小端对齐 低地址存到低地址高地址存放到高地址 注ARM一般使用的是小端对齐 ARMv8-M的指令集 ARM处理器支持两种指令集ARM 和 Thumb。 ARM指令集 32位精简指令集 指令长度固定 降低编码数量产生的耗费减轻解码和流水线的负担 Thumb指令集指令宽度16位 Thumb指令集是ARM指令集的一个子集 与32位指令集相比大大节省了系统的存储空间密度高 Thumb指令集不完整所以必须配合ARM指令集一同使用。 •Arm Cortex-M处理器中使用的指令集称为Thumb指令集。这个指令集包含一系列扩展。Cortex-M33的指令集是Cortex-M23处理器指令集的超集。为了便于项目迁移以前的Cortex-M处理器中可用的所有指令在Armv8-M架构中也可用。一般来说Cortex-M处理器中的指令集提供了向上兼容的特性。例如:Cortex-M23的指令集是Cortex-M0/M0处理器中指令集的超集。 •Cortex-M33的指令集是Cortex-M3和Cortex-M4处理器指令集的超集。除了双精度浮点指令和缓存预加载指令外Cortex-M7处理器支持的所有指令都可以在Cortex-M33中使用。(注:Cortex-M33没有双精度FPU选项或缓存存储器控制器功能。)向上兼容性是Cortex-M处理器家族的一个重要特征因为它提供了软件的可重用性和可移植性。Armv8-M基线指令集中使用的许多指令的大小都是16位。这使得高代码密度成为可能。对于一般的数据处理和控制任务程序代码可以主要由16位指令(而不是32位)组成以减少程序内存的大小。 问Thumb指令集和ARM指令集的区别 系统架构 系统主要由以下几个模块组成 : ● 二个主模块 : – Cortex-M0 内核及先进高性能总线 (AHB bus) – 通用 DMA (通用的直接存储器存取) ● 三个从模块 : – 内部 FLASH – 内部SRAM – AHB和AHB到APB的连接桥所有的外设都挂在APB总线上 问flash和SRAM的区别 Flash存储器是一种非易失性存储器可以在掉电之后保存数据通常用于存储程序代码。Flash存储器的可写入次数有限且需要执行擦除操作才能写入新的数据因此在使用过程中需要注意擦写周期和数据备份问题。 SRAM存储器则是一种易失性存储器具有相对较快的读写速度和无限的读写次数但掉电时将会丢失所有内容。SRAM存储器主要用于暂存数据和临时变量读写操作由CPU直接完成访问速度较快。 单片机的Flash存储器和SRAM存储器通常都嵌入在单片机芯片内部能够方便地实现对程序和数据的读写操作。通常编译器会将程序代码烧录到Flash存储器中并使用SRAM存储器来存储变量、函数堆栈和其他临时数据。 问什么是外设如何理解片上外设(片上资源) 与传统的外设不同片上外设通常具有以下优点 高效性片上外设能够与主处理器实现高速的数据传输响应时间短执行效率高。 集成度高片上外设多个模块都嵌入到处理器芯片内部极大地降低了PCB面积和电路复杂度。 低功耗处理器和片上外设采用相同的工艺能够满足高密度和低功耗的需求。 可靠性高提高了整体系统的可靠性和稳定性也降低了电磁干扰的可能。 问AHB和APB的区别 AHB高级高性能总线是高速总线是一种系统总线它主要负责连接处理器、DMA等一些内部接口。AHB系统由主模块、从模块和基础结构3部分组成整个AHB总线上的传输都由主模块发出由从模块负责回应。 APB高级外设总线是低速总线它主要负责连接外围设备它又分为APB1和APB2它的总线架构不像 AHB支持多个主模块在APB里面唯一的主模块就是APB桥。 如何开发 开发环境搭建 STM32CubeMX ST公司出品 工具链接 工具链接 https://www.st.com/zh/development-tools/stm32cubemx.html STM32CubeMX是一种图形工具通过分步过程可以非常轻松地配置STM32微控制器和微处理器以及为Arm® Cortex®-M内核或面向Arm® Cortex®-A内核的特定Linux®设备树生成相应的初始化C代码。 作用及功能 1工程项目搭建和配置 2直观选择微控制器 3图形化引脚功能配置、引脚冲突提示 4动态配置时钟树 5动态设置参数和初始化 Keil uVision5 Keil Product Downloads Keil μVision 5 也称MDK-ARM、Realview MDK MDK ——》Microcontroller Development Kit MDK包含以下几个部分: μVision5一种集成开发环境提供了多种不同的功能如编辑器、编译器、调试器等。 ARM编译器一种嵌入式ARM C / C编译器可在多种不同的微控制器平台上运行。 Device Family Pack一种特定于属于不同微控制器平台/系列/型号的软件包包括库文件、设备描述文件等。 Debugger一款高级调试器支持多种不同的调试功能如单步调试、断点调试、内存映射等。 STM32环境获取及搭建 具体安装步骤见以下文件 STM32环境搭建 软件介绍 【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】-CSDN博客 汇编语言 c语言中哪些代码可以生成汇编指令 1》带#号预处理辅助编译器怎么编译编译什么内容 预处理器是C语言编译器的一个组成部分它在编译代码之前对代码进行处理。预处理器指令以#号开头告诉编译器在编译代码之前执行一些操作。其中#include指令用于将头文件包含到源代码中#define指令用于定义宏。预处理器的主要作用是辅助编译器编译代码。 例如在编译时将头文件中的函数声明插入到源代码中或者将宏替换为实际的值。预处理器处理完代码后编译器将生成目标代码最终生成可执行文件。 2》带;号的语句可以编译生成指令 在编译器中分号是语句结束的标志编译器会将分号之前的语句编译成指令并添加到指令序列中。 汇编整体分类 1》指令编译完生成一条机器码存储在内存单元当中CPU执行时能完成对应的操作(类似于C中的语句) 2》伪操作(相当于c中的#的内容告诉编译器怎么编译不会生成机器码也不会占用内存,其作用是告诉编译器怎样编译(类似于C中的预处理指令) 3》伪指令不是指令,编译器在编译时将其替换成等效的指令 (如cpu中没有乘法器对应没有乘法指令3*3 ---》用加法器实现333替换实现) 汇编中注释代码用或;注释一行 /* */注释一段代码 指令分类 1.数据处理指令 对数据进行逻辑、算数运算 2.跳转指令 实现程序的跳转,实质是修改PC 3.Load/Store指令 对内存的读写操作 4.状态寄存器传送指令 对状态寄存器进行读写操作 5.异常中断产生指令 触发软中断,常用于内核的系统调用 //SWI软中断 6.协处理器指令 操作协处理器的指令 //如3*3 ---》用加法器实现333比较慢。我们可以外接一个协处理器(乘法器)(每个协处理器的功能比较单一)协处理器指令就是操作这个协处理器的用的比较多的cp15协处理器。 程序编写 AREA STACK, NOINIT, READWRITE __initial_spAREA RESET, DATA, READONLY __Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLYENTRY mainloopB loop END 解释 1. AREA STACK, NOINIT, READWRITE: 这一行指定了一个名为STACK的内存区域它用于存储堆栈。NOINIT表示这个内存区域在程序启动时不需要初始化READWRITE表示这个内存区域可以被读取和写入。 2. __initial_sp: 这一行定义了一个名为__initial_sp的符号它表示堆栈指针的初始值。在这里它被定义为堆栈的起始地址。通常这个符号会在链接脚本中进一步定义为实际的堆栈内存区域的起始地址。 3. AREA RESET, DATA, READONLY: 这一行指定了一个名为RESET的内存区域用于存储重置向量表。DATA表示这个区域包含数据READONLY表示这个区域只能被读取。 4. __Vectors DCD __initial_sp: 这一行定义了一个重置向量表用于指示程序启动时应该执行的操作。DCD表示存储一个双字32位的数据。在这里第一个双字存储的是堆栈指针的初始值即__initial_sp。 5. DCD main: 这一行将程序的入口地址main函数添加到重置向量表中。这意味着程序在启动时将跳转到main函数开始执行。 6. AREA |.text|, CODE, READONLY: 这一行指定了一个名为.text的内存区域用于存储代码。CODE表示这个区域包含代码READONLY表示这个区域只能被读取。 7. ENTRY main: 这一行指定了程序的入口点为main函数。这意味着程序将从main函数开始执行。 8. loop B loop: 这一行是一个无限循环它会不断地跳转到loop标签所在的位置导致程序永远循环执行这条指令。 9. END: 这一行表示程序的结束。 数据搬移指令 MOV R0,#1 ;MOV搬移指令 相当于R01 MOV R1,R0 ; R1R0AREA STACK, NOINIT, READWRITE __initial_spAREA RESET, DATA, READONLY __Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLYENTRY mainMOV R0,#1MOV R1,R0 loopB loop END验证 注意需要连接上LINK记得先装驱动 如果是立即数前边必须加# 什么是立即数 立即数的概念 立即数Immediate Value是在计算机编程和汇编语言中常见的一种操作数类型。它是指在指令中直接编码的数值而不是存储在内存或寄存器中的值。立即数通常是常量或者由程序员明确指定的值可以直接参与到算术运算、逻辑运算或者数据处理中无需从其他地方读取。 寻址方式 寻址方式_百度百科 立即数是保存在指令中的数取指令的同时将值取过去和普通变量的区别是变量保存在内存中的数据需要单独取值运算。 立即数的本质立即数是包含在指令当中的数据(即属于指令的一部分) 立即数的优点读取指令的同时也将立即数读取到了内存中,速度快 立即数的缺点数量有限 注使用mov 给寄存器里面存放值的时候#号后面需是有效数1立即数2取反之后是立即数如果不是立即数需要用ldr指令进行存放。 LDR R0,0X12345678算术运算指令 MOV R0,#1MOV R1,#2ADD R2,R1,R0;加法----R2R1R0;SUB R2,R1,R0;减法----R2R1-R0;MUL R2,R1,R0;乘法----R2R1*R0;逻辑运算指令 MOV R0,#1MOV R1,#2MOV R2,#3AND R3,R1,R0 ;与----R3R1R0ORR R3,R1,R0 ;或----R3R1|R0EOR R3,R1,R0 ;异或----R3R1^R0LSL R3,R2,R1 ;左移----R3R2R1LSR R3,R2,R1 ;右移----R3R2R1xPSR状态寄存器 N (Negative) - 负标志如果最近的算术操作的结果是负数此位被置位。 Z (Zero) - 零标志如果最近的算术或逻辑操作的结果是零此位被置位。 C (Carry) - 进位标志如果最近的加法或乘法操作产生了进位或者减法操作产生了借位此位被置位。 V (Overflow) - 溢出标志如果最近的有符号整数运算产生了溢出此位被置位。 Q (Saturation) - 饱和标志如果一个饱和运算发生了饱和此位被置位仅在支持饱和运算的指令集架构中有效。 GE (Greater Equal) - 大于等于标志这是四个位GE[3:0]用于比较两个操作数分别对应无符号和有符号的比较结果。 除了这些条件码标志APSR还包含一些控制位如 I (Interrupt Disable) - 中断禁止标志如果被置位硬件中断被屏蔽。 F (Fast Interrupt Disable) - 快速中断禁止标志如果被置位快速中断FIQ被屏蔽。 T (Thumb) - Thumb标志如果被置位处理器处于Thumb状态否则它处于ARM状态。 MOV R0,#1 ;指令MOV R1,#2 ;指令;默认情况下数据运算不会对条件位NZCV产生影响我们可以在指令后添加后缀SSUBS R2,R0,R1 ;加S并使用减法指令产生负数验证N位发现被置位;测试Z和减法C位MOV R0,#1 ;指令MOV R1,#1 ;指令SUBS R2,R0,R1 ;加S并使用减法指令产生0验证Z位发现Z和C都被置1因为减法时产生借位C会被置0结果0没有借位;测试加法C位MOV R0,#0XFFFFFFFE ;0XFFFFFFFE不是立即数但是编译没有报错看一下仿真里编译窗口里MOV被替换为MVN了数也变了MOV R1,#3ADDS R2,R1,R0 ;加法指令产生了进位注意这里是32位C位被置1;验证VLDR R0,0X7FFFFFFE ;0X7FFFFFFE加了3之后产生溢出MOV R1,#3 ;0X7FFFFFFE加了3之后产生溢出ADDS R2,R1,R0 ;加法指令产生了进位注意这里是32位V位被置1分支/跳转指令 B (Branch):这是一个基本的无条件跳转指令用于将程序计数器PC设置为指令中指定的地址从而跳转到程序的其他部分执行。语法B label其中label是跳转的目标标签。 BL (Branch with Link):这个指令不仅跳转到指定的地址还将当前指令的下一个指令的地址即返回地址保存到链接寄存器LR通常是R14中。这允许在跳转后通过返回指令如MOV PC, LR返回到跳转前的位置。语法BL label。 不保存返回地址 jump LDR R3,0X11111111LDR R2,0X22222222LDR R1,0X33333333LDR R0,0X44444444 mainLDR R0,0X11111111LDR R1,0X22222222LDR R2,0X33333333LDR R3,0X44444444LDR R4,0X08000008B jump 保存返回地址 jump LDR R3,0X11111111LDR R2,0X22222222LDR R1,0X33333333LDR R0,0X44444444MOV PC,LR mainLDR R0,0X11111111LDR R1,0X22222222LDR R2,0X33333333LDR R3,0X44444444LDR R4,0X08000008BL jumpLDR R0,0X11111111LDR R1,0X22222222LDR R2,0X33333333LDR R3,0X44444444load/store指令 单寄存器操作指令 ldr / str 对内存的读写操作将运算结果从cpu写到内存 LDR R1,0XFF00FF00 LDR R2,0X20000000 STR R1,[R2] ;把R1当中的数存到R2的地址中 LDR R3,[R2] ;把内存R2地址中的数据读取到CPU R3寄存器中索引形式 1 前索引 MOV R1,#0XFFFFFFFF MOV R2,#0X20000000 STR R1,[R2,#8] ;基址加变址寻址讲原理加法器 R2加8如果STR R1,[R2] 也走加法器 R20 所以可以根据汇编的语法格式反思CPU的硬件设计 比如 int a[10] 编译器只知道a的首地址其他的没统计如a[6] 找地址可以a 2后索引 MOV R1,#0XFFFFFFFF MOV R2,#0X20000000 STR R1,[R2],#4 ; 将R1寄存器的内容存到【R2】地址然后R2R24这样做的目的可以做连续存储压栈时用的比较多 存完一个数他就把地址自动指向下一个了 3自动索引前后索引 MOV R1,#0XFFFFFFFF MOV R2,#0X20000000 STR R1,[R2,#4]! ; 将R1寄存器的内容存到【R24】地址然后R2R24LDR同样支持三种索引方式 批量寄存器操作指令ldm/stm 将r1到r4中的值存储到r0指向地址空间中连续16个字节的地址空间 stm r0, {r1-r4} LDR R1,0X1LDR R2,0X2LDR R3,0X3LDR R4,0X4LDR R0,0X20000000STM R0!,{R1-R4}LDR R1,0X1LDR R2,0X2LDR R3,0X3LDR R4,0X4LDR R0,0X20000000STM R0!,{R1-R3,R4}LDR R1,0X1LDR R2,0X2LDR R3,0X3LDR R4,0X4LDR R0,0X20000000STM R0!,{R1,R3,R2,R4}栈的操作指令 stmfd / ldmfd 栈的种类 空栈(Empty) 栈指针指向的地址是空的在栈中存储数据时可以直接存储存储完成之后需要将栈指针再次指向空的位置。 满栈(Full) 栈指针指向的地址有数据在栈中存储数据时需要先将栈指针指向一个空的位置然后在存储数据。 增栈(Ascending) 栈指针向高地址方向移动 减栈(Descending) 栈指针向低地址方向移动 操作栈的方式 满增栈满减栈空增栈空减栈 FA:Full Ascending 满增 FD:Full Descending 满减 EA:Empty Ascending 空增 ED:Empty Descending 空减 ARM默认采用的是满减栈 stmfd/ldmfdcode sp!, {寄存器列表} stmfd sp!, {r1-r4}写 压栈 ldmfd sp!, {r0-r3}读 (出栈) LDR R1,0X11111111LDR R2,0X22222222LDR R3,0X33333333LDR R4,0X44444444ADD SP,SP,#0X100 ;将栈指针地址增加默认是0X20000000STMFD SP!,{R1-R4} ;压栈LDMFD SP!,{R0-R3} ;出栈程序中运用 stmfd sp!, {r1-r4,lr}写 压栈 ldmfd sp!, {r1-r4,pc}读 (出栈) //r1-r4出栈给r1-r4, 将lr的值出栈给pc MY_ADDSTMFD SP!,{R1-R4,LR} ;压栈LDR R1,6LDR R2,8ADD R5,R1,R2LDMFD SP!,{R1-R4,PC} ;出栈 mainLDR R1,0X11111111LDR R2,0X22222222LDR R3,0X33333333LDR R4,0X44444444ADD SP,SP,#0X100 ;将栈指针地址增加默认是0X20000000BL MY_ADDADD R5,R1,R2 push/pop指令 JUMPPUSH {R1-R4,LR} ;压栈LDR R1,0X11111111POP{R0-R3,PC} ;出栈mainLDR R1,0X11111111LDR R2,0X22222222LDR R3,0X33333333LDR R4,0X44444444ADD SP,SP,#0X100 ;将栈指针地址增加默认是0X20000000BL JUMP -栈的应用-》叶子函数的调用过程 叶子函数是指一个函数内部没有调用其他函数的函数也就是说它是程序调用树的末端节点不依赖于其他函数。 FPUSH {R1,R2,LR} ;压栈MOVS R1,#5MOVS R2,#4ADDS R3,R1,R2POP{R1,R2,PC} ;出栈mainADD SP,SP,#0X100MOVS R1,#3MOVS R2,#2BL FADDS R3,R1,R2 TB T -栈的应用-》非叶子函数的调用过程 非叶子函数是指一个函数内部调用了其他函数的函数也就是说它不是程序调用树的末端节点可以被其他函数调用。 FPUSH {R1,R2,LR} ;压栈MOVS R1,#5MOVS R2,#4BL DADDS R3,R1,R2POP{R1,R2,PC} ;出栈 DPUSH {R1,R2,LR} ;压栈MOVS R1,#7MOVS R2,#6ADDS R3,R1,R2POP{R1,R2,PC} ;出栈 mainADD SP,SP,#0X100MOVS R1,#3MOVS R2,#2BL FADDS R3,R1,R2 TB T 专用寄存器操作指令了解 ADD SP,SP,#0X100MOVS R1,#3MOVS R2,#2MRS R3,PSR ;读PSR的内容LDR R4,0XF0123456MSR PSR,R4 ;向PSR写内容MRS R3,PSR异常中断产生指令了解 不讲因为咱们用不到 一般用到的人写内核的 CPU执行完这个指令后产生一个软中断 协处理器指令了解 操作协处理器的指令(一般用不到-----协助cpu处理数据 1.数据运算 2.内存访问 3.与主处理器通信 MRC 将协处理器中寄存器的内容读取到ARM处理器的寄存器中 MCR 将ARM理器中寄存器的内容读取到协处理器的寄存器中协处理器指令 协处理器数据运算指令 CDP 协处理器储存器访问指令 STC 将协处理器中的数据储存到存储器 LDC 将存储器中的数据读取到协处理器中 协处理器寄存器传送指令 MRC 将协处理器中寄存器的数据传送到ARM处理器中的寄存器 MCR 将ARM处理器寄存器中的数据读取到协处理器寄存器中 伪指令 本质本身不是指令但是cpu替换成等效的操作。 举例1 延时一个指令周期(耗时一条指令的时间) cpu没有这个指令NOP 执行NOP和MOV R0,R0一个效果执行NOPcpu替换成MOV R0,R0MOV R0,R0 举例2 LDR的两种形式 ;-指令LDR R1,[R2] ;-伪指令LDR R1,0x12345678 R1 0x12345678 ;可以将任何一个32bit的数据放入寄存器伪操作 指令是arm公司规定的而伪操作是编译器规定的不同的编译器伪操作指令不同。 后期我们学的linux用linux的编译器
http://www.hkea.cn/news/14485335/

相关文章:

  • 制作论坛类网站模板免费下载常州做网站企业
  • 电子商务网站的建设包含哪些流程图仿牌网站 域名注册
  • 哪些网站是用c语言做的网站制作报价单
  • 教育网站如何做seo网站脚本怎么做
  • 网站推广的几种方法wordpress进行
  • 网站建设 论文网站建设为大学生服务
  • 天猫关键词排名怎么控制常德网站优化推广
  • 如何申请网站com域名wordpress onethink
  • 网站域名证书江北网站制作
  • 做a视频 免费网站小企业网站建设在哪里
  • 网站开发主要都做些什么重庆网站制作公司哪家好
  • 成都微信小程序制作公司东莞优化seo网站关键词优化
  • 怎样创造网站聚名网下载
  • 公司网站域名及空间南京高端网站建设公司
  • element ui做的网站运城做网站哪家公司好
  • 网站开发可以用两种语言吗黄冈网页设计
  • 腾讯云可以做网站吗中国建设银行官网首页 网站首页
  • 做电影网站需要注意什么网站建设与管理 第2版
  • 心雨在线高端网站建设做静态网站的开题报告
  • 平台网站模板素材承德seo搜索推广
  • gvm网站是什么类的网站wordpress重新生成标签
  • 网站建设毕业设计引言怎么写学做网站论坛好吗
  • 网站建设音乐插件怎么弄如何做seo网站才会有排名
  • 深圳网站优化项目手表网站哪家好
  • 外贸网站建设服务机构张家口住房和城乡建设厅网站
  • 莱芜房产网站seo技术员
  • 在线做海报的网站wordpress dux 1.5 邮件
  • 重庆长寿网站设计公司苏州做网站的企业
  • 一站式网页设计服务平台wordpress开启子域名多站点模式
  • 免费网站模板网要网站开发费用短信