0

所以我正在学习 HCS12 微控制器的组装。
我需要评估表达式-45+6+(13*2)-(7*4)-65+33。表达式需要按照标准的操作顺序从左到右进行计算。每个操作都需要对字节值进行,我只能使用加减法和移位。

我可以很好地评估-45+6+(13*2)-(7*4),但是当我尝试从 -41 中减去 65 时会出现问题。我明白发生了什么,我只是不知道如何解决它。

编辑:我应该更清楚,我知道发生了什么(值被截断)。我只是不知道为什么。

编辑2:解决了!该行ldab #Term5应该是ldab Term5(与下一行相同)

这是我正在使用的代码,供参考:

; local defines
            TERM3:  EQU 13
            TERM4:  EQU 07
;********************************************************************
MyConst:    SECTION
; Place constant data here
ConstData:  DC.B  -45,16
Term5:      DC.B  65
Term6:      DC.B  33
;********************************************************************
MyCode:     SECTION
main:
Entry:
            lds #__SEG_END_SSTACK     ; initialize the stack pointer
            sei                       ; disable interrupts
; Program code goes here
main_loop:
            nop
            ldx   #ConstData          ; load -45 and 16 into x
            ldaa  0,x                 ; load -45 from x to a
            ldab  1,x                 ; load 16 from x to b
            aba                       ; add b to a (a=(-39))
            ldab  #TERM3              ; load 13 into b
            aslb                      ; shift b left (multiply by 2)
            aba                       ; add b to a (a=(-13))
            ldab  #TERM4              ; load 7 into b
            aslb                      ; shift b left (multiply by 2)
            asl                       ; shift b left (multiply by 2)
            sba                       ; subtract b from a (a=(-41))
            ldab  #Term5              ; Issues start here.
            subb  #Term6
            aba
            nop
            END
;********************************************************************
4

1 回答 1

1

(自我回答的问题。)

根据评论:

弄清楚了!事实证明,在加载常量时,您不需要#符号。所以ldab #Term5实际上应该是ldab Term5。– dfryer1193 2013 年 9 月 3 日 16:32

于 2016-04-29T03:10:39.240 回答