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

0

EASY68K は構造化アセンブリをサポートしています。

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

ELSE

ENDI

構造化コードの実装に使用される比較命令と分岐命令を表示する場合は、アセンブリ中に構造化コードを展開するオプション SEX を追加します。

于 2016-07-07T11:46:31.757 に答える