第四章 DSP56800指令集与汇编语言_第1页
第四章 DSP56800指令集与汇编语言_第2页
第四章 DSP56800指令集与汇编语言_第3页
第四章 DSP56800指令集与汇编语言_第4页
第四章 DSP56800指令集与汇编语言_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章DSP56800指令集与汇编语言(1),4.1DSP56800汇编语言4.2DSP56800寻址方式4.3数据传输指令4.4乘法与乘/加指令4.5除法指令4.6移位指令,第四章DSP56800指令集与汇编语言(2),4.7算数与逻辑运算指令4.8DSP56800中的并行处理4.9位操作与位测试指令4.10跳转与返回指令4.11其他控制指令4.12规格化指令NORM,4.1.1DSP56800汇编语言格式,汇编语言的格式是:LabelOpcodeoperands;注释Label:语句标识,编译后生成程序地址入口标识。Opcode操作码,表示指令类型。Operands操作对象。,注:语句标号前面不能有空格,应以字母开头,后面接英文、数字、美元符$和下横线_。标号不能重复定义。,4.1.2常用汇编管理指令,汇编管理指令(伪指令)不与任何处理器指令相对应。提供给汇编程序的指令,没有对应的机器码生成。1、ORG定位伪指令格式:ORG;注释如:ORGP:$1000,4.1.2常用汇编管理指令,2、EQU赋值管理指令格式:标号EQU;注释3、DC定义常数格式:()DC4、DS保留存储器字节管理指令格式:()DC5、END表示汇编程序结束格式:END(),4.1.2常用汇编管理指令,6、XDEF和XREFXDEF在本文件中定义可以被其他文件中的程序调用的子程序;XREF说明本子程序的定义在其他文件中。XDEFASM_ROUTINEXREFC_FUNCTION,BUSY_FLGASM_ROUTINEBFSET#$0001,X:BUSY_FLGBCSBUSYJSRC_FUNCTIONBFCLR#$0001,X:BUSY_FLGBUSYRTS,混合编程,1、main.c文件中:intasmadd(int,int);2、*.asm文件中:globalFasmadd,4.2DSP56800的寻址方式,4.2.1立即数寻址与绝对地址寻址立即数寻址指的是汇编指令中的操作数是一个数值。如:MOVE#$0001,A绝对地址寻址指的是一个绝对地址。4.2.2寄存器直接寻址(操作数是寄存器)MOVE.WR0,A0;将R0寄存器的值传送给A04.2.3寄存器间接寻址(以寄存器R0、R1、R2、R3中的值为指针的寻址)MOVE.LX:$1000,A0,4.2DSP56800的寻址方式,4.2.4带有偏移量的寄存器间接寻址MOVEX(R0offset),X14.2.5带事后加/减1的寄存器间接寻址MOVEY1,X(R0)+4.2.6带事后加/减n的寄存器间接寻址MOVEY1,X(R0)+N4.2.7存储器绝对短寻址与I/O短寻址,4.3数据传输指令,以MOVE为主,可以实现立即数向内部寄存器、数据存储器、输出设备的写入,实现寄存器之间、寄存器与数据存储器和程序存储器之间、寄存器与I/O设备之间的数据传输。某些数据传输指令可以与算术运算指令、逻辑运算指令同时读入,并行执行。算数运算指令还可以并行地执行另外两条指令,分别通过不同的2条数据总线从存储器中并行读入数据,实现并行数据传输。,4.3数据传输指令,MOVE#$0010,A0MOVEX0,X:R0MOVEX:(R0+offset),X1MOVEX:(R0+N),X1MOVEY1,X:(R0)+MOVEY1,X:(R0)+NLEAX:(R0)+POPRMOVE(SP)-,R,4.3数据传输指令,LEA和POP指令LEA地址寄存器加/减1eg:LEAX:(R0)+;将R0+1的值放入R0中POP-从堆栈中弹出SP指向的当前值到某一寄存器R中,然后SP的值减1。eg:POPR,4.4乘法与乘/加指令,IMPY:整数乘法指令实现16位整数与16位整数的乘法,结果超出16位的话会出现错误,溢出标志会置位。MAC:将两个带符号的16位源寄存器的操作数S1和S2的积与指定的36位目标累加器D进行加/减MACR:除完成MAC功能,还实现结果四舍五入MPY:实现16位带符号数相乘,并将32位乘积存入目标寄存器中。MPYR:实现16位带符号小数相乘,并将32位乘积进行舍入处理后再存储在目标寄存器中。,4.5除法指令,除法:DIVS,A(或B)A(或B)是被除数,S是除数eg:BFCLR#$1,SR;清进位、借位标志REP16;DIVX0,BADDX0,B;,4.6移位指令,算数左移算数右移ASL/ASR逻辑左移逻辑右移LSL/LSR循环左移循环右移ROL/ROR,4.7算数与逻辑运算指令,加法减法比较加1减1比较等等,4.8DSP56800中的并行处理,内核三个组成:算数逻辑单元ALU、地址产生器AGU、程序控制器PC4.8.1单并行处理并行处理的原则:当ALU进行算数或逻辑运算时,内核的通用数据总线CGDB上可以进行数据传输,即MOVE执行。单并行处理:ALU中的运算和CGDB上的数据传输在1个周期内同时完成。,表4.6单并行处理指令,eg:ADDX0,AY0,X:(R1)+N在执行将X0的内容加到A的同时,Y0传送给以R1间址的数据存储器中,然后R1寄存器中的地址值刷新为R1加上N寄存器中的值。,4.8.2双重并行处理指令,第二条地址总线XAB2第二条数据总线XDB2做算数运算时,可以实现双重并行处理,即一个周期完成3条指令。前面的单并行处理XAB2和XDB2执行1条数据传送指令。第二重并行处理靠地址寄存器R3完成。,表4.7双重并行处理指令,eg:MACRX0,Y0,AX:(R0)+N,YX:(R3)-,X0;执行X0乘以Y0作4舍5入处理,并将结果加到累加器A上;同时,R0指向的数据存储器中的值传给Y1,R3指向的数据寄存器的内容用于刷新X0;数据传输完成后,R0的值刷新为R0+N,R3的值减1。,4.9位操作与位测试,位操作指令中最重要的两条:BFCLR-Bitfieldtestandclear位清零BFSET-位置1BFCHG-位取反eg:bfset#$0100,srbfclr#$0100,srbfchg#$0100,sr,例如:BFSET#$F400,X:$FFE2,立即数#$F400,应测试X:(FFE2)中的第15、1413、12、10位。执行前:执行后:(FFE2)中内容为8921,第14、13、12、10位为0,所以C=0SR=0000(FFE2)中的第15、14、13、12、10位置1,(FFE2)=FD21,二、位测试清0指令BFCLR,汇编指令:BFCLR#iiii,X:其操作是:汇编指令:BFCLR#iiii,D其操作是:同样进行“读改写”操作,只是最后写入的是0,其余与BFCHG相同。指令对CCR的影响:,C如果D中与立即数置1所对应的位均为1则置1,否则清0,例如:BFCLR#$0310,X:$FFE2,立即数#$0310,应测试X:(FFE2)中的第9、8、4位执行前:执行后:(FFE2)中内容为7F95,第9、8、4位为1,所以C=1SR=0001(FFE2)中的第9、8、4位清零,(FFE2)=7C85,三、位测试改写指令BFCHG,汇编指令:BFCHG#iiii,X:汇编指令:BFCHG#iiii,D根据立即数置1所决定的位,对目标操作数进行位测试,并对测试位取反,将结果储存,这个过程叫做“读改写”。目标操作数既可以是寄存器也可以是存储器的内容。指令对CCR的影响:C如果D中与立即数置1所对应的位均为1则置1,否则清0,例如:BFCHG#$0310,X:$FFE2,立即数#$0310,应测试X:(FFE2)中的第9、8、4位执行前:执行后:(FFE2)中内容为0010,第9、8位为零,所以C=0S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论