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

伊川网站建设网络广告推广平台

伊川网站建设,网络广告推广平台,为什么网络经营者要有自己的网站,我想注册网站我怎么做文章和代码已归档至【Github仓库#xff1a;hardware-tutorial】#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 #xff08;1#xff09; 掌握建立基本完整的ARM 工程#xff0c;包含启动代码#xff0c;C语言程序等… 文章和代码已归档至【Github仓库hardware-tutorial】需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 1 掌握建立基本完整的ARM 工程包含启动代码C语言程序等 2 了解ARM启动过程学会编写简单的C 语言程序和汇编启动代码并进行调试 3 掌握如何指定代码入口地址与入口点 4 掌握通过memory/register/watch/variable 窗口分析判断结果。 二、实验环境 硬件PC机。 软件ADS1.2 集成开发环境 三、实验内容 使用汇编语言编写初始化程序并引导至C语言main函数用汇编语言编写延时函数实现毫秒级的延时在C语言中调用延时函数,实现1s钟定时。 四、实验要求 (1) 在ADS下创建一个工程armasmc编写3个文件如下图所示 其中一个初始化汇编语言文件Init.s该文件中主要完成异常矢量表的建立模式堆栈初始化并将程序引导至C语言的main函数。 C语言程序保存为armasmc.c。 C语言中调用汇编语言文件delay.s中的毫秒延时程序delayxmsC语言将延时的毫秒数通过参数传递到汇编语言汇编语言完成延时然后返回C语言函数。 通过AXD运用单步执行方式调试程序。观察程序执行过程中的寄存器及存储器的变化情况。 2实验过程中请记录并思考以下内容 1如何建立异常矢量入口表 2如何在汇编语言中切换至C语言的main函数。 3如何在C语言中调用汇编语言函数并完成参数传递 4汇编语言函数中用到的寄存器如何保护与恢复为什么要保护参考程序中的R11 5将delay.s中的R11改成R4并将两条R11 的保护与恢复语句stmfd sp!,{r11} 和ldmfd sp!,{r11}删掉在C语言程序中的语句i–处设置端点观察运行过程中变量i的变化情况并解释其中的原因。 五、实验情况 1、实验源代码含注释 Init.s代码 ;************************ entry.s ****************************IMPORT Main ;在汇编程序调用该c程序前要在汇编语言程序中使用IMPORT伪操作来声明该c程序area Init,code,readonly ;定义CODE片段Init 只读 entry ;设置程序入口伪指令code32 ;以下为32位的ARM程序 ; *********** Setup interrupt/exception vector ******************* start b Reset_Handler ;异常矢量表根据异常矢量表进入不同模式的中断程序 Undefined_Handler b Undefined_Handler SWI_Handler b SWI_Handler Prefetch_handler b Prefetch_handler Abort_Handler b Abort_Handlernop ;Reserved vector IRQ_Handler b IRQ_Handler FIQ_Handler b FIQ_HandlerReset_Handler ;Reset中断为整个中断的实际入口点 bl initstack ;初始化各模式下的堆栈指针;切换至用户模式堆 msr cpsr_c,#0xd0 ;110 10000bl Mainhalt b haltinitstack mov r0,lr ;r0--lr,因为各种模式下r0是相同的而各个模式? ;设置管理模式堆栈msr cpsr_c,#0xd3 ;110 10011 ldr sp,stacksvc;设置中断模式堆栈msr cpsr_c,#0xd2 ;110 10010ldr sp,stackirq ;设置快速中断模式堆栈msr cpsr_c,#0xd1 ;110 10001ldr sp,stackfiq;设置中止模式堆栈 msr cpsr_c,#0xd7 ;110 10111ldr sp,stackabt;设置未定义模式堆栈 msr cpsr_c,#0xdb ;110 11011ldr sp,stackund;设置系统模式堆栈 msr cpsr_c,#0xdf ;110 11111ldr sp,stackusrmov pc,r0 ;返回LTORG stackusr dcd usrstackspace128 stacksvc dcd svcstackspace128 stackirq dcd irqstackspace128 stackfiq dcd fiqstackspace128 stackabt dcd abtstackspace128 stackund dcd undstackspace128area Interrupt,data,READWRITE ;分配堆栈空间 usrstackspace space 128 svcstackspace space 128 irqstackspace space 128 fiqstackspace space 128 abtstackspace space 128 undstackspace space 128enddelay.s代码 ;************************* delay.s *****************************EXPORT delayxms EXPORT伪指令用于在程序中声明一个全局的标号该标号可在其他的文件中引用area delay,code,readonly ;定义code片段delay只读code32 ;以下为32位的ARM程序;下面是延时若干ms的子程序 delayxmsstmfd sp!,{r11} ; 寄存器入栈sub r0,r0,#1 ;r0r0-1ldr r11,1000 加载至r11中 loop2sub r11,r11,#1 每次将r11自减一cmp r11,#0x0 ;将r11与0比较bne loop2 ;比较的结果不为0则继续调用loop2 cmp r0,#0x0 ;将r0与0比较bne delayxms ;比较的结果不为0则继续调用delayxmsldmfd sp!,{r11};mov pc,lr;返回endarmasmc.c代码 //*************************armasmc.c****************************** #include stdio.h int Main() { extern void delayxms(int xms); //在C程序调用汇编程序之前需要在C语言程序中使用extern关键词来声明该汇编程序int i100;while(1){delayxms(1000); // 调用delayxms汇编程序i--;if(i0)i100;}return 0; }2、实验过程含结果截图及相应文字解释 1.如何建立异常矢量入口表 答建立异常矢量入口表需要设置中断类型号并且要设置中断服务子程序段地址以根据异常矢量表进入不同模式的中断程序。在实验程序中也有定义 2.如何在汇编语言中切换至C语言的main函数 答由上代码可知为保证程序调用时参数的正确传递汇编程序设计要遵守ATPCSARM-Thumb Produce Call Standard,它是ARM程序和Thumb程序中子程序调用的基本规则目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。这些基本规则包括子程序调用过程中寄存器的使用规则、数据栈的使用规则和参数的传递规则。在C程序中不需要任何关键字来声明将被汇编语言调用的C程序但需要在汇编语言程序之前使用IMPORT伪操作来声明该C程序。在汇编程序中通过BL指令来调用子程序。同时汇编程序可以通过地址间接访问在C语言程序中声明的全局变量。通过使用IMPORT关键词引入全局变量并利用LDR和STR指令根据全局变量的地址可以访问它们。 3.如何在C语言中调用汇编语言函数并完成参数传递 答为了保证程序调用时参数的正确传递汇编程序设计要遵守ATPCS。在汇编程序中需要使用EXPORT伪操作来声明同时在C程序中调用该汇编程序之前需要在C语言程序中使用extern关键词来声明该汇编程序。 4.汇编语言函数中用到的寄存器如何保护与恢复为什么要保护参考程序中的R11 答汇编语言函数中用到的寄存器通过压栈来保护出栈来恢复。根据ATPCS规则R11对应ARM 状态局部变量寄存器8R11中含有循环次数的重要参量因此要保护R11避免在程序运行与调用过程中受到影响而导致程序异常。 5.将delay.s中的R11改成R4并将两条R11 的保护与恢复语句stmfd sp!,{r11} 和ldmfd sp!,{r11}删掉在C语言程序中的语句i–处设置端点观察运行过程中变量i的变化情况并解释其中的原因。 修改程序如下 答由上可知R4对应局部变量寄存器1即变量i因此在子程序delay.s中R4的值减为0若不进行保护则返回C程序后自减-1导致变量i的值变为-1此时将无法满足0的条件也就无法执行if导致i会一直递减下去最终无法停止。 六、总结 本次有关汇编与C语言相互调用的部分建立异常矢量入口表的方法即需要设置中断类型号并且要设置中断服务子程序段地址以根据异常矢量表进入不同模式的中断程序。此外还有ARM程序和Thumb程序中子程序调用的基本规则ATPCSARM-Thumb Produce Call Standard目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。这些基本规则包括子程序调用过程中寄存器的使用规则、数据栈的使用规则和参数的传递规则为调用提供了相关的规范。其中汇编程序访问全局C变量的方法是汇编程序可以通过地址间接访问在C语言程序中声明的全局变量。通过使用IMPORT关键词引入全局变量并利用LDR和STR指令根据全局变量的地址可以访问它们。在C语言程序中调用汇编程序的方法是在汇编程序中需要使用EXPORT伪操作来声明使得本程序可以被其它程序调用。同时在C程序调用该汇编程序之前需要在C语言程序中使用extern关键词来声明该汇编程序。而在汇编程序中调用C语言程序的方法是在C程序中不需要使用任何关键字来声明将被汇编语言调用的C程序但是在汇编程序调用该C程序之前需要在汇编语言程序中使用IMPORT伪操作来声明该C程序。在汇编程序中通过BL指令来调用子程序。
http://www.w-s-a.com/news/841836/

