首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSP430交换字节解释程序集

MSP430交换字节解释程序集
EN

Stack Overflow用户
提问于 2017-09-11 02:49:45
回答 1查看 1.3K关注 0票数 2

当我们有这样的代码时:

代码语言:javascript
复制
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。这是唯一的原因还是我错过了更深层次的东西?应该添加寄存器元素的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 07:43:13

只能访问较低的字节。因此,为了能够将上字节复制到其他地方,必须先将其移动到较低的字节。(上一个下字节在交换后位于上字节,这是一个不重要的副作用。)

还会有其他效率较低的机制来获取较高的字节,例如将寄存器右移8次:

代码语言:javascript
复制
    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位值存储到临时变量中,然后直接访问该变量的两个字节:

代码语言:javascript
复制
    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位访问访问两个端口:

代码语言:javascript
复制
    MOV.W R7, PAOUT
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46147548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档