汇编中.IF和IF指令的区别是什么? 在文件中.IF:
.IF condition1
statements
[[.ELSEIF condition2
statements]]
[[.ELSE
statements]]
.ENDIF
和IF:
IF expression1
ifstatements
[[ELSEIF expression2
elseifstatements]]
[[ELSE
elsestatements]]
ENDIF
答案 0 :(得分:4)
IF-ELSEIF-ELSE-ENDIF(不带点)是编译时指令。汇编程序将测试条件,并根据结果,只包含结果程序中的一个语句序列。它们与C预处理程序指令#if
,#elif
,#else
和#endif
具有相同的用途。
.IF-.ELSEIF-.ELSE-.ENDIF(带点)是执行时指令。汇编程序将生成比较和跳转指令。它们与if (...) { ... } else if (...) { ... } else { ... }
形式的C语句具有相同的用途。
注意:我不能熟练使用masm,因此这些示例的符号可能会出错。
something EQU 1
somewhere:
mov ax, 42
IF something == 1
xor bx, 10
ELSE
mov bx, 20
ENDIF
add ax, bx
在编译的预处理阶段,编译器将测试IF
和ELSEIF
语句中的条件(不带点),并选择最终会出现在程序中的一个代码块。上面的代码变成了以下内容:
somewhere:
mov ax, 42
xor bx, 10
add ax, bx
另一个例子:
something EQU 1
somewhere:
mov ax, 42
mov dx, something
.IF dx == 1
xor bx, 10
.ELSE
mov bx, 20
.ENDIF
add ax, bx
在编译的预处理阶段,编译器会将.IF
- 语句(带点)转换为汇编指令。上面的代码可能会变成以下内容:
something EQU 1
somewhere:
mov ax, 42
mov dx, 1
cmp dx, 1
jnz else_clause
xor bx, 10
jmp past_endif
else_clause:
mov bx, 20
past_endif:
add ax, bx
在执行时实际检查条件。
答案 1 :(得分:-2)
<强>错误强> “IF-ELSEIF-ELSE-ENDIF(没有点)是编译时指令。汇编程序将测试条件,并根据结果,只包含结果程序中的一个语句序列。它们服务相同用作C预处理程序指令#if,#elif,#else和#endif。
.IF-.ELSEIF-.ELSE-.ENDIF(带点)是执行时指令。汇编程序将生成比较和跳转指令。它们与表单中的C语句具有相同的目的if(...){...} else if(...){...} else {...}。“
<强>真强> .if标记代码段的开头,如果参数(必须是绝对表达式)非零,则该段代码仅被视为正在汇编的源程序的一部分。