Easy68K IF-ELSE分支

时间:2014-10-12 23:18:32

标签: easy68k

使用Easy68K编写我的第一个汇编语言程序。

我使用if-else分支来复制代码:

IF (P > 12)
    P = P * 8 + 3
ELSE
    P = P - Q

PRINT P

但是我认为我的分支是错误的,因为即使在CMP发现P

这是我的汇编代码:

START:  ORG     $1000       ; Program starts at loc $1000

        MOVE    P, D1       ; [D1] <- P
        MOVE    Q, D2       ; [D2] <- Q

* Program code here

        CMP     #12, D1     ; is P > 12?
        BGT     IF          ;
        SUB     D2, D1      ; P = P - Q

        MOVE    #3, D0      ; assign read command
        TRAP    #15         ;
        SIMHALT             ; halt simulator


IF      ASL     #3, D1      ; P = P * 8 
        ADD     #3, D1      ; P = P + 3
ENDIF

        MOVE    #3, D0      ; assign read command
        TRAP    #15         ;
        SIMHALT             ; halt simulator

* Data and Variables

        ORG     $2000       ; Data starts at loc $2000

P       DC.W    5           ;
Q       DC.W    7           ;

        END    START        ; last line of source

2 个答案:

答案 0 :(得分:2)

要做if..else,你需要两次跳跃;一个在开始,一个在第一个块的末尾。

虽然它不影响正确性,但保留源顺序也是常规的,这意味着否定条件。

    MOVE    P, D1       ; [D1] <- P
    MOVE    Q, D2       ; [D2] <- Q

* Program code here

    CMP     #12, D1     ; is P > 12?
    BLE     ELSE        ; P is <= 12

IF
    ASL     #3, D1      ; P = P * 8 
    ADD     #3, D1      ; P = P + 3
    BRA     ENDIF

ELSE
    SUB     D2, D1      ; P = P - Q
ENDIF


    MOVE    #3, D0      ; assign read command
    TRAP    #15         ;
    SIMHALT             ; halt simulator

答案 1 :(得分:0)

EASy68K支持结构化装配。

OPT    SEX
IF.L P <GT> #12 THEN

ELSE

ENDI

如果您希望查看用于实现结构化代码的比较和分支指令,请添加选项SEX以在汇编期间展开结构化代码。