MSP430交换字节解释装配
问题描述:
当我们有这样的代码:MSP430交换字节解释装配
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家庭,端口寄存器被布置成使得可以以单身访问两个端口E 16位访问:
我不写MIPS,但如果'R7'持有低字节和高字节代表两个数字,并且要输出到低字节' P1OUT“,然后将高字节输出到”P2OUT“,则需要在两者之间有一个”SWPB“输出高位字节(因为'MOV.B'正在移动低位字节),因此您的MOV.B R7 ,P2OUT'呼叫。 –