【文档说明】第四章DSP56800指令集与汇编语言课件.ppt,共(30)页,139.545 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44763.html
以下为本文档部分文字说明:
第四章DSP56800指令集与汇编语言第四章DSP56800指令集与汇编语言(2)4.7算数与逻辑运算指令4.8DSP56800中的并行处理4.9位操作与位测试指令4.10跳转与返回指令4.11其他控制指令4.12规格化指令NORM4.1.1DSP56800汇编语言
格式汇编语言的格式是:LabelOpcodeoperands;注释Label:语句标识,编译后生成程序地址入口标识。Opcode-操作码,表示指令类型。Operands-操作对象。注:语句标号前面不能有空格,应以字母开头,后面接英文、数字、美元符
$和下横线_。标号不能重复定义。4.1.2常用汇编管理指令汇编管理指令(伪指令)不与任何处理器指令相对应。提供给汇编程序的指令,没有对应的机器码生成。1、ORG-定位伪指令格式:ORG<表达式>;注释如:ORGP:$10004.1.2常用汇编管理指令2、EQU-
赋值管理指令格式:标号EQU<表达式>;注释3、DC-定义常数格式:(<标号>)DC<表达式>4、DS-保留存储器字节管理指令格式:(<标号>)DC<表达式>5、END-表示汇编程序结束格式:END(<标号>)4.1.2常用汇编管理指令6、XDEF和XREF
XDEF-在本文件中定义可以被其他文件中的程序调用的子程序;XREF-说明本子程序的定义在其他文件中。XDEFASM_ROUTINEXREFC_FUNCTION,BUSY_FLGASM_ROUTINEBFSET#$0
001,X:BUSY_FLGBCSBUSYJSRC_FUNCTIONBFCLR#$0001,X:BUSY_FLGBUSYRTS混合编程1、main.c文件中:intasmadd(int,int);2、*.asm文件中:
globalFasmadd4.2DSP56800的寻址方式4.2.1立即数寻址与绝对地址寻址立即数寻址指的是汇编指令中的操作数是一个数值。如:MOVE#$0001,A绝对地址寻址指的是一个绝对地址。4.2.2寄存器直接寻址(操作数是寄存器)MOVE.WR0,A0;将R0寄存
器的值传送给A04.2.3寄存器间接寻址(以寄存器R0、R1、R2、R3中的值为指针的寻址)MOVE.LX:$1000,A04.2DSP56800的寻址方式4.2.4带有偏移量的寄存器间接寻址MOVEX(R0±
offset),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)-,R4.3数据传输指令LEA和POP指令LEA-地址寄存器加/减1eg:LEAX:(R0)+;将R0+1的值放入R0中POP-从堆栈中弹
出SP指向的当前值到某一寄存器R中,然后SP的值减1。eg:POPR4.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/ROR4.7算数与逻辑运算指令加法减
法比较加1减1比较等等4.8DSP56800中的并行处理内核三个组成:算数逻辑单元ALU、地址产生器AGU、程序控制器PC4.8.1单并行处理并行处理的原则:当ALU进行算数或逻辑运算时,内核的通用数据总线CGDB上可以进行数据传输,即MOVE执行。单并行处理:ALU中的运算
和CGDB上的数据传输在1个周期内同时完成。表4.6单并行处理指令可以做1次并行数据传输的指令并行数据传输的指令源目标MAC/MACRMPY/MPYR/ADD/SUB/CMP/TFR/ABS/ASL/ASR/CLR/RND
/TST/INC/DEC/NEGX:(R1)+X:(R0)+X0/Y1/Y0A/B/A1/B1X0/Y1/Y0A/B/A1/B1X:(R1)+X:(R0)+Neg:ADDX0,AY0,X:(R1)+N在执行将X0的内容加到A的同时,Y0传送给以R1间址的数
据存储器中,然后R1寄存器中的地址值刷新为R1加上N寄存器中的值。4.8.2双重并行处理指令第二条地址总线XAB2第二条数据总线XDB2做算数运算时,可以实现双重并行处理,即一个周期完成3条指令。前
面的单并行处理+XAB2和XDB2执行1条数据传送指令。第二重并行处理靠地址寄存器R3完成。表4.7双重并行处理指令能实现双并行读的指令第一读取第二读取源目标源目标MAC、MACR、MPY、MPYR、ADD、SUBX:
(R0)+X:(R1)+X:(R0)+NX:(R1)+NY0Y1X:(R3)+X:(R3)-X0MOVEeg: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位清零BFS
ET-位置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:<ea>其操作是:汇编
指令:②BFCLR#iiii,D其操作是:同样进行“读—改—写”操作,只是最后写入的是0,其余与BFCHG相同。指令对CCR的影响:SLEUNZVC—●—————√CCRC—如果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:<ea>汇编指令:②BFCHG#iiii,D根据立即数置1所决定的位,对目标操作数进行位测试,并对测试位取反,将结果储存,这个过程叫做“读—改—写”。目标操作数既可以是寄存器也可以是存储器的内容。指令对CCR的影响:C—如果D中与立即数置1所对应的位均为1则
置1,否则清0SLEUNZVC—●—————√CCR例如:BFCHG#$0310,X:<<$FFE2立即数#$0310,应测试X:(FFE2)中的第9、8、4位执行前:执行后:(FFE2)中内容为0010,第9、8位为零,
所以C=0SR=0000(FFE2)中的第9、8、4位取反,(FFE2)=03004.10跳转与返回指令操作码操作数周期字长/字注释BCCxx6/41条件转移BRAxx61无条件转移JCCxxxx6/42条件跳转JMPxxxx62无条件跳转JSRxxxx82跳
转到子程序RTI101中断返回RTS101子程序返回BRCLR#xxxx,任意寄存器,AA10/82测试寄存器、存储器或外设的相应位复位或置位并转移…4.11其他控制指令DEBUGILLEGALNOPSWISTOPWAIT4.12规格化指令NORM用于小数点规
格化。NORM指令把累加器中的有符号数规格化。对定点数进行规格化即把他们分成指数和尾数,所以需要确定符号扩展数的数值大。