0

私はHCS12マイクロコントローラのアセンブリを学んでいます。
式を評価する必要があります-45+6+(13*2)-(7*4)-65+33。式は、標準的な操作順序に従って、左から右に評価する必要があります。各演算はバイト値に対して実行する必要があり、使用できるのは加算、減算、およびシフトのみです。

問題なく評価できます-45+6+(13*2)-(7*4)が、-41 から 65 を引こうとすると問題が発生します。何が起こっているのかは理解していますが、それを回避する方法がわかりません。

編集:もっと明確にする必要があります。何が起こっているのか知っています(値が切り捨てられています)。理由はわかりません。

edit2:解決しました!行ldab #Term5ldab 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