首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于240X的指令集的三种存储器寻址方式

关于240X的指令集的三种存储器寻址方式

240X寻址方式分为:立即寻址、直接寻址、间接寻址三种寻址方式。立即寻址的指令包含常数作为指令的操作数,不用访问数据存储器,所以叫立即寻址,根据操作数的长短分为:短立即寻址(指令长度为1字)和长立即寻址(指令长度为2字)。直接寻址与间接寻址指令都要访问数据存储器,直接寻址是将指令所包含的7位页偏移地址码和ST0中的DP寄存中的页地址码组合成数据存储器中操作数的地址,间接寻址是通过在指令中的有关8个辅助寄存器的超作数来访问,辅助寄存器中的数据地址来存取操作数的,过程比较间接所以叫间接寻址。
一、立即寻址方式
使用短立即寻址指令可以指定8,9或13位的常数数作为操作数,该指令只有一个指令字,指令字包含常数型的操作数。
例:ADD #34 ;将34加到ACC
其机器码为 1011 1000 0010 0010
其中高字节1011 1000是短立即寻址的加法指令,低字节0010 0010为34的二进制操作数。
例:ADD #56 ;将56加到ACC
其机器码为 1011 1000 0011 1000
其中高字节1011 1000是加法指令,低字节0011 1000为56的二进制操作数
长立即数寻址的操作数为16位,所以该型有两个指令字,其中一个指令字专门放操作数。
例:ADD #16384, 2 ;将16384左移2位后加到ACC
机器码为 1011 1111 1001 0010   第一指令字
0100 0000 0000 0000   第二指令字为16384的二进制数
1011 1111 1001这个前三4位段为长立即数的立即寻址指令,0010第四个位段表示左移的位数,第二指令字为16位的操作数。
二、直接寻址方式
直接寻址与数据存储器分页有关,大家都知道,64K分512页每页128字,DP为页地址,直接寻址指令提供7位的页偏移地址来定位操作数,7+9=16,来合成操作数的地址,形成操作码!还是以加法举例。
例:LDP #4     ; 指定页面4为当前页 地址范围(0X0200-0X027F)
ADD 9h, 5  ; 指定页偏移地址为9h的存储单元的数据即数据存储器0209h单元的数值,被左移5位然后加到ACC
机器码为0010 0101 0 000 1001
其中0010 表示指令字为直接寻址的加法指令,0101代表左移5位,0代表直接寻址,000 1001为7位偏移地址。
页面指针DP为 0000 0010 0操作数的地址为 0000 0010 0 000 1001
这里还有左移16位的加法指令和带进位位的加法指令就不一一讲解了。总的来说,直接寻址比较简单。
三、间接寻址指令
间接寻址指令依靠8个辅助寄存器(AR0-AR7)完成,每个辅助寄存器都是16位的所以寻址空间为64K。至于ARP与AR及ARAU的关系就不详细讲解了!要写好多,最近也挺忙希望朋友们谅解。这里需要注意ARAU在指令译码阶段完成操作,这样可以在下一条指令译码之前指定当前的AR。来形成指令字。还有就是NORM指令会使ARAU操作改在指令的执行阶段进行操作。
下面结合LT指令介绍4类间接寻址类型。
1、指令使用当前辅助寄存器的内容作为操作数的地址,指令执行过程中当前AR的值保持不变。
例:LT * ;当前AR的内容装载到TREG(临寄),*代表当前的辅寄。
2、指令使用当前辅助寄存器的内容作为操作数的地址,指令执行过程中当前AR的值加1或减1。
例:LT *+ ;当前AR的内容装载到TREG之后,当前AR的值加1,指向下一单元
例:LT *- ;当前AR的内容装载到TREG之后,当前AR的值减1,指向上一单元
3、增加或减少一个变址量,这个变址量为AR0的值,指令使用当前辅助寄存器的内容作为操作数的地址,执行过程中,但前AR加上或减去AR0的值。
例:LT *0+ ;当前AR的内容装载到TREG之后,当前AR的值加AR0,跳转到运算后的地址。
例:LT *0- ;当前AR的内容装载到TREG之后,当前AR的值减AR0,跳转到运算后的地址。
按逆向进位的方式加上减去一个变址量,个变址量为AR0的值,指令使用当前辅助寄存器的内容作为操作数的地址,执行过程中,但前AR加上或减去AR0的值,运算中使用逆向进位法则。这里说明一下逆向进位的意思,就是数据运算的时候高位向低位进位例如11+10=00,高位的1+1 则进位为1,加上低位的1+1+0=0,所以结果为00,就是这个意思。操作主要用在FFT变换中。
例:LT *RB0+ ;当前AR的内容装载到TREG之后,当前AR的值加AR0,跳转到运算后的地址,采用逆向进位的方式。
例:LT *RB0- ;当前AR的内容装载到TREG之后,当前AR的值减AR0,跳转到运算后的地址,采用逆向进位的方式。
这些指令中关于辅寄的操作都是在,指令的译码阶段完成的。各类的寻址都给出了例子,应该很明确这个概念了。
继承事业,薪火相传
返回列表