使用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
答案 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以在汇编期间展开结构化代码。