1

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

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

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

PRINT P

但是我认为我的分支是错误的,因为即使在 CMP 发现 P < 12 的情况之后,如果我的代码没有第一次停止,程序仍然会通过 IF 分支运行。我在这里遗漏了什么,或者这是一种普遍接受的方式这样做?

这是我的汇编代码:

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
4

2 回答 2

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
于 2014-10-12T23:44:54.387 回答
0

EASy68K 支持结构化组装。

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

ELSE

ENDI

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

于 2016-07-07T11:46:31.757 回答