原创 ColdFire指令集[2]寻址方式

2007-10-24 11:13 3650 3 3 分类: MCU/ 嵌入式

第二章 寻址能力<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


绝大多数操作涉及源操作数和目的操作数,并且将结果存储到目的单元,


2.1 指令格式


ColdFire指令由1—3个字组成,图2-1为指令通常的构成情况,第一个字称为操作字,它具体说明了指令长度,有效寻址方式和要执行的操作。剩余字进一步说明指令及操作数。这些字可以是条件判定(conditional predicates)、立即数、操作字中指定的有效寻址方式的扩展字、分支位移量、位号、特殊寄存器说明、陷阱操作数、组合/非组合常数或浮点命令字。ColdFire体系系列指令字长度有三种:16位、32位或48位。


2-1  指令字一般格式



操作字(一字,说明操作和模式)


扩展字(如果需要)


扩展字(如果需要)


 


2.2 有效寻址方式


<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.2.1 立即数寻址


立即数寻址方式(Immediate Data Addressing Mode中,操作数在一个或两个扩展字中,下表列出在指令字格式中操作数的位置。



操作长度


地址


字节(byte


扩展字的低位字节


(word)


整个扩展字


长字(longword


操作数的低位字在第一个扩展字中,高位字在第二个扩展字中


有效地址产生:操作数给定


语法:#


例如:MOVE.L #0X1234(0X12345678)


2.2.2 数据寄存器直接寻址


       数据寄存器直接寻址方式(Data Register Direct Addressing Mode)中,有效地址字段说明包含操作数的数据寄存器。


       有效地址产生:EA=Dn


       语法:Dn


       例如:MOVE.L #0X3ED0


2.2.3 地址寄存器直接寻址


       地址寄存器直接寻址方式(Addressing Register Direct Addressing Mode)中,有效地址字段说明包含操作数的数据寄存器。


有效地址产生:EA=An


       语法:An


       例如:MOVE.L 0X43F1A2


2.2.4 地址寄存器间接寻址


       地址寄存器间接寻址方式Address Register Indirect Mode)中,操作数在存储器中,有效地址字段说明包含存储器中操作数地址的地址寄存器。


有效地址产生:EA=An


       语法:(An


       例如:MOVE.L D3,(A0


2.2.5 带后增量的地址寄存器间接寻址


       带后增量的地址寄存器间接寻址方式(Address Register Indirect with Postincrement Mode)中,操作数在存储器中,有效地址字段说明包含存储器中操作数地址的地址寄存器。操作数地址在被引用后分别增加124,依操作数长度为字节、字或长字而定。


有效地址产生:EA = (An); An = An + Size


语法:(An)+


例如:MOVE.L D0,(A1+


2.2.6 带预减量的地址寄存器间接寻址


       带预减量的地址寄存器间接寻址方式(Address Register Indirect with Predecrement Mode)中,操作数在存储器中,有效地址字段说明包含存储器中操作数地址的地址寄存器。操作数地址在被引用前分别减少124,依操作数长度为字节、字或长字而定。


有效地址产生:EA = (An) - Size; An = An - Size;


语法:–(An)


例如:MOVE.L D2-(A3)


2.2.7 带位移量的地址寄存器间接寻址


         带偏移量的地址寄存器间接寻址方式(Address Register Indirect with Displacement Mode)中,操作数在存储器中,地址寄存器中的地址(即说明的有效地址)与扩展字中符号扩展的16位位移量整数之和,就是存储器中操作数的地址。位移量在有效地址运算中引用之前被带符号扩展为32位。


有效地址产生:EA = (An) + d16


语法:(d16,An)


例如:MOVE.L D70X562A(A3)


 2.2.8带变址(8位位移量)的地址寄存器间接寻址


带变址(8位位移量)的地址寄存器间接寻址方式(Address Register Indirect with Scaled Index and 8-Bit Displacement Mode)需要一个变址寄存器指示符和8位位移量的扩展字,变址寄存器包含长度和定标信息。这种寻址方式中,操作数在存储器中,操作数地址为地址寄存器的内容、扩展字的低八位中带符号扩展的位移量值以及变址寄存器符号扩展内容(可能被定标了)之和。这种方式中,用户必须说明地址寄存器、位移量和变址寄存器。


有效地址产生:EA = (An) + ((Xi) * ScaleFactor)) + Sign-extended d8


语法:(d8,An,Xi,Size*Scale)


MOVE.L (0X12,A0,D2.L*4), A3


2.2.9 带位移量的程序计数器间接寻址


         带位移量的程序计数器间接寻址方式(Program Counter Indirect with Displacement Mode)中,操作数在存储器中,操作数地址为程序计数器(PC)中地址与扩展字中带符号扩展的16位位移量整数之和。PC中的值为扩展字中的地址,这是一个只允许读的程序访问。


有效地址产生:EA = (PC) + d16


语法:(d16,PC)


MOVE.L D60X4321(PC)


2.2.10 带变址(8位位移量)的程序计数器间接寻址


         带变址(8位位移量)的程序计数器间接寻址方式(Program Counter Indirect with Scaled Index and 8-Bit Displacement Mode)与2.2.8带变址(8位位移量)的地址寄存器间接寻址方式相似,只是PC是一个基址寄存器。操作数在存储器中,操作数地址为PC中的地址,扩展字的低八位中带符号扩展的位移量整数以及定长、定标且带符号扩展的变址操作数之和。PC中的值为扩展字中的地址,这是一个只允许读的程序访问。用户在说明这种寻址方式时,必须包括位移量、PC及变址寄存器。


有效地址产生:EA = (PC) + ((Xi) * ScaleFactor)) + Sign-extended d8


语法:(d8,PC,Xi,Size*Scale)


MOVE.L (0X66,PC,D0.L*4), A1


 2.2.11绝对短寻址


         绝对短寻址方式(Absolute Short Addressing Mode)中,操作数在存储器中,操作数地址在扩展字中,16位地址在使用前带符号扩展为32位。


有效地址产生:EA 给定


语法:(xxx).W


MOVE.L D0, (0X1234)


2.2.12 绝对长寻址


         绝对长寻址方式(Absolute Long Addressing Mode)中,操作数在存储器中,操作数地址存储于两个扩展字中,第一个存储高16位,第二个存储低16位。


有效地址产生:EA 给定


语法:(xxx).L


例如:MOVE.L D0, (0X12345678)


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条