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

淘宝网站建设可行性分析wordpress群站

淘宝网站建设可行性分析,wordpress群站,优惠建网站,wordpress模板 电子商务一百二十七、内存读写指令 通过内存读写指令可以实现向内存中写入指定数据或者读取指定内存地址的数据 127.1 单寄存器内存读写指令 将一个寄存器中的数值写入到内存#xff0c;或者从内存中读取数据放在某一个指定寄存器中 127.1.1 指令码和功能 1. 向内存中写#xff…一百二十七、内存读写指令 通过内存读写指令可以实现向内存中写入指定数据或者读取指定内存地址的数据 127.1 单寄存器内存读写指令 将一个寄存器中的数值写入到内存或者从内存中读取数据放在某一个指定寄存器中 127.1.1 指令码和功能 1. 向内存中写 str{条件码} 目标寄存器,[目标地址] 将目标寄存器的4字节数值写入到目标地址为首地址的空间中 strh{条件码} 目标寄存器,[目标地址] 将目标寄存器的2字节数值写入到目标地址为首地址的空间中 strb{条件码} 目标寄存器,[目标地址] 将目标寄存器的1字节数值写入到目标地址为首地址的空间中2. 从内存中读 ldr{条件码} 目标寄存器,[目标地址] 从目标地址为首地址的空间中读取4字节数据存放在目标寄存器中 ldrh{条件码} 目标寄存器,[目标地址] 从目标地址为首地址的空间中读取2字节数据存放在目标寄存器中 ldrb{条件码} 目标寄存器,[目标地址] 从目标地址为首地址的空间中读取1字节数据存放在目标寄存器中127.1.2 示例 .text .global start _start:mov r0,#0XFFFFFFFEmov r1,#0X40000000 R1保存内存地址将r0的值写入到r1对应的地址空间str r0,[r1]从r1对应的地址空间中读取数据保存在r2中ldr r2,[r1] wh: b wh .end 127.1.3 单寄存器内存索引方式 前索引方式str{条件码} 目标寄存器,[目标地址#立即数]//将目标寄存器的数据保存在目标地址8为起始地址的内存中 ldr{条件码} 目标寄存器,[目标地址#立即数]//从目标地址8为起始地址的内存中读取数据保存在目标寄存器后索引方式str{条件码} 目标寄存器,[目标地址]#立即数//将目标寄存器的数据保存在目标地址为起始地址的内存中接着目标地址自加立即数大小 ldr{条件码} 目标寄存器,[目标地址]#立即数//从目标地址为起始地址的内存中读取数据保存在目标寄存器接着目标地址自加立即数大小自动索引方式str{条件码} 目标寄存器,[目标地址#立即数]//将目标寄存器的数据保存在目标地址立即数为起始地址的内存中接着目标地址自加立即数大小 ldr{条件码} 目标寄存器,[目标地址#立即数]//从目标地址立即数大小为起始地址的内存中读取数据保存在目标寄存器接着目标地址自加立即数大小127.2 批量寄存器的内存读写方式 将多个寄存器的数据存放在内存中以及从内存中取出数据保存在多个寄存器中 127.2.1 指令码以及格式 向内存写stm 目标地址{目标寄存器列表}将列表中各个寄存器的数值保存在目标地址对应的地址空间中 从内存读ldm 目标地址{目标寄存器列表}从目标地址对应的地址空间中拿数据保存到寄存器列表中各个寄存器中注意 1. 寄存器列表中每一个寄存器之间用,分隔如果寄存器列表中寄存器的编号连续那么可以用-表示一定范围内的寄存器比如 {r1-r5} 2. 无论寄存器列表中的寄存器表现形式如何在存取数据时始终是小编号寄存器对应低地址127.2.2 示例 .text .global start _start:mov r0,#0X40000000mov r1,#1mov r2,#2mov r3,#3mov r4,#4mov r5,#5向内存中写stm r0,{r2,r1,r4,r3,r5}stm r0,{r1-r5}从内存中读取数据ldm r0,{r6-r10} wh: b wh .end 127.2.3 批量寄存器的地址增长方式 每次向寄存器保存的地址对应的地址空间中写入一个数据这个寄存器保存的地址会发生相应的增长变化这就是批量寄存器的地址增长方式.text .global start _start:mov r0,#0X40000000mov r1,#1mov r2,#2mov r3,#3mov r4,#4mov r5,#5向内存中写stm r0!,{r1-r5} wh: b wh .end 内存读写命令后加ia后缀 先向 R0 寄存器存放的地址指向的内存空间中保存一个数据然后 R0 寄存器指向的地址往高地址方向增长内存读写命令后加ib后缀 先 R0 寄存器指向的地址往高地址方向增长然后向 R0 寄存器存放的地址指向的内存空间中保存一个数据内存读写命令后加da后缀 先向 R0 寄存器存放的地址指向的内存空间中保存一个数据然后 R0 寄存器指向的地址往低地址方向增长内存读写命令后加db后缀 先 R0 寄存器指向的地址往低地址方向增长然后向 R0 寄存器存放的地址指向的内存空间中保存一个数据 127.3 栈内存的读写 栈指针寄存器SP/R13 保存栈顶的地址栈本质上就是一段内存。在内存中选取一段内存作为栈内存可以用于保存临时数据。 127.3.1 栈内存的读写 增栈 每次压栈结束SP保存的栈顶地址往高地址方向增栈 减栈 每次压栈结束SP保存的栈顶地址往低地址方向增栈空栈 压栈结束后SP保存的栈顶空间中没有有效数据 满栈 压栈结束后SP保存的栈顶空间中有有效数据其本质就是先改变指向还是先存放数据空增栈EA/空减栈ED/满增栈FA/满减栈FD E empty 空 F full 满 A addition 增加 D delete 减少当前ARM处理器使用的是哪种栈满减栈127.3.2 满减栈压栈出栈操作 push {寄存器列表}压栈 pop {寄存器列表}出栈 .text .global start _start:初始化栈ldr SP,0X40000020mov r1,#1mov r2,#2mov r3,#3mov r4,#4mov r5,#5压栈stmdb sp!,{r1-r5}出栈ldmia sp!,{r6-r10} wh: b wh .end .text .global start _start:初始化栈ldr SP,0X40000020mov r1,#1mov r2,#2mov r3,#3mov r4,#4mov r5,#5压栈stmfd sp!,{r1-r5}出栈ldmfd sp!,{r6-r10} wh: b wh .end 127.3.3 栈的应用实例—叶子函数调用过程 当我们在主函数中调用一个函数被调用的这个函数中没有别的函数调用那么 这个函数就叫做叶子函数 如 .text .global _start _start:初始化栈ldr SP,0X40000020b main main:mov r1,#3mov r2,#4bl fun1add r3,r1,r2b main fun1:压栈保护现场stmfd sp!,{r1,r2}mov r1,#7mov r2,#9sub r4,r2,r1出栈恢复现场ldmfd sp!,{r1,r2}mov pc,lr 程序返回 .end 127.3.4 栈的应用实例—非叶子函数调用过程 当我们在主函数中调用一个函数被调用的这个函数中存在别的函数调用那么 这个函数就叫做非叶子函数 .text .global _start _start:初始化栈ldr SP,0X40000020b main main:mov r1,#3mov r2,#4bl fun1add r3,r1,r2b main fun1:压栈保护现场stmfd sp!,{r1,r2,lr}mov r1,#7mov r2,#9bl fun2sub r4,r2,r1出栈恢复现场ldmfd sp!,{r1,r2,lr}mov pc,lr 程序返回 fun2:stmfd sp!,{r1,r2}mov r1,#4mov r2,#8mul r4,r2,r1出栈恢复现场ldmfd sp!,{r1,r2}mov pc,lr 程序返回 .end一百二十八、程序状态寄存器传输指令 指令的作用实现CPSR寄存器数值的读取以及数值的修改 128.1 指令码以及格式 格式 msr CPSR,第一操作数将第一操作数的数值写入到CPSR寄存器中 mrs 目标寄存器CPSR读取CPSR数值保存到目标寄存器中128.2 实例 .text .global _start _start:mrs r1,CPSR 读取CPSR数值切换到USR模式取消FIQ和IRQ禁止msr CPSR,#0x10 .end 注意 user模式是ARM处理器工作模式中唯一的非特权模式 这种模式下无法通过手动修改CPSR数值切换到特权模式 只有发生对应的异常后才可以切换到异常模式一百二十九、软中断指令 129.1 软中断概念 软中断是从软件层次上模拟的硬件中断原理和硬件中断一样。软中断触发之后CPU进行异常模式的切换SVC紧接着执行软中断对应的异常处理程序。 129.2 软中断指令码以及使用 swi 中断号注意中断号是一个由24位二进制数组成的一个整数用于区分不同的中断 129.3 异常处理过程分析 129.3.1 异常模式和异常源的对应关系 5种异常模式对应7种异常源 异常模式异常源解释FIQFIQ类型异常源一些硬件发生了FIQ异常事件进入FIQ模型IRQIRQ类型异常源一些硬件发生了IRQ异常事件进入IRQ模型SVC复位信号按键复位/上电复位时产生swi软中断指令执行swi指令undef未定义异常源译码器在翻译指令时遇到无法翻译的指令指令未定义abortdata abort取数据发生异常时prefetch abort取指令发生异常时 129.3.2 异常的处理过程分析面试重点 异常的处理过程 当一个异常源产生之后CPU会进行一些工作用于程序的跳转以及异常模式的切换这个过程分为四大步三小步1. 保存发生异常之前的CPSR的值到对应异常模式下的SPSR寄存器中 2. 修改CPSR的数值2.1 根据实际情况设置FIQ和IRQ中断禁止 CPSR[7:6]2.2 修改处理器工作状态为ARM状态 CPSR[5]2.3 修改处理器的工作模式为对应的异常模式 CPSR[4:0] 3. 保存主程序的返回地址到对应模式下的LR寄存器中 4. PC的值到对应异常模式下的异常向量表中处理完异常之后现场的恢复过程1. 恢复CPSR寄存器的值为未发生异常之前的状态 2. 修改PC的值为未发生异常之前的下一条指令地址 PCLR129.3.3 异常向量表 异常向量表是内存空间中的一段内存。 这段内存占据了32字节被平分为8等份一份是4字节。 每一份内存对应一种异常源有一份保留在异常向量表内存里存放的是当前异常源对应的异常处理程序的跳转指令。 当发生异常之后CPU会修改PC的值为对应异常源在异常向量中的位置执行这个位置中的跳转指令去处理异常处理程序。每一种异常源在异常向量表中的位置是固定不能随便修改。只要设置了异常向量表的基地址就可以根据不同异常在一场向量表中的位置找到对应异常的跳转指令。 129.4 软中断异常处理实例 .text .global _start _start:初始化异常向量表b mainb .b do_swib .b .b .b .b . main:初始化栈mov sp,#0X40000020切换到USER模式MSR CPSR,#0X10MOV R1,#1MOV R2,#2触发软中断SWI 1add r3,r1,r2b main异常处理 do_swi: 保护现场stmfd sp!,{r1,r2,lr}mov r1,#3mov r2,#4mul r4,r1,r2恢复现场ldmfd sp!,{r1,r2,pc}^ ^的作用是修改PC的值的同时将SPSR的值赋值给CPSR .end一百三十、混合编程 130.1 混合编程的意义 所谓的混合编程就是c语言资源和汇编资源的相互调用 一般工程会有汇编启动程序启动程序完成堆栈的相关初始化完毕之后才跳转到c语言的main函数c语言中几乎不可以直接操作寄存器但是有些特定场景下需要c中操作寄存器这时候就需要c语言中嵌套汇编的语法 130.2 混合编程概述 要想实现C和汇编的混合编程必须遵循ATPCS规范。 ATPCS : ARM-Thumb Procedure Call Standard int add(int i,int j) {return ij; }将汇编的标签当作C语言的函数使用 将C语言的函数当作汇编的标签使用 函数参数的传递采用R0-R3进行传递如果参数的个数大于4个通过压栈的方式进行传递 函数的返回值通过R0返回如果函数的返回值大于4个字节通过r0-r1返回。 ATPCS规范中规定ARM采用满减栈。 130.3 汇编调用C语言的函数 将C语言的函数当作汇编的标签使用 示例 汇编文件.text .global _start _start: 1. 初始化栈指针C代码运行必须有栈ldr sp, 0x40000820 2. 汇编调用c函数 2.1 给C的函数传递实参值mov r0, #3 a 3mov r1, #4 b 4mov r2, #5 c 5mov r3, #6 d 6 2.2 汇编调用c的函数bl add_func 2.3 函数的返回通过r0返回查看r0寄存器中的值 loop: b loop .endc文件// c代码的函数是一个全局的函数 int add_func(int a, int b, int c, int d) {return (abcd); }130.4 c语言调用汇编标签 将汇编的标签当作c语言的函数 示例 起始汇编文件.text .globl _start _start: 1. 初始化栈指针C代码运行必须有栈ldr sp, 0x40000820 2. 汇编调用c,跳转到main函数b main .endc文件// 使用extern对函数进行声明 extern int add_func(int a, int b, int c, int d);int sum 0; int main() {// 在c代码中调用汇编代码sum add_func(1,2,3,4);while(1);return 0; }汇编文件.text .global add_func 将add_func函数声明为全局add_func:add r0, r0, r1add r0, r0, r2add r0, r0, r3mov pc, lr .end130.5 c语言内联汇编 在某一些特定的场景下需要在c语言中直接使用汇编的语法此时需要内联汇编。内联汇编的实现需要通过asm关键字进行修饰 130.5.1 格式 asm volatile(汇编指令模板\n\t //\n\t表示一条指令的结束.....:输出列表 //指令结果的输出值:输入列表 //指令的数据输入:破坏列表 //破坏列表指定我们当前可用的寄存器 );130.5.2 实例 汇编启动文件.text .globl _start _start: 1. 初始化栈指针C代码运行必须有栈ldr sp, 0x40000820 2. 汇编调用c,跳转到main函数b main .endc语言文件// 内联汇编 int add_func2(int a, int b, int c, int d) {int sum 0;// 使用汇编实现求和asm volatile( add r0, r0, r1\n\t add r0, r0, r2\n\t add r0, r0, r3\n\t :r(sum) :r(a),r(b),r(c),r(d) :memory );return sum; }//r(sum)表示输出从寄存器中放到变量sum中// r(a) 指定输入从变量a中获取放到通用寄存器//memory声明使用内存// 使用extern对函数进行声明 extern int add_func(int a, int b, int c, int d);int sum 0;int main() {// 调用内联汇编的函数 sum add_func2(5,6,7,8);// 在c代码中调用汇编代码sum add_func(1,2,3,4);while(1);return 0; }汇编文件.text .global add_func 将add_func函数声明为全局add_func:add r0, r0, r1add r0, r0, r2add r0, r0, r3mov pc, lr .end
http://www.w-s-a.com/news/153361/

