[英]MSP430 SWAP bytes explanation assembly
当我们有这样的代码时:
main: MOV #SFE(CSTACK), SP ; set up stack
;;; some instructions .......
; load the starting address of the array1 into the register R4
MOV.W #arr1, R4
; load the starting address of the array1 into the register R5
MOV.W #arr2, R5
; Sum arr1 and display
CLR R7 ; Holds the sum
MOV #8, R10 ; number of elements in arr1
lnext1: ADD @R4+, R7 ; get next element
DEC R10
JNZ lnext1
MOV.B R7, P1OUT ; display sum of arr1
SWPB R7
MOV.B R7, P2OUT
在此示例中执行SWPB R7的原因/含义是什么? 我阅读了文档,并了解它可以交换低/高端字节; 在某些文档中它表示乘以256。这是唯一的原因,还是我在这里缺少更深的东西? 该代码应添加寄存器的元素。
MOV.B只能访问低字节。 因此,要能够将高位字节复制到其他位置,必须先将其移至低位字节。 (交换之后,前一个低字节在高字节中是不重要的副作用。)
还有其他效率较低的机制来获取高字节,例如将寄存器右移八次:
MOV.B R7, P1OUT
RRA R7
RRA R7
RRA R7
RRA R7
RRA R7
RRA R7
RRA R7
RRA R7
MOV.B R7, P2OUT
或将16位值存储到一个临时变量中,然后直接访问该变量的两个字节:
MOV.W R7, temp_low ; writes both bytes
MOV.B temp_low, P1OUT
MOV.B temp_high, P2OUT
.bss
.align 2
temp_low: .space 1
temp_high: .space 1
对于较新的MSP430系列,安排了端口寄存器,以便您可以通过单个16位访问来访问两个端口:
MOV.W R7, PAOUT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.