DSP56800指令集与汇编语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 DSP56800指令集与汇编语言 (2)


4.7 算数与逻辑运算指令 4.8 DSP56800中的并行处理 4.9 位操作与位测试指令 4.10 跳转与返回指令 4.11 其他控制指令 4.12 规格化指令NORM
4.1.1 DSP56800汇编语言格式
汇编语言的格式是: Label Opcode operands ;注释 Label:语句标识,编译后生成程序 地址入口标识。 Opcode-操作码,表示指令类型。 Operands-操作对象。
4.3 数据传输指令
Leabharlann Baidu

以MOVE为主,可以实现立即数向内部寄 存器、数据存储器、输出设备的写入,实 现寄存器之间、寄存器与数据存储器和程 序存储器之间、寄存器与I/O设备之间的数 据传输。 某些数据传输指令可以与算术运算指令、 逻辑运算指令同时读入,并行执行。算数 运算指令还可以并行地执行另外两条指令, 分别通过不同的2条数据总线从存储器中并 行读入数据,实现并行数据传输。

注:语句标号前面不能有空格,应以字母开头,后面 接英文、数字、美元符$和下横线_。标号不能重复定义。
4.1.2 常用汇编管理指令




汇编管理指令(伪指令) 不与任何处理器指令相对应。 提供给汇编程序的指令,没有对应的机器 码生成。 1、ORG-定位伪指令 格式 : ORG <表达式> ;注释 如: ORG P:$1000
4.3 数据传输指令

LEA和POP指令 LEA-地址寄存器加/减1 eg: LEA X:(R0)+;将R0+1的值放入R0中
POP-从堆栈中弹出SP指向的当前值到某一 寄存器R中,然后SP的值减1。 eg: POP R


4.4 乘法与乘/加指令



IMPY:整数乘法指令实现16位整数与16位整数 的乘法,结果超出16位的话会出现错误,溢出标 志会置位。 MAC:将两个带符号的16位源寄存器的操作数 S1和S2的积与指定的36位目标累加器D进行加/ 减 MACR:除完成MAC功能,还实现结果四舍五入 MPY:实现16位带符号数相乘,并将32位乘积 存入目标寄存器中。 MPYR:实现16位带符号小数相乘,并将32位乘 积进行舍入处理后再存储在目标寄存器中。
表4.6 单并行处理指令
可以做1次并行 数据传输的指令 并行数据传输的指令

目标
MAC/MACRMP X:(R1)+ X0/Y1/Y0 Y/MPYR/ADD/ X:(R0)+ A/B/A1/B1 SUB/CMP/TFR/ X0/Y1/Y0 X:(R1)+ ABS/ASL/ASR/ X:(R0)+N CLR/RND/TST/ A/B/A1/B1 INC/DEC/NEG eg:ADD X0,A Y0,X:(R1)+N 在执行将X0的内容加到A的同时,Y0传送给以R1间址 的数据存储器中,然后R1寄存器中的地址值刷新为R1 加上N寄存器中的值。
4.3 数据传输指令




MOVE #$0010,A0 MOVE X0,X:R0 MOVE X:(R0+offset),X1 MOVE X:(R0+N),X1 MOVE Y1,X:(R0)+ MOVE Y1,X:(R0)+N LEA X:(R0)+ POP R MOVE (SP)-,R
4.5 除法指令


除法: DIV S,A(或B) A(或B)是被除数,S是除数 eg: BFCLR #$1,SR ;清进位、借位标志 REP 16 ; DIV X0,B ADD X0,B ;
4.6 移位指令


算数左移 算数右移 ASL/ASR 逻辑左移 逻辑右移 LSL/LSR 循环左移 循环右移 ROL/ROR
4.7 算数与逻辑运算指令

加法 减法 比较 加1 减1 比较 等等
4.8 DSP56800中的并行处理




内核三个组成: 算数逻辑单元ALU、地址产生器AGU、 程序控制器PC 4.8.1 单并行处理 并行处理的原则:当ALU进行算数或逻辑 运算时,内核的通用数据总线CGDB上可 以进行数据传输,即MOVE执行。 单并行处理:ALU中的运算和CGDB上的 数据传输在1个周期内同时完成。
混合编程

1、main.c 文件中: int asmadd(int, int);
2、*.asm文件中: global Fasmadd

4.2 DSP56800的寻址方式






4.2.1 立即数寻址与绝对地址寻址 立即数寻址指的是汇编指令中的操作数是一个 数值。如:MOVE #$0001,A 绝对地址寻址指的是一个绝对地址。 4.2.2 寄存器直接寻址(操作数是寄存器) MOVE.W R0,A0 ;将R0寄存器的值传送给A0 4.2.3 寄存器间接寻址(以寄存器R0、R1、R2、 R3中的值为指针的寻址) MOVE.L X:$1000,A0
4.1.2 常用汇编管理指令





6、XDEF和XREF XDEF-在本文件中定义可以被其他文件中的程序 调用的子程序; XREF-说明本子程序的定义在其他文件中。 XDEF ASM_ROUTINE XREF C_FUNCTION,BUSY_FLG ASM_ROUTINE BFSET #$0001,X:BUSY_FLG BCS BUSY JSR C_FUNCTION BFCLR #$0001,X:BUSY_FLG BUSY RTS
4.1.2 常用汇编管理指令



2、EQU-赋值管理指令 格式: 标号 EQU <表达式> ;注释 3、DC-定义常数 格式: (<标号>) DC <表达式> 4、DS-保留存储器字节管理指令 格式: (<标号>) DC <表达式> 5、END-表示汇编程序结束 格式: END (<标号>)
4.2 DSP56800的寻址方式



4.2.4 带有偏移量的寄存器间接寻址 MOVE X(R0±offset),X1 4.2.5 带事后加/减1的寄存器间接寻址 MOVE Y1,X(R0)+ 4.2.6 带事后加/减n的寄存器间接寻址 MOVE Y1,X(R0) +N 4.2.7 存储器绝对短寻址与I/O短寻址
相关文档
最新文档