ADS介绍及ARM汇编语言程序设计基础.pptx

上传人:莉*** 文档编号:87130898 上传时间:2023-04-16 格式:PPTX 页数:80 大小:1.91MB
返回 下载 相关 举报
ADS介绍及ARM汇编语言程序设计基础.pptx_第1页
第1页 / 共80页
ADS介绍及ARM汇编语言程序设计基础.pptx_第2页
第2页 / 共80页
点击查看更多>>
资源描述

《ADS介绍及ARM汇编语言程序设计基础.pptx》由会员分享,可在线阅读,更多相关《ADS介绍及ARM汇编语言程序设计基础.pptx(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、9.1 9.1 裸机开发环境裸机开发环境n何谓“裸机”?裸机是指无操作系统下的ARM系统开发其特点是所有硬件资源均开放可以把它理解为一个高级单片机的开发n裸机开发的作用更能深入地从底层去理解ARM CPU的操作过程及系统设计为日后自行设计系统打下基础为bootloader的编写打好基础第1页/共80页开发环境的作用开发环境的作用第2页/共80页9.2 ADS IDE9.2 ADS IDE(集成开发环境(集成开发环境)ARM应用软件的开发工具根据功能的不同,可以分为编辑软件、编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板,JTAG仿真器以及在线仿真器等。目前有多家公司

2、可以提供以上不同类型的开发工具,用户采用ARM处理器进行嵌入式系统开发时,选择合适的开发工具可以加快开发进度,节省开发成本。第3页/共80页 9.2.1 9.2.1 ADSADS工具包的组成工具包的组成 ADS是ARM公司推出的集成开发工具包,是专门用于ARM相关应用开发和调试的综合性软件。目前常用的版本是1.2,在功能和易用性上比早期的SDT都有提高,是一款功能强大又易于使用的开发工具。ARM ADS包含有编译器、链接器、CodeWarrior IDE、调试器、指令集模拟器、ARM开发包和应用库等部分,可以用ADS来开发、编译、调试采用包括C、C+和ARM汇编语言编写的程序。第4页/共80页

3、9.2.2 ADS9.2.2 ADS开发工具集开发工具集 1.1.命令行开发工具命令行开发工具ANSI C 编译器-armcc and tccISO/Embedded C+编译器 -armcpp and tcppARM/Thumb 汇编器 armsLinker-armlink 第5页/共80页2.2.图形开发工具:图形开发工具:Windows 集成开发环境 CodeWarriorDebugger AXD(ARM eXtended Debugger)armsd ARM(符号调试器)可向前兼容3.3.库文件:库文件:C and C+库4.4.辅助工具辅助工具/支持软件:支持软件:格式转换器-fro

4、melf 指令级仿真 ARMulator库管理器 armar第6页/共80页fromELFfromELF:ARM映像文件转换工具该命令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plain binary(BIN格式映像文件),Motorola 32-bit S-record format(Motorola 32位S格式映像文件),Intel Hex 32 format(Intel 32位格式映像文件),和 Verilog-like hex format(Verilog 16进制文件)ArmarArmar:ARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合

5、在一起,用户可以把一个库传递给一个链接器以代替几个ELF文件。Flash downloaderFlash downloader:用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具ARMulatorARMulator:ARM指令集仿真器,集成在ARM的调试器AXD中,它提供对ARM处理器的指令集的仿真,为ARM和Thumb提供精确的模拟,用户可以在硬件尚未做好的情况下,开发程序代码。第7页/共80页名称描述使用方式代码生成工具ARM汇编器ARM C/C+编译器Thumb C/C+编译器ARM 链接器由Code Warrior调用 集成开发环境Code Warrior工程管理,编译链

6、接调试器AXD/ADW/ADU/armsd仿真调试指令模拟器ARMulator由AXD调用ARM开发包一些底层的例程,实用程序(如fromELF)由Code Warrior调用ARM应用库C/C+等函数库用户程序调用工具调用及流程第8页/共80页9.2.3 9.2.3 集成开发环境集成开发环境CodeWarriorCodeWarrior使用使用 CodeWarrior集成开发环境为管理和开发项目提供了简单、多样化的图形用户界面。用户可以使用ADS的CodeWarrior IDE为ARM处理器开发用C,C+,或ARM汇编语言的程序代码。全面的项目管理功能。可以在CodeWarrior IDE为A

7、RM配置以上所介绍的各种命令工具,实现对工程代码的编译,汇编和链接。第9页/共80页C/C+BrowserC/C+SensitiveEditorProjectManager第10页/共80页建立工程第11页/共80页第12页/共80页uARM Executable Image:用于由ARM指令的代码生成一个 ELF格式的可执行映像文件。uARM Object Library:用于由ARM指令的代码生成一个 armar 格式的目标文件库。uEmpty Project:用于创建一个不包含任何库或源文件的工程。uMakefile Importer Wizard:用于将 Visual C 的 nmak

8、e 或 GNU make 文件转入到CodeWarrior IDE 工程文件。uThumb ARM Interworking Image:用于由 ARM指令和 Thumb 指令的混和代码生成一个可执行的ELF格式的映像文件。uThumb Executable image:用于由 Thumb指令创建一个可执行的ELF格式的映像文件。uThumb Object Library:用于由Thumb指令的代码生成一个 armar 格式的目标文件库。第13页/共80页新建文件第14页/共80页添加文件到工程第15页/共80页生成目标设置第16页/共80页每个工程项目都有下面3种生成目标:uDebug:包含

9、所有调试信息uDebugRel:包含部分调试信息uRelease:不包含调试信息注:若项目编译只是为了调试使用,则选择Debug或者DebugRel;若要生成最后可以运行的文件,则最好选择Release。第17页/共80页编译链接进入编译链接设置:第18页/共80页设置窗口:第19页/共80页目标设置:第20页/共80页 在Targets Settings选项组中,Post-Linker用于选择链接器输出文件的处理方式。用户可以选择的值如下:None:不进行连接的处理。ARM fromELF:使用ARM工具fromELF处理链接器输出的ELF格式文件,它可以将ELF格式的文件转换为各种二进制文

10、件格式。Batch File Runner:在连接完成后运行一个DOS格式的批处理文件。若用户在编译完成后只是用AXD来调试程序,建议选择None;若要生成最后的编程文件,建议选择ARM fromELF,该选项与Linker面板中的ARM fromELF选项结合来产生最终的编程文件。第21页/共80页CPU设置:第22页/共80页Linker设置:第23页/共80页 在 Output format 下拉框中,为用户提供了多种可以转换的目标格式,这里选择 Plain binary,这是一个二进制格式的可执行文件,可以被烧写在目标板的 Flash中。在 Output file name 文本域输入

11、期望生成的输出文件存放的路径,或通过点击 Choose.按钮从文件对话框中选择输出文件路径。如果在这个文本域不输入路径名,则生成的二进制文件存放在工程所在的目录下。第24页/共80页第25页/共80页 在标签页 Output 中,Linktype 中提供了 3 种链接方式:Partia:表示链接器只进行部分链接,经过部分链接生成的目标文件,可以作为以后进一步链接时的输入文件。Simple:默认的链接方式,也是使用最为频繁的链接方式,它链接生成简单的 ELF 格式的目标文件,使用的是链接器选项中指定的地址映射方式。Scattered:使得链接器要根据 scatter 格式文件中指定的地址映射,生

12、成复杂的 ELF 格式的映像文件。一般情况下这个选项使用不太多。第26页/共80页 在选中 Simple 方式后,就会出现 Simple image。R0 Base:这个文本框设置包含有 R0 段的加载域和运行域为同一个地址,默认是 0 x8000。这里用户要根据硬件的实际 SDRAM 的地址空间来修改这个地址,保证在这里填写的地址是程序运行时 SDRAM 地址空间所能覆盖的地址。RW Base:这个文本框设置包含 RW 和 ZI 输出段的运行域地址。如果选中 split 选项,链接器生成的映像文件将包含 2 个加载域和 2 个运行域,此时,在 RW Base 中所输入的地址为包含 RW 和

13、ZI 输出段的域设置了加载域和运行域地址。第27页/共80页第28页/共80页 在 Options 选项中,需要注意的是 Image entry point 文本框。它指定映像文件的初始入口点地址值,当映像文件被加载程序加载时,加载程序会跳转到该地址处执行。如果需要,用户可以在这个文本框中输入下面格式的入口点。入口点地址:这是一个数值,例如-entry 0 x0。符号:该选项指定映像文件的入口点为该符号所代表的地址处。比如:-entry int_handler。在此处指定的入口点用于设置 ELF 映像文件的入口地址。需要注意的是,这 里不可以用符号 main 作为入口点地址符号,否则将会出现“

14、Image dose not have an entry point(Not specified or not set due to multiple choice)”的出错信息。第29页/共80页 Layout选项在连接方式为Simple时有效,用来安排一些输入段在映像文件中的位置。在上图中,Place at Beginning of Image选项用于指定某个输入段放置在它所在的运行时域的开头。第30页/共80页编译链接:第31页/共80页第32页/共80页文件输出文件输出第33页/共80页9.2.4 AXD9.2.4 AXD调试工具的使用调试工具的使用 在软件开发的最初阶段,可能还没有具

15、体的硬件设备。如果要测试所开发的软件是否达到了预期的效果,这可以由软件仿真来完成。当然,也可以搭建一个PCB板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。第34页/共80页调试器能够发送以下指令:调试器能够发送以下指令:装载映像文件到目标内存;启动或停止程序的执行;显示内存,寄存器或变量的值;允许用户改变存储的变量值。第35页/共80页进入进入AXDAXD调试工具调试工具第36页/共80页 在菜单File中选择“Load image”选项,打开 Load Image对话框,找到要

16、装载的.axf映像文件,点击“打开”按钮,就把映像文件装载到目标内存中了。第37页/共80页DockingwindowsDockingtoolbarsRegistersSource/DisassemblyMemory第38页/共80页选择调试目标:选择调试目标:点击ADX窗口菜单【Options】选择【Configure Target】,即弹出Choose Target 窗口,在没有添加其它仿真驱动程序前,Target 项中只有两项,分别为ADP(JTAG 硬件仿真)和ARMUL(软件仿真)。第39页/共80页调试工具条,从左到右依次为:调试工具条,从左到右依次为:全速运行(Go)停止运行(S

17、top)单步运行(Step In),与Step 命令不同之处在于对函数调用语句,Step In 命令将进入该函数。单步运行(Step),每次执行一条语句,这时函数调用将被作为一条语句执行。单步运行(Step Out),执行完当前被调用的函数,停止在函数调用的下一条语句。运行到光标(Run To Cursor),运行程序直到当前光标所在行时停止。设置断点(Toggle BreakPoint)第40页/共80页调试观察窗口工具条,从左到右依次为:打开寄存器窗口(Processor Registers)打开观察窗口(Processor Watch)打开变量观察窗口(Context Variable)

18、打开堆栈观察窗口(Back Trace)打开存储器观察窗口(Memory)打开反汇编窗口(Disassembly)第41页/共80页处理器状态观察:处理器状态观察:包括:寄存器变量存储器第42页/共80页存储器窗口:存储器窗口:包括:显示格式修改操作第43页/共80页单步执行、断点:第44页/共80页添加变量进行观察:第45页/共80页9.2.5 Wiggler JTAG 仿真器的安装与应用简介H-JTAG调试代理使用Wiggler JTAG Wiggler JTAG 仿真器第46页/共80页简介 MagicARM2410 实验箱配套的Wiggler JTAG 仿真器,支持ADS1.2 集成开

19、发环境,支持单步、全速及断点等调试功能。仿真器采用ARM 公司提出的标准20 脚JTAG 仿真调试接口,与计算机连接采用标准25 针并口(即打印机口)。第47页/共80页 要使用Wiggler JTAG 仿真器来调试ARM 处理器,除了ADS1.2 集成开发环境外,还需要安装一个ARM 调试代理软件;推荐使用H-JTAG 软件,H-JTAG 软件的特点如下:支持ARM7/ARM9,支持自动检测和手动指定内核;使用RDI 接口,支持SDT2.51、ADS1.2、REALVIEW 和IAR 集成开发环境;支持ARM/Thumb 模式;支持Little Endian&BIG Endian 模式;支持

20、Wiggler、SDT JTAG 和自定义接口;H-JTAG调试代理第48页/共80页使用Wiggler JTAG 仿真器双击桌面“H-JTAG”快捷方式启动H-JTAG 会自动检测ARM 内核,如果JTAG 连接正确将会在H-JTAG 主窗口中显示S3C2410A 处理器的内核ARM920T在进行JTAG 仿真调试时,不要关闭H-JTAG 软件第49页/共80页 将计算机并口与Wiggler JTAG 仿真器连接;将仿真器JTAG口接头插入MagicARM2410实验箱主板的J29上;通过AXD 软件的设置即可进行JTAG仿真调试;第50页/共80页程序固化 在JTAG 仿真调试通过后,要将

21、程序调试生成十六进制文件并下载到外部的NOR Flash(即固化程序),才可脱机运行。生成HEX HEX 文件。使用Flash Programmer Flash Programmer 烧写FlashFlash。第51页/共80页生成HEX 文件 在当前工程窗口中选用Release 生成目标,打开工程的DebugRel Settings 窗口,在TargetSettings 项中设置Post-linker 选取ARM fromELF。在ARM formELF 项中设置输出文件类型,如设置为Intel 32 bit Hex,然后设置输出文件名。生成文件默认存放在当前工程的xxx_DataRelea

22、se”目录中。重新编译连接工程即可生成 十六进制文件。第52页/共80页使用Flash Programmer 烧写Flash 将MagicARM2410 MagicARM2410 实验箱主板上的JP8 JP8 跳线器断开,选用NOR Flash NOR Flash 启动方式,按RST RST 键复位系统 将Wiggler JTAG 仿真器的25 针接口通过并口延长线与PC 机的并口LPT1 连接,将Wiggler JTAG 仿真器的20 针接口通过20 PIN 连接电缆接到MagicARM2410 实验箱主板的J29 上 将配置文件DeviceARM2410.ocd 复制D:目录下。启动Fla

23、sh Programmer 点击Program按钮,下载程序至目标板的Flash 中 脱机运行第53页/共80页9.3 ARM9.3 ARM汇编伪指令汇编伪指令 在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,也就是不会生成机器码,仅仅是在编译器软件中起着格式化的作用,通常称这些特殊指令助记符为伪指令。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。在 ARM 的汇编程序中,有如下几种伪指令:数据常量定义伪指令、数据变量定义伪指令、内存分配伪指令及其他伪指令。第54

24、页/共80页9.3.1 数据常量定义伪指令 数据常量定义伪指令EQU用于为程序中的常量、标号等定义一个等效的字符名称,类似于C语言中的#define。EQU语法格式:名称 EQU 表达式 ,类型;其中 EQU 可用“*”代替。名称为EQU伪指令定义的字符名称,当表达式为32 位的常量时,可以指定表达式的数据类型,可以有以下三种类型:CODE16、CODE32和DATA。第55页/共80页9.3.4 汇编控制伪指令 汇编控制伪指令用于控制汇编程序的执行流程,常用的汇编控制伪指令包括以下几条:(1 1)IFIF、ELSEELSE、ENDIFENDIF 语法格式:IF 逻辑表达式 指令序列 1 EL

25、SE 指令序列 2 ENDIF (2 2)WHILEWHILE、WENDWEND 语法格式:WHILE 逻辑表达式 指令序列 WEND 第56页/共80页9.3.5 其他常用的伪指令 还有一些其他的伪指令,在汇编程序中经常会被使用,主要包括AREA、ALIGN、CODE16、CODE32、ENTRY、END、EXPOR(或 GLOBAL)IMPORT、EXTERN、GET(或 INCLUDE)INCBIN、RN、ROUT等。第57页/共80页(1 1)AREAAREA 语法格式:AREA 段名 属性 1,属性 2,AREA 伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用

26、“|”括起来,如|1_test|。属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。第58页/共80页(2 2)ALIGNALIGN 语法格式:ALIGN 表达式 ,偏移量(3 3)CODE16CODE16、CODE32CODE32 语法格式:CODE16(或 CODE32)(4 4)ENTRYENTRY 语法格式:ENTRY(5 5)ENDEND 语法格式:END(6 6)EXPORTEXPORT(或(或GLOBALGLOBAL)语法格式:EXPORT 标号 WEAK (7(7)IMPORTIMPORT 语法格式:IMPORT 标号 WEAK 第59页/共80页(5 5)END

27、END 语法格式:END(6 6)EXPORTEXPORT(或(或GLOBALGLOBAL)语法格式:EXPORT 标号 WEAK(7(7)IMPORTIMPORT 语法格式:IMPORT 标号 WEAK(8 8)EXTERNEXTERN 语法格式:EXTERN 标号 WEAK(9 9)GETGET(或(或INCLUDEINCLUDE)语法格式:GET 文件名(1010)INCBININCBIN 语法格式:INCBIN 文件名(1111)RNRN 语法格式:名称 RN 表达式 第60页/共80页9.4 ARM9.4 ARM的汇编语言结构的汇编语言结构 在ARM(Thumb)汇编语言程序中,以相

28、对独立的指令或数据序列的程序段为单位组织程序代码。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。一个汇编程序至少应该有一个代码段,也可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。可执行映象文件通常由以下几部分构成:一个或多个代码段,代码段的属性为只读。零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。第61页/共80页9.4.1 ARM汇编语言的语句格式 1.1.基本语句格式基本语句格式ARM(Thumb)汇编语言的语句格式为:标号指令或伪指令;注释规则:

29、如果一条语句太长,可将其分为若干行来书写,在行的末用续行符“”来标识下一行与本行为同一条语句。每一条指令的助记符可以全部用大写、或全部用小写,但不能在一条指令中大、小写混用。第62页/共80页2.2.汇编语言程序中常用的符号汇编语言程序中常用的符号 在汇编语言程序设计中,可以使用各种符号代替地址、变量和常量等,以增加程序的可读性。以下为符号命名的约定:符号名不应与指令或伪指令同名 符号在其作用范围内必须唯一。符号区分大小写,同名的大、小写符号被视为两个不同的符号。自定义的符号名不能与系统保留字相同。第63页/共80页3.3.程序中的常量程序中的常量 程序中的常量是指其值在程序的运行过程中不能被

30、改变的量。ARM(Thumb)汇编程序所支持的常量有逻辑常量、数字常量和字符串常量。数字常量一般为32位的整数,无符号常量取值范围为0232-1,有符号常量取值范围为-231231-1。逻辑常量只有两种取值:真或假。字符串常量为一个固定的字符串,一般用来提示程序运行时的信息。第64页/共80页4.4.汇编语言程序中的变量汇编语言程序中的变量 程序中的变量是指其值在程序的运行过程中可以改变的量。逻辑变量用于在程序的运行中保存逻辑值(真/假)。数字变量用于在程序的运行中保存数字值,但数字值的大小不应超出数字变量所能表示的范围。字符串变量用于在程序的运行中保存一个字符串,但字符串的长度不应超出字符串

31、变量所能表示的范围。第65页/共80页5.5.程序中的变量代换程序中的变量代换 程序中的变量可通过代换操作取得一个常量。代换操作符为“$”。如果“$”在数字变量前面,编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换“$”后的数字变量。第66页/共80页9.4.2 基于Windows下ADS的汇编语言程序结构 ADS环境下的ARM汇编语言程序结构与其它环境下的汇编语言程序结构大体相同,整个程序也是以段为单元来组织代码。其语法规则总结如下:所有标号必须在一行的顶格书写,其后不要添加“:”号;所有的指令均不能顶格写;大小写敏感(可以全部大写或全部小写,但不能大小写混合使用)

32、;注释使用分号“;”。第67页/共80页9.5 ARM9.5 ARM汇编语言程序调试汇编语言程序调试 无论进行嵌入式系统软件开发还是硬件电路设计,调试永远是不可缺少的、非常重要的一个环节。通常嵌入式系统的调试方法和类型有很多种,最为常见的包括软件模拟调试、硬件仿真器在线调试、Wiggler线缆调试和Linux环境下的gdb程序调试。第68页/共80页9.5.1 ADS软件模拟环境下的程序调试 ADS软件模拟调试是利用ARMUL.dll提供的一个软ARM内核,调试工具和待调试的嵌入式软件都在主机上运行,由主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。它的优点是简单方便,不需要嵌入式

33、目标板,软件的调试功能较强;功能有限,不能进行实时联机调试。第69页/共80页9.5.2 ADS硬件仿真器环境下的程序调试 在ADS环境下利用JTAG硬件仿真器可以实现联机调试,即在线调试嵌入式设备的Flash中的程序或者SDRAM中的程序。由于仿真器自成体系,调试时既可以连接目标板,也可以不连接目标板,当然仿真器的价格也相对比较贵。一般在程序的前期开发,通常让程序只在SDRAM中调试运行,最后才下载到Flash中进行调试运行。第70页/共80页 ARM仿真器是通过内部硬件实现PC并口协议到串行JTAG(Jiont Test Action Gruop)协议的转换。利用高速JTAG串行扫描链,通

34、过调试通信通道(Debug Communications Channel,DCC)连接ARM核心内嵌的名为“Embedded-ICE”的调试逻辑,调试逻辑实时监测ARM核心的寄存器、数据总线和地址总线。第71页/共80页配置配置ADSADS以支持以支持JTAGJTAG仿真器仿真器启动ADS的调试器AXD后,从菜单“Option”中选择“Configure Target”,在弹出的窗口中,添加或选择H-JTAG.dll(如图所示)。第72页/共80页9.6 ARM9.6 ARM汇编语言与汇编语言与C C语言混合编程语言混合编程 ARM体系结构支持C/C+以及汇编语言的混合编程,在一个完整的程序设

35、计中,除了初始化部分用汇编完成以外,其主要的编程任务一般都用C/C+完成。汇编语言和C/C+的混合编程通常有以下几种方式:汇编程序中调用C程序 C程序中调用汇编程序 C程序中内嵌汇编语句 从汇编程序中访问C程序变量第73页/共80页9.6.1 汇编程序中调用C程序 2.C语言文件/*C file,called by asmfile*/int cFun(int a,int b,int c)return a+b+c;这里的参数传递是利用寄存器r0r2。需要指出的是当函数的参数个数大于4时就要借助堆栈。第74页/共80页9.6.2 C程序中调用汇编程序 在汇编程序中使用EXPORT伪指令声明程序,使

36、得本程序可以被其他的程序调用;在C语言中使用EXTERN关键词声明该汇编程序,这样就可以在C中使用该函数了。从C的角度,并不知道该函数的实现是用C还是汇编。第75页/共80页9.6.3 C程序中内嵌汇编语句 在C中内嵌的汇编指令支持大部分的ARM和Thumb指令,不过其使用与汇编文件中的指令有些不同,存在一些限制,主要有下面几个方面:不能直接向PC寄存器赋值,程序跳转要使用B或者BL指令;在使用物理寄存器时,不要使用过于复杂的C表达式,避免物理寄存器冲突;R12和R13可能被编译器用来存放中间编译结果;一般不要直接指定物理寄存器,而让编译器进行分配;内嵌汇编的标志是:_asm或者asm关键字第

37、76页/共80页9.6.4 从汇编程序中访问C程序变量 在C程序中声明的全局变量可以被汇编程序通过地址间接访问,具体访问方法如下:使用IMPORT伪指令声明该全局变量。使用LDR指令读取该全局变量的内存地址,通常该全局变量的内存地址值存放在程序的数据缓冲区中。根据该数据的类型,使用相应的LDR指令读取该全局变量的值,使用相应的STR指令修改该全局变量的值。第77页/共80页下面是一个在汇编程序中访问下面是一个在汇编程序中访问C C程序全局变量的例子:程序全局变量的例子:AREA global_exp,CODE,READONLYEXPORT asmsubIMPORT globv ;声明全局变量asmsubLDR r1,=globv ;将内存地址读入到R1中LDR r0,r1 ;将数据读入到R0中ADD r0,r0,#2 STR r0,r1 ;修改 后再将值赋予变量MOV pc,lrEND第78页/共80页 程序中,变量globv1是在C程序中声明的全局变量,在汇编程序中首先使用IMPORT伪指令声明该变量,再将其内存地址读入到寄存器R1中,将其值读入到寄存器R0中,修改后再将寄存器R0的值赋予变量globv。第79页/共80页感谢您的观看!第80页/共80页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