相关文章:

  • flex网站模板wordpress实时预览
  • 建设银行网站模板为什么企业要建设自己的企业文化
  • 网站建设必知免费手机网站建站系统
  • ssh可以做wap网站么嘉兴seo排名
  • 站内优化包括哪些帝国做企业网站
  • 做网站seo赚钱吗网络维护和故障维修
  • 企业网站可以自己做摄影网站开发背景怎么写
  • 网站百度指数seo最好的工具
  • 宝安专业网站建设推荐设计感强的网站
  • 网站建设 6万元北京知名的品牌设计公司
  • 网站建设的总体需求是什么vmware 下wordpress
  • 光谷网站建设请检查网络
  • 申请建设网站的报告书商务网站开发课程体会
  • 网站开发实训总结致谢群晖wordpress设置
  • 关于酒店网站建设的摘要天津市建设工程信息网官网首页
  • 网站alexa排名查询手机网站制作器
  • 建设小辣猫的网站电子毕业设计网站建设
  • 询广西南宁网站运营礼品定制
  • 建筑公司网站作用免费查看招标信息的网站
  • 建筑设计公司名字起名大全html网站 怎么做seo
  • 网站群建设模板迁移原站迁移pc巩义网站建设案例课堂
  • 烟台高端网站开发wordpress 设置权限
  • 中小企业网站制作流程网站开发和设计人员的岗位要求
  • 公司网站建设多少费用河北城乡建设官网站
  • 国科联创网站建设广告传媒公司招聘信息
  • 网站后台文章删了 怎么前台还有一级做爰片软件网站
  • 辽宁省建设注册中心网站wordpress 博客插件
  • 做电商看的网站有哪些网站建设需求策划书
  • 关于网站建设交易流程的描述一句话哪些网站用户体验好
  • 男女做暖暖的网站大全深圳平台网站建设外包