数据交换指令是实现两个操作数据之间的位置互换的指令,这两个操作数可以是两个寄存器操作数,或一个寄存器操作数与一个存储器操作数,或两个存储器操作数,在多处理机中,也可以是一个寄存器操作数和一个共享存储器操作数。数据交换指令实现了数据的双向传送,一条数据交换指令起到了三条数据传送指令的作用1。
简介数据交换指令是load/store指令的一种特例,它把一个寄存器单元的内容与寄存器内容交换;或把数据在两个指定的目标软组件之间进行交换,数据交换指令属于一种数据传送指令1。数据交换指令是一个原子操作(atomic operation),原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分。也就是说,在连续的总线操作中读/写一个存储单元,在操作期间阻止其他任何指令对该存储单元的读/写。在单片机汇编指令中,使用数据交换指令可以完成累加器A和内部RAM之间的字节或者半字节交换。字节交换是指令完成累加器A与内部RAM单元内容的全字节交换,形式如下:
汇编指令格式 指令编码 周期数 寻址方式 操作XCH A ,Rn 1100 1rrr 1 寄存器寻址 (A)(Rn)XCH A,direct 11000101 1 直接寻址 (A)(direct)XCH A,@Ri 1100011i 1 寄存器间接寻址 (A)(Ri)半字节交换是指累加器A与内部RAM单元内容的低4位交换,高4位内容不变,该操作只影响标志位P,形式如下:
汇编指令格式 指令编码 周期数 寻址方式 操作XCHD A,@Ri 1101011i 1 寄存器间接寻址 (A3~0(Ri)3~0)累加器自身半字节交换是完成累加器A内容的高4为与低4位交换,不影响PSW内容,代码解释如下:
汇编指令格式 指令编码 周期数 寻址方式 操作SWAP A 11000100 1 寄存器寻址 (A3~0A7~4)数据传送指令数据传送指令是汇编语言程序设计中使用最频繁也是最重要的一类指令。这类指令一般是把源操作数传送到目的操作数,指令执行后,源操作数不变,目的操作数改为源操作数。常见的传送类型发生在内部RAM之间,这类指令除了可以通过累加器进行传送外,还可以在数据存储器之间或工作寄存器与数据存储器之间直接进行数据传送,非常简单方便。数据传送指令1次可传送1个数据或1批数据。传送1批数据时,执行时间较长,在传送过程中如果有中断请求,往往允许暂时终止现行指令的执行而转入中断处理程序,处理完毕返回原程序后,再从该指令中止处继续执行下去2。
操作数操作数是运算符作用于的实体,是表达式中的一个组成部分,它规定了指令中进行数字运算的量 。
操作数指出指令执行的操作所需要数据的来源。操作数是汇编语言指令的一个字段。在操作数这个字段中可以放操作数本身,也可以放操作地址,还可以放操作地址的计算方法。
通常一条指令均包含操作符和操作数。例如:在比较指令中操作符指定计算机做比较操作,操作数则指定进行比较的两个数值。操作数是指令执行的参与者,也就是各种操作的对象.与之有关的是操作码,所谓操作码是说明计算机要执行哪种,如传送,运算,移位,跳转等操作,它是指令中不可缺少的组成部分。
寄存器操作数:指令要操作的数据存放在CPU中的寄存器里,指令中给出寄存器名即可。
立即操作数:指令要操作的数据以常量的形式在指令中出现,称为立即数,它只能作为源操作数3。
本词条内容贡献者为:
李嘉骞 - 博士 - 同济大学