指令系统.docx

上传人:b****6 文档编号:5642571 上传时间:2022-12-29 格式:DOCX 页数:21 大小:506.21KB
下载 相关 举报
指令系统.docx_第1页
第1页 / 共21页
指令系统.docx_第2页
第2页 / 共21页
指令系统.docx_第3页
第3页 / 共21页
指令系统.docx_第4页
第4页 / 共21页
指令系统.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

指令系统.docx

《指令系统.docx》由会员分享,可在线阅读,更多相关《指令系统.docx(21页珍藏版)》请在冰豆网上搜索。

指令系统.docx

指令系统

指令系统

•寻址方式

•指令概述(分类、符号、指令格式)

•C24xDSP汇编指令

•简单程序举例

三种基本寻址方式:

立即寻址、直接寻址、间接寻址

C24XDSP寻址方式:

立即寻址

指令中包含一个立即数。

立即数可分为短立即数(8,9,13位)和短立即数(16位)

例子:

RPT#k;下面的指令重复执行k+1次,#k为8位

LDP#k;DP=k,#k为9位

MPY#k;P=T*k,#k为13位

ADD#lk,shift;ACC=ACC+lk左移shift次#lk为16位

LACC#10h;ACC=#10H,“#”号表示立即数

(LACC10h;直接寻址,当前DP的第10h单元数据送累加器ACC中)

寻址方式:

直接寻址

数据存储器(DM:

DataMemory)直接地址由高9位DP(DataPagePointer数据页面指针)和低7位地址共同组成。

数据页面指针DP的范围:

0-511页,dma=0-127

即DP指向512页中的一页,dma表示该页128单元之一。

512*128W=64KW

机器码格式:

D15-8为操作码,D7=0,

D6-0页内地址(dma)

例.LDP#4;DP=#4=000000100,

ADD9h;ACC=ACC+(209h),9=0001001

高9位DP低7位dma:

0000001000001001=209h

寻址方式:

间接寻址

间接寻址:

数据存储单元可以通过当前辅助寄存器内容所代表的16位地址进行访问。

8个16位辅助寄存器AR0-AR7

当前辅助寄存器由ARP(ST0:

D15-13=000-111)指定

例MAR*,AR1;选择AR1为当前辅助寄存器,ARP=1

LARAR1,#208h;AR1=#208h

ADD*,8;ACC=ACC+(208h)*28间接寻址

间接寻址类型:

*地址不变

*+AR=AR+1当前AR中的地址加1

*-AR=AR-1

*0+AR=AR+AR0

*0-AR=AR-AR0

*BR0+AR=B(AR+AR0)地址反向进位加,用于FFT

*BR0-AR=B(AR-AR0)

下一个辅助寄存器:

许多指令除了可以修改当前辅助寄存器的数值外,还可以指定下一个辅助寄存器,作为下一条指令的当前辅助寄存器。

例.MAR*,AR1;AR1为当前AR,即ARP=1

LT*+,AR2;T=(AR1),AR1=AR1+1,ARP=2

MPY*;P=T*(AR2)=(AR1)*(AR2)

间接寻址举例

  ADD*,8

ADD*+,8,AR4

ADD*-,8

ADD*0+,8

ADD*0-,8

ADD*BR0+,8

ADD*BR0-,8

指令概述

C24X指令分类表:

86条

传送指令,算术操作,逻辑运算指令,分支转移指令

1)累加器、算术和逻辑操作指令,26条

2)辅助寄存器和DP操作指令,7条

3)T寄存器、P寄存器和乘操作指令,20条

4)跳转指令,12条

5)控制指令,13条

6)I/O及数据存储器操作指令,8条

7)

汇编指令格式:

[标号]指令(操作码)[操作数][;注释]

1、累加器、算术、逻辑指令

 

 

 

2、辅助寄存器指令

 

3、T,P寄存器与乘法指令

 

 

4、分支转移指令

 

5、控制指令

 

6、I/O即存储器指令

 

指令中常用符号表

AR:

辅助寄存器ACC:

累加器

dma:

DM地址低7位DP:

9位数据页面指针

ind:

间接寻址方式#:

立即数

shift:

左移位数0-15PA:

16位口地址

shift2:

左移位数0-7pma:

16位程序地址

ARn:

指定的辅助寄存器cond:

条件指令的条件

():

存储单元内容[]:

可选项

汇编语言指令举例:

加法指令

例如,加法指令:

ADDdma[,shift];直接寻址

ADDdma,16;左移16位直接寻址

ADDind[,shift[,ARn]];间接寻址

ADDind,16[,ARn];左移16位间接寻址

ADD#k;短立即寻址

ADD#lk[,shift];长立即寻址

例.指令ADD*+,0,AR0

功能:

ACC=ACC+(AR),ARP=0

执行前