相关文章:

  • 金华官方网站建设网络营销策划模板
  • 网站开发到上线在线生成小程序
  • 动易网站设计方案郑州营销网站建设
  • 怎么上网站做简易注销的步骤郑州大学现代远程教育《网页设计与网站建设》课程考核要求
  • 新乡网站建设新乡长沙本地论坛有哪些
  • 潍坊中企动力做的网站怎么样wordpress接入微博
  • 网站开发者所有权归属网站项目建设的必要性
  • 菜鸟网站编程广州网站设计权威乐云践新
  • 网站做接口到app 价格大地资源免费视频观看
  • 怎么给钓鱼网站做防红网站建设相关的
  • 教育培训的网站建设湖南网站建设小公司
  • 福建南平网站建设创意交易平台网
  • 做直播网站要哪些技术内容营销理论
  • 价格划算的网站开发怎么找有赞做网站
  • 做网站店铺图片用什么软件网络营销方案格式
  • 做外贸要自己建网站吗有效的网络营销方式
  • 精通网站开发书籍做网站获取手机号码
  • 论坛做视频网站有哪些济南新站seo外包
  • 哪类型网站容易做冷水滩做微网站
  • 搭建企业网站流程保定徐水网站建设
  • 建设单位到江川区住房和城乡建设局网站伦敦 wordpress 设计
  • 响应式网站的服务麦德龙网站建设目标
  • 做国外单的网站叫什么海南省海口市网站建设
  • 杭州响应式网站案例wordpress5.2.2
  • 网站建设运营维护合同wordpress资源搜索插件
  • 国外网站流量查询东莞网站建设教程
  • 餐饮类网站建设达到的作用东莞工程建设交易中心网
  • 网站设计 知识产权湖北网站建设xiduyun
  • 猫咪网站模版下载中国风 古典 红色 网站源代码
  • 个人网站备案模板制作网站首页