使用Easy68K为类编写第一个汇编语言程序。
我正在使用if-else分支来复制代码:
IF (P > 12)
P = P * 8 + 3
ELSE
P = P - Q
PRINT P但是我认为我的分支错了,因为如果代码没有第一次停止,程序就会运行在IF分支中,即使CMP发现了一个P< 12的情况。我是在这里遗漏了什么,还是这是一种普遍接受的方法?
这是我的汇编代码:
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发布于 2014-10-12 23:44:54
要执行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发布于 2016-07-07 11:46:31
EASy68K支持结构化程序集。
OPT SEX
IF.L P <GT> #12 THEN
ELSE
ENDI如果希望查看用于实现结构化代码的比较和分支指令,请添加选项性以在程序集期间展开结构化代码。
https://stackoverflow.com/questions/26331000
复制相似问题