ARP=4

AR4=302H

DM:

(302H)=2

ACC=2

C=X

执行后

ARP=0

AR4=303H

DM:

(302H)=2

ACC=4

C=0

 

 

汇编语言指令

(1)

(1)ABS累加器取绝对值

(2)ADD累加器加

(3)ADDC带进位累加器加

(4)ADDS抑制符号扩展的累加器加

(5)ADDT:

T寄存器指定移位次数的累加器加

(6)ADRK辅助寄存器加短立即数

(7)AND和累加器进行与操作

(8)APAC:

P加到ACC

(9)B无条件跳转

(10)BACC跳转到ACCL确定的地址

(11)BANZ辅助寄存器非0跳转

语法:

BANZpma[,ind[,ARn]]

例BANZPGM191,*-,AR0

汇编语言编程例1

将数据存储器60H-69H单元内容求和。

MAR*,AR0;设AR0为当前AR

LARAR1,#09H;10个单元,计数器

LARAR0,#60H;初始单元AR0=#60H,地址指针

LACC#0;和初值ACC=0

PGM191:

ADD*+,AR1;累加,AR0+1,下一当前AR为AR1

BANZPGM191,AR0;AR1≠0则循环,且AR1=AR1-1

;下一当前AR为AR0

;ACC=0+(60H)+(61H)+…+(69H)

汇编语言指令

(2)

(12)BCND无条件跳转

(13)BIT位测试

(14)BITT:

T寄存器指定测试

(15)BLDD数据块移动

(16)BLPD程序区到数据区的块移动

(17)CALA:

调用ACC指定的子程序

(18)CALL:

无条件调用子程序

(19)CC条件调用

(20)CLRC控制位清0

(21)CMPL:

ACC取反

(22)CMPR辅助寄存器AR与AR0比较

(23)DMOV数据移动

(24)IDLE等待中断

(25)IN从端口读入数据

BITT指令:

T寄存器指定位测试

语法:

1)BITTdma

2)BITTind[,ARn]

功能:

将DM单元中指定的位复制到状态寄存器ST1的TC位。

指定的位对应于15-T(3:

0)。

例BITT00H;(DP=6)

执行后

DM:

(300H)=4DC8H0100DC8

T=1D(15-1)=D14=1

TC=1

 

执行前

DM:

(300H)=4DC8H

T=1

TC=0

 

BLDD指令:

数据块移动

语法:

1)BLDD#lk,dma

2)BLDD#lk,ind[,ARn]

3)BLDDdma,#lk

4)BLDDind,#lk[,Arn]

说明:

该指令实现DM到DM的块移动,第一个数指定源地址,第二个数指定目的地址。

一旦启动了流水线,它就成为单周期指令。

例子BLDD#300h,20h;(DP=6)

执行前:

DM:

(300h)=0h(320h)=0fh

 

执行后:

DM:

(300h)=0h(320h)=0h

汇编语言指令(3)

(26)INTR软件中断

(27)LACC带移位的ACC装载

(28)LACL装载ACCL,ACCH=0

(29)LACT由T指定移位次数的ACC装载

(30)LAR:

LoadAR装载辅助寄存器

(31)LDP:

LoadDP装载DP

(32)LPH:

LoadPH

(33)LST:

LoadST

(34)LT:

LoadT

(35)LTA:

LoadTandAdd

(36)LTD装载T寄存器、累加前次乘积并移动

(37)LTP装载T寄存器并将P送到ACC

(38)LTS:

LoadTandSubtract

(39)MAC:

乘累加

MAC指令:

乘累加

 

语法1)MACpma,dma

2)MACpma,ind[,ARn]

功能:

ACC=ACC+P,T=(DM),P=(PM)*(DM)=(PM)*T

例MAC0FF00H,08;(DP=6,PM=00)

 

执行后

DM:

(308h)=23h

PM:

(FF00H)=4

T=23h

P=8CH

ACC=76975b3h

 

执行前

DM:

(308h)=23h

PM:

(FF00H)=4

T=45h

P=458972h

ACC=723EC41h

 

MACD指令:

乘累加并移动数据

语法1)MACDpma,dma

2)MACDpma,ind[,ARn]

例MACD0FF00H,08;(DP=6,PM=00)

功能:

ACC=ACC+P,T=(DM),P=(PM)*(DM),(DM+1)=(DM)

执行前执行后

DM:

(308h)=23hDM:

(308h)=23h

DM:

(309h)=18hDM:

(309h)=23h

PM:

(FF00H)=4PM:

(FF00H)=4

T=45hT=23h

P=458972hP=8CH

ACC=723EC41hACC=76975b3h

汇编语言指令(4)

 

(40)MACD乘累加并移动数据

(41)MAR:

ModifyAR修改辅助寄存器

(42)MPY:

Multiply乘

(43)MPYA:

乘且累加前次积

(44)MPYS:

乘且减去前次积

(45)MPYU:

无符号乘

(46)NEG:

ACC取补码

(47)NMI:

NonMaskableInterrupt非屏蔽中断

(48)NOP:

NoOperation空操作

(49)NORM:

ACC规格化

(50)OR:

与ACC或运算

(51)OUT:

输出数据到端口

(52)PAC:

P送到ACC

(53)POP栈定内容弹出到ACCL

汇编语言指令(5)

(54)POPD:

POPtoDatamemory栈定内容弹出到数据存储器单元

(55)PSHD:

数据存储器单元压入堆栈

(56)PUSH:

ACCL压入堆栈

(57)RET:

子程序返回

(58)RETC:

条件返回

(59)ROL:

A循环左移

(60)ROR:

A循环右移

(61)RPT:

重复执行下一条指令

(62)SACH:

StoreACCH

(63)SACL:

StoreACCL

(64)SAR:

StoreAR

(65)SBRK:

AR减去短立即数

PSHD指令:

数据存储器单元压入堆栈

语法:

1)PSHDdma

2)PSHDind[,ARn]

说明:

堆栈依次向下移动一级,指定存储器单元的内容复制到栈顶。

堆栈底部的值丢失。

例子PSHD*,AR1

 

执行后

ARP=1

AR0=1FFH

DM:

(1FFH)=12H

硬件堆栈

12h

2h

33h

78h

99h

42h

50h

0h

 

执行前

ARP=0

AR0=1FFH

DM:

(1FFH)=12H

硬件堆栈

2h

33h

78h

99h

42h

50h

0h

0h

 

POPD指令:

栈定内容弹出到存储器单元

语法:

1)POPDdma

2)POPDind[,ARn]

说明:

栈顶的内容复制到DM单元中。

堆栈值依次向上复制一级。

例子POPD20h;(DP=6)

执行前

DM:

(320H)=45H

硬件堆栈

16h

7h

33h

42h

56h

37h

61h

61h

 

执行前

DM:

(320H)=82H

硬件堆栈

45h

16h

7h

33h

42h

56h

37h

61h

 

汇编语言指令(6)

(66)SETC控制位置位

(67)SFL:

A左移

(68)SFR:

A右移

(69)SPAC:

A减P

(70)SPH:

StorePH

(71)SPL:

StorePL

(72)SPLK:

长立即数送到DM单元

(73)SPM:

设置移位模式PM

(74)SQRA:

乘方并累加前一次乘积

(75)SQRS:

乘方并减去前一次乘积

(76)SST:

StoreST

(77)SUB:

ACC减

(78)SUBB:

带借位的:

ACC减

(79)SUBC条件减

SPLK指令:

长立即数送到DM单元

 

语法:

1)SPLK#lk,dma

2)SPLK#lk,ind[,ARn]

例子SPLK#1111H,*+,AR4

执行后

ARP=4

AR0=301H

DM:

(300H)=1111H

执行前

ARP=0

AR0=300H

DM:

(300H)=07H

 

条件减指令用于除法运算

语法格式:

SUBCdma

SUBCind[,ARn]

移位相减实现除法:

ACCL/(DM)=ACCL余数ACCH

例.RPT#15

SUBC*;执行情况16次

A执行后

ARP=3

AR3=1000H

DM:

(1000H)=7

ACCH=2,ACCL=0009H

 

A执行前

ARP=3

AR3=1000H

DM:

(1000H)=7

ACCH=0,ACCL=41H

65/7=9余数2

汇编语言指令(7)

(80)SUBS:

抑制符号扩展的累加器减

(81)SUBT:

T确定移位的累加器减

(82)TBLR:

TableRead表读1)TBLRdma;2)TBLRind[,ARN]说明:

将PM单元中的内容复制到指定的DM单元。

(83)TBLW:

TableWrite表写

(84)TRAP软件中断

(85)XOR与累加器进行异或操作

(86)ZALR:

ACCL=0,ACCH=8000H累加器低位字清0,高位字带舍入装载

汇编语言编程例2

 

查表程序

0≤x≤9,求y=x1/5,x=0,1,2,…,9,y值用Q14格式。

设x值在402H单元,查表y值送404H单元

LDP#8

LACC2;(402H)→ACCx

ADD#TAB;表首地址#TAB

TBLR4;ACC→(404H)y

思考题与习题

1.C24xDSP有哪些寻址方式?

2.直接寻址方式中,数据存储单元的地址是如何形成的?

3.间接寻址方式中,数据存储单元的地址是如何形成的?

间接寻址方式有哪些类型?

4.C24xDSP有哪几种类型的指令?

5.编程将数据存储器300H-30AH单元内容求和。

6.试编写一简单查表程序。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1