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

w=a b*c用汇编语言写,汇编语言编写规范.docx

汇编语言编写规范

汇编语言编写规范

篇一:汇编语言程序设计规范1   汇编语言程序设计规范   实验目的   ? 熟悉ARM微处理器指令系统;   ? 学习ARM嵌入式汇编软件的使用;   ? 学习ARM嵌入式汇编程序的编程和调试。   实验设备   ? 硬件:PC机。   ? 软件:集成开发环境,Windows XX/XP/XX。   实验内容   ? 熟悉简单程序的编写;   ? 掌握ARM程序的运行和调试。   实验原理   (1)汇编程序结构   在ARM( Thumb)汇编语言程序中,以段为单位组织源文件。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。   可执行映象文件通常由以下几部分构成:   ? 一个或多个代码段,代码段的属性为只读。   ? 零个或多个包含初始化数据的数据段,数据段的属性为可读写。   ? 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。   (2)汇编中的子程序调用   在ARM汇编语言程序中,子程序的调用一般是通过BL指令来实现的。在程序中,使用指令:BL 子程序名   即可完成子程序的调用。   该指令在执行时完成如下操作:   ? 将子程序的返回地址存放在LR(R14)中;   ? 将PC 指向子程序的第一条指令地址;   ? 若需要参数传递,则用R0-R3来传递,当参数超过4个,则超过的参数用堆栈来传递; ? 子程序返回时:MOV PC,LR   ? 用R0来保存返回值。   以下是使用 BL 指令调用子程序的例子:   include   AREA TEST,CODE,READONLY   EXPORT asm_proc   IMPORT value   ENTRY   asm_proc LDR R0,=value   LDR R0,[R0]   MOV R1,#8   BL DOadd   Exit SWI 0x   DOadd ADD R0,R0,R1   MOV PC,BL   END   实验参考程序   (1)见课本page102:关于字符串复制程序(用LDRB和STRB逐字节读写)。   (2)数据块的复制。   ? 本程序将数据从源数据区src复制到目标数据区dst时,以8个字为单位进行。   ? 对于最后所剩下不足8个字的数据,以字为单位进行复制,这时程序跳转到CopyWords   处执行。在进行以8个字为单位的数据复制时,保存了所用的8个工作寄存器。   AREA Block,CODE,READONLY   NUM EQU 20   ENTRY   CODE 32   LDR R0,=src   LDR R1,=dst   MOV R2,#NUM   MOV SP,#&400   BlockCopy MOV R3,R2,LSR #3   BEQ CopyWords   STMFD SP!,{R4-R11}   QuadCopy LDMIA R0!,{R4-R11}   STMIA R1!,{R4-R11}   SUBS R3,R3,#1   BNE QuadCopy   LTMFD SP!,{R4-R11}   CopyWords ANDS R2,R2,#7   BEQ Stop   WordCopy LDR R3,[R0],#4   STR R3,[R1],#4   SUBS R2,R2,#1   BNE WordCopy   Stop MOV R0,#0x18   LDR R1,=&XX6   SWI 0x ;将CPU的控制权交给调试器   AREA Bdata,DATA,READWRITE ;定义数据区Bdata   src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4   dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;这里的DCD定义源数据区src及目标数据区dst END   实验思考题   1. 修改下列C程序段代码为ARM汇编程序段代码。   void gcd( int a, int b)   {   whil

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 壮壮已经20天了
  • 魔鬼数字c语言英语,C语言常见错误(一)
  • 洛神赋
  • C语言猜小偷思路,谁是小偷,求高手指教。怎么编写这个程序
  • Windows XP SP3下载(预发布RC1版)
  • android动态style,Android控件动态设置style的问题
  • Linux 同步方法剖析
  • mate8 android版本区别,华为Mate8有几个版本 华为Mate8各版本区别
  • Java SE 6 新特性: Instrumentation 新功能
  • 简述linux系统的发展史,Linux系统概括发展历史
  • Java SE 6 新特性: HTTP 增强
  • 鸿蒙os的速度和ios,升级鸿蒙OS2.0后的体验,和ios基本没差别
  • Java SE 6 新特性: JMX 与系统管理
  • android 3D球面的点,使用D3.js创建3D球面圆点环绕动画(带详细注解)
  • Java SE 6 新特性: 对脚本语言的支持
  • 自己简单写的 事件订阅机制
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Go 语言编译器的 //go: 详解
  • Java到底能干嘛?
  • JS变量作用域
  • JS实现简单的MVC模式开发小游戏
  • js中forEach回调同异步问题
  • Laravel Telescope:优雅的应用调试工具
  • SpringBoot几种定时任务的实现方式
  • text-decoration与color属性
  • uni-app项目数字滚动
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 解析 Webpack中import、require、按需加载的执行过程
  • 学习使用ExpressJS 4.0中的新Router
  • 一起参Ember.js讨论、问答社区。
  • 优秀架构师必须掌握的架构思维
  • # Redis 入门到精通(七)-- redis 删除策略
  • # windows 安装 mysql 显示 no packages found 解决方法
  • # 计算机视觉入门
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ###STL(标准模板库)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (六)vue-router+UI组件库
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (一)kafka实战——kafka源码编译启动
  • (一)认识微服务
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .bat文件调用java类的main方法
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Remoting学习笔记(三)信道
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .net连接MySQL的方法
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Algorithm][动态规划][路径问题][不同路径][不同路径Ⅱ][珠宝的最高价值]详细讲解