嵌入式系统原理及应用教程第4章.ppt
logo汇编语言中表达式和运算符(2)INDEX运算符INDEX运算符返回基于寄存器的表达式中相对于其基址寄存器的偏移量,其语法格式如下::INDEX:A其中,A为与寄存器相关的表达式。4.2.2汇编语言中表达式和运算符运算符的优先级在对汇编程序进行编译时,运算中一般遵循的基本规则是:先计算括号内,后计算括号外;在有多个操作符时,顺序和运算符有关;单目运算符较双目运算符优先;在相同优先权情况下,从左到右运算。运算符的优先级如表4-3所示。指令示例:与Thumb指令相关的伪指令ADRR0,LOOP;把LOOP处绝对地址;加载给R0ADRR1,LOOP+0x40*2 ;把LOOP+0x40*2处;绝对地址加载给R1……ALIGNLOOPADDR2,R0,R1……LDR伪指令语法格式:LDR{cond}??Rd,=数值表达式 ;加载数字常量LDR{cond}??Rd,=语句标号+数值表达式;加载地址LDR伪指令是把一个数字常量或一个地址加载到低端寄存器伪指令。如果所加载的是一个32位的数字常量,则编译程序就可以把这条语句编译成一条MOV指令,如果不能用MOV指令来表达,则编译成一条LDR指令。如果所加载的是地址的话,编译程序会把这条语句编译成LDR指令。与Thumb指令相关的伪指令4.1.3与Thumb指令相关的伪指令添加标题在使用LDR指令替代伪指令时,编译程序先把数据(或地址)存放在数据缓冲区内,在执行LDR指令时,从缓冲区读出这个数据加载到寄存器中去。因此,在使用这条伪指令时,要为程序创建数据缓冲区。添加标题指令示例:添加标题LDRR1,=0xFFE ;加载0xFFE到R1中添加标题LDRR1,=START ;加载START处的地址到R1中添加标题;汇编器汇编成MOVR1,#0xFFE与Thumb指令相关的伪指令单击此处添加正文,文字是您思想的提炼,为了演示发布的良好效果,请言简意赅地阐述您的观点。13.NOP单击此处添加正文,文字是您思想的提炼,为了演示发布的良好效果,请言简意赅地阐述您的观点。2语法格式:NOP伪指令是空操作指令,在汇编时将被编译成一条无效指令,如MOVR0,R0,占用32位代码空间。3NOP4.2汇编语言的语句格式指令伪指令语句标号注释汇编语言的源程序主要组成:4.2.1书写格式{语句标号}{指令或伪指令}{;注释}ARM(Thumb)汇编语言的语句格式为:语句标号可以大小写字母混合使用,可以使用数字和下划线。语句标号不能与指令助记符、寄存器、变量名同名。语句标号指令助记符和伪指令助记符可以大写,也可以小写,但不能大小写混合使用。指令助记符和后面的操作数寄存器之间必须有空格,不可以在这之间使用逗号。指令和伪指令汇编器在编译时,当发现一个分号后,把后面的内容解释为注释,不予以编译。注释4.2.1书写格式举例:AREAEXAMPLE1,CODE,READONLY ;EXAMPLE1程序段代码段,只读属性4.2.2汇编语言中表达式和运算符在汇编语言程序设计中,经常使用各种符号代替地址、变量和常量等,以增加程序的可读性。变量ARM(Thumb)汇编程序所支持的变量形式有3种:数字变量逻辑变量字符串变量变量在编译过程中可能被改变。4.2.2汇编语言中表达式和运算符数字变量用于在程序的运行中保存数字值,数字变量的取值范围不能超过一个32位数所能表达的范围。全局数字变量使用伪指令GBLA定义;局部数字变量使用伪指令LCLA定义;数字变量使用伪指令SETA赋值。单击此处添加小标题全局逻辑变量使用伪指令GBLL定义;单击此处添加小标题局部逻辑变量使用伪指令LCLL定义;单击此处添加小标题逻辑变量使用伪指令SETA赋值。4.2.2汇编语言中表达式和运算符逻辑变量用于在程序的运行中保存逻辑值,逻辑值只有两种取值情况:真或假。4.2.2汇编语言中表达式和运算符字符串变量用于在程序的运行中保存一个字符串.全局串变量使用伪指令GBLS定义;局部串变量使用伪指令LCLS定义;串变量使用伪指令SETS赋值。串变量需要使用双引号包含。4.2.2汇编语言中表达式和运算符变量代换程序中的变量可通过代换操作取得一个常量。代换操作符为“$”。如果在数字变量前面有一个代换操作符“$”,编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换“$”后的数字变量;如果在逻辑变量前面有一个代换操作符“$”,编译器会