文档详情

Cortex M3权威指南中文版chpt04 05.pdf

发布:2017-11-02约7.42万字共48页下载文档
文本预览下载声明
Cortex‐M3 权威指南  初稿  第4 章  第4章 指令集 汇编语言基础  指令集  近距离地检视指令  Cortex‐M3 中的一些新好指令      终于“开荤”了,本章开始把Cortex‐M3 的指令系统展现出来,并且给出了一些简单却 意味深长的例子。在本书的附录 A 中还有一个快速的查阅参考。指令集的详细信息由 《ARMv7‐M Architecture Application Level Reference Manual》(Ref2)给出——写了两百多页呢。    如果读者以前没有写过ARM 汇编程序,可以结合看本书的第20 章,那里讲述了Keil RVMDK 工具的使 用,包括添加汇编源文件的方法。RVMDK 带了一个指令模拟器,对于练习汇编程序非常有帮助。那一章虽 然不是很短但很简单。值得一提的是,在那一章的末尾,译者添加了少量内容,是专为学习第4 章而添加 的。  汇编语言基础   为了给以后的学习扫清障碍,这里我们先简要地介绍一下ARM 汇编器的基本语法。本 书绝大多数的汇编示例都使用ARM 汇编器的语法,而第19 章则使用GCC 汇编器AS 的语法。  汇编语言:基本语法   汇编指令的最典型书写模式如下所示:  标号    操作码    操作数1,  操作数2, …  ;  注释。      其中,标号是可选的,如果有,它必须顶格写。标号的作用是让汇编器来计算程序转移 的地址。    操作码是指令的助记符,它的前面必须有至少一个空白符,通常使用一个“Tab”键来 产生。操作码后面往往跟随若干个操作数,而第1 个操作数,通常都给出本指令执行结果的 存储地。不同指令需要不同数目的操作数,并且对操作数的语法要求也可以不同。举例来说, 立即数必须以“# ”开头,如  MOV R0, #0x12 ; R0 0x12 MOV R1, #’A’ ; R1 字母A 的ASCII码   注释均以”;”开头,它的有无不影响汇编操作,只是给程序员看的,能让程序更易理解。    还可以使用EQU 指示字来定义常数,然后在代码中使用它们,例如:  NVIC_IRQ_SETEN0 EQU 0xE000E100 NVIC_IRQ0_ENABLE EQU 0x1 … LDR R0, =NVIC_IRQ_SETEN0 ;在这里的LDR 是个伪指令,它会被汇编器转换成 ;一条“相对PC 的加载指令” MOV R1, #NVIC_IRQ0_ENABLE ; 把立即数传送到指令中 STR R1, [R0] ; *R0=R1,执行完此指令后IRQ #0被使能。 51    Cortex‐M3 权威指南  初稿  第4 章    注意:常数定义必须顶格写    如果汇编器不能识别某些特殊指令的助记符,你就要“手工汇编”——查出该指令的确 切二进制机器码,然后使用DCI 编译器指示字。例如,BKPT 指令的机器码是0xBE00,即可 以按如下格式书写:    DCI 0xBE00 ; 断点(BKPT),这是一个16位指令   (DCI 也必须空格写——译注)    类似地,你还可以使用 DCB 来定义一串字节常数——允许以字符串的形式表达,还可 以使用DCD 来定义一串32
显示全部
相似文档