ZHCADC5A June 2013 – June 2020
MSP430 指令仅允许 16 位字段。MSP430 指令重定位通常不会检查溢出。MSP430 指令也可以用于 MSP430X,但汇编器使用不同的重定位以便检查溢出。
R_MSP430_ABS16 和 R_MSP430_PCR16 用于 MSP430 指令。两者都不用于 MSP430X 上的指令,但 $LO16 的 R_MSP430_ABS16 除外。将 $LO16 的 R_MSP430_ABS16 用于 MSP430X 是一种特殊情况,旨在成为 32 位立即加载的一半;另一半是 $HI16 (R_MSP430_ABS_HI16)。请参阅节 11.5.1.5中 R_MSP430_ABS_HI16 的说明。
R_MSP430_ABS16 用于绝对、索引和立即寻址模式,但仅限于 MSP430:
ADD.W #X, R5 ; R_MSP430_ABS16
ADD.W &X, R5 ; R_MSP430_ABS16
ADD.W R5, &X ; R_MSP430_ABS16
ADD.W K(R4), R5 ; R_MSP430_ABS16
R_MSP430_PCR16 用于符号寻址模式,但仅限于 MSP430。重定位容器的地址与有效 PC 匹配,因此无需进行加数调整。
MOV.W X, R5 ; R_MSP430_PCR16
MOV.W R5, X ; R_MSP430_PCR16
MOV.W X, Y ; R_MSP430_PCR16(X) and R_MSP430_PCR16(Y)
CALL X ; R_MSP430_PCR16
R_MSP430X_ABS16 和 R_MSP430X_PCR16(均仅限于 MSP430X)用于为 MSP430X 汇编的 MSP430 指令。对于 MSP430 从中使用 R_MSP430_ABS16 的指令,MSP430X 将使用 R_MSP430X_ABS16。R_MSP430_ABS16 与 R_MSP430X_ABS16 相同,区别是后者检查溢出。R_MSP430_PCR16 与 R_MSP430X_PCR16 类似。
R_MSP430X_ABS16 用于绝对、索引和立即寻址模式,但仅限于 MSP430X:
ADD.W #X, R5 ; R_MSP430X_ABS16
ADD.W &X, R5 ; R_MSP430X_ABS16
ADD.W R5, &X ; R_MSP430X_ABS16
ADD.W K(R4), R5 ; R_MSP430X_ABS16
R_MSP430X_PCR16 用于符号寻址模式,但仅限于 MSP430X:
MOV.W X, R5 ; R_MSP430X_PCR16
MOV.W R5, X ; R_MSP430X_PCR16
MOV.W X, Y ; R_MSP430X_PCR16(X) and R_MSP430X_PCR16(Y)
CALL X ; R_MSP430X_PCR16
R_MSP430X_ABS16 和 R_MSP430X_PCR16 也用于大多数 MSP430X 专用“地址指令”(MOVA、ADDA、SUBA 和 CMPA,但不包括 CALLA),因为这些指令在“索引”寻址模式下仅允许 16 位立即数。(还有其他指令允许在索引寻址模式下使用更大的立即数。)
MOVA K(R4), R5 ; R_MSP430X_ABS16 (MSP430X only)
MOVA X, R5 ; R_MSP430X_PCR16