ARM汇编程序语言设计.pdfVIP

  • 50
  • 0
  • 约1.81万字
  • 约 19页
  • 2019-10-26 发布于湖北
  • 举报
ARM 汇编程序语言设计 (教学使用,请勿转载) By Li Yang E-Mail:liyangth@ 一. 内嵌汇编语法 使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉GCC 对这 些操作有哪些限制条件。 例如在下面的汇编语句: __asm__ __volatile__ (movl %1,%0 : =r (result) : r (input)); 说明: movl %1,%0\n\t是指令模板; %0和%1代表指令的操作数,称为占位符,内嵌汇编靠它们将C 语言表达式与指令操作数相 对应。 指令模板后面用小括号括起来的是C语言表达式,本例中只有两个:“result”和“input”, 他们按照出现的顺序分 别与指令操作数“%0”,“%1”对应; 注意对应顺序:第一个C 表达式对应“%0”;第二个表达式对应“%1”, 依次类推,操作数至多有10 个,分别用“%0”,“%1”….“%9”表示。 在每个操作数前面有一个用引号括起来的字符串,字符串的内容是对该操作数的限制或者说要求。 __asm__ __volatile__( mov %0,%1\n\t 操作限制,r(只读寄存器), m(内存), =r(可写,左值),+r(读写,volatile) : + (a) //输出部分:结果寄存器Rd;左值; : r (b) //输入部分:Rn,Rm; 右值; : r //物理寄存器,指出这个寄存器我修改过. ); . 小结: 1. 输入部分输出部分 . r 输入部分,在进入asm前生成一段代码,用c变量更新占位符; . 输入部分可以写常数; . =r输出部分,在退出asm后生成一段代码,用占位符更新c变量; 2. 修饰符 . +r可读可写,一般在输出部分,在前后都更新; +可读可写,如果为=则不能成为输入,即在进入asm前没有对作为输入部分的 a(%0)生成代码; . =r, 影子寄存器 为每个占位符分配一个影子寄存器,不会用同一个寄存器来优化 3. 破坏部分 破坏:指出,告诉在进入__asm__前保存,出来后恢复这个你以后还会用到的物理寄存器。 二. 汇编程序设计语言 1. ARM数据处理指令 ARM 的数据处理指令由3类组成: ➢ 数据传输 ➢ 算术逻辑运算 ➢ 乘法指令 特点: 1. ARM CPU只能处理内部的寄存器,所以,ARM 数据处理指令只能对寄存器的内容进行操作. 2. 所有 ARM 数据处理指令均可选择使用 S 后缀,以影响状态标志.比较指令 CMP,CMN,TST 和 TEQ 不需要后缀 S,它们会直接影响状态标志. 1.1. 数据传输指令 MOV 将 8 位图立即数或寄存器(operant2)传送到目标寄存器 Rd,可用于 移位运算等操作.指令格式如下: e.g: MOV R1,#10 ;R1=10 MOV R1,R2 ;R1=R2 MVN 将 8 位图立即数或寄存器(operand2)按位取反后传送到目标寄存 器(Rd),因为其具有取反功能,所以可以装载范围更广的立即数.指令格式如下: e.g: MVN R1,#0XFF ;R1=0xFFFFFF00 MVN R1,R2 ;R1=~R2 1.2. 算术逻辑运算 1) 算术+-*法: ADD 加法运算指令.将 operand2 数据与 Rn 的值相加,结果保存到 Rd 寄存器.指令格式如 下: e.g: ADD R1,R1,R2 ;R1=R1+R2 ADD R3

文档评论(0)

1亿VIP精品文档

相关文档