私は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
;********************************************************************