所以我正在学习HCS12微控制器的组装。
我需要评估表达式-45+6+(13*2)-(7*4)-65+33
。
表达式需要按照标准操作顺序从左到右进行评估。每个操作都需要对字节值执行,我只能使用加法,减法和移位。
我可以评估-45+6+(13*2)-(7*4)
罚款,但当我尝试从-41减去65时出现问题。我理解发生了什么,我只是不知道如何解决它。
编辑:我应该更清楚,我知道发生了什么(值被截断)。我只是不知道为什么。
edit2 :解决了!行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
;********************************************************************
答案 0 :(得分:1)
(自答问题。)
根据评论:
想出来!事实证明,在加载常量时,您不需要
#
符号。因此ldab #Term5
实际应该是ldab Term5
。 - dfryer1193 2013年9月3日16:32