Algorithm 编辑Easy68k(汇编)程序以进行减法而不是加法

Algorithm 编辑Easy68k(汇编)程序以进行减法而不是加法,algorithm,assembly,motorola,68000,easy68k,Algorithm,Assembly,Motorola,68000,Easy68k,好了,给你们。在您之前,我有一个执行此算法的程序: 如果X>12,则X=2*X+4,否则X=X+Y,输出X 问题是,我需要它来执行此操作: 如果X>12,则X=2*X+4,否则X=X-13,输出X 我该如何使其减而不是加 ORG $1000 START: LEA PROMPT, A1 MOVE.B #14, D0 ; display string TRAP #15 MOVE.B #4, D0 ;

好了,给你们。在您之前,我有一个执行此算法的程序: 如果X>12,则X=2*X+4,否则X=X+Y,输出X

问题是,我需要它来执行此操作: 如果X>12,则X=2*X+4,否则X=X-13,输出X

我该如何使其减而不是加

        ORG $1000
START:  LEA    PROMPT, A1
        MOVE.B #14, D0       ; display string
        TRAP   #15
        MOVE.B #4, D0        ; read from keyboard
        TRAP   #15
        MOVE   D1, D3        ; copy X
        LEA    STTY, A1
        MOVE.B #14, D0       ; display string
        TRAP   #15
        CMP    #12, D3       ; X > 12 ?
        BGT    MULTADD       ; branch if yes
        CMP    #12, D3       ; why compare again??
        BRA    ADDY

MULTADD 
        LEA    XGT, A1
        MOVE.B #14, D0       ; display string
        TRAP   #15
        LEA    TWOXP4, A1
        MOVE.B #14, D0       ; display string
        TRAP   #15
        MULU   #2, D3        ; 2*X
        ADD    #4, D3        ; +4
        MOVE   D3, D1        ; copy to D1
        MOVE.B #3, D0        ; Display decimal signed D1.L in smallest field
        TRAP   #15
        BRA    FIN

ADDY    LEA    XLT, A1
        MOVE.B #14, D0       ; display string
        TRAP   #15
        LEA     XPY, A1
        MOVE.B #14, D0       ; display string
        TRAP    #15

        ADD     Y, D3        ; X = X+Y
        MOVE    D3, D1     
        MOVE.B  #3, D0       ; Display decimal signed D1.L in smallest field
        TRAP    #15
        BRA     FIN           ; not needed
FIN     MOVE.B  #9,D0         ; terminate program
        TRAP    #15

* Variables and Strings
PROMPT   DC.B ';Enter X: ';, 0
STTY     DC.B ';Y = 4';, CR, LF, 0
XGT      DC.B 'X > 12';, CR, LF, 0
XLT      DC.B 'X != 12';, CR, LF, 0
TWOXP4   DC.B 2 * X + 4 = ';, CR, LF, 0
XPY      DC.B 'X + Y = ';, 0
Y        DC.W 4
CR       EQU $0D  
LF       EQU $0A

END      START

无法测试它,但请尝试替换

ADD Y, D3

小贴士:

使用MOVEQ将一个小数字加载到32位寄存器中 不要用MULU乘以2 使用.B、.W和.L指令作为默认值,通常只有16位
如果您缩进与标签相关的指令,代码的可读性会更好。在每个块之前也留一个空白。我编辑并注释了它
SUB Y, D3
        ORG $1000
START:  LEA    PROMPT, A1
        MOVEQ  #14, D0       ; display string
        TRAP   #15
        MOVEQ  #4, D0        ; read number from keyboard
        TRAP   #15
        MOVE.L D1,D3         ; save X
        LEA    STTY, A1
        MOVEQ  #14, D0       ; display string
        TRAP   #15
        CMP.L  #12, D3       ; X > 12 ?
        BGT    MULTADD       ; branch if yes

ADDY    LEA    XLT, A1
        MOVEQ  #14, D0       ; display string
        TRAP   #15
        LEA    XPY, A1
        MOVEQ  #14, D0       ; display string
        TRAP   #15

        ADD.L   Y, D3        ; X = X+Y, change to SUB.L Y,D3
        MOVE.L  D3, D1     
        MOVEQ   #3, D0       ; Display decimal signed D1.L in smallest field
        TRAP    #15
        BRA     FIN           ; not needed

 MULTADD 
        LEA    XGT, A1
        MOVEQ  #14, D0       ; display string
        TRAP   #15
        LEA    TWOXP4, A1
        MOVEQ  #14, D0       ; display string
        TRAP   #15
        ASL.L  #1, D3        ; 2*X by shifting
        ADDQ.L #4, D3        ; +4
        MOVE.L D3, D1        ; copy to D1
        MOVEQ  #3, D0        ; Display decimal signed D1.L in smallest field
        TRAP   #15

FIN     MOVEQ   #9,D0         ; terminate program
        TRAP    #15

* Variables and Strings
CR       EQU $0D  
LF       EQU $0A

PROMPT   DC.B ';Enter X: ';, 0
STTY     DC.B ';Y = 4';, CR, LF, 0
XGT      DC.B 'X > 12';, CR, LF, 0
XLT      DC.B 'X != 12';, CR, LF, 0
TWOXP4   DC.B 2 * X + 4 = ';, CR, LF, 0
XPY      DC.B 'X + Y = ';, 0
Y        DC.L 13

END      START