if-statement - x86 使用 .IF 、 .ELSE 和 .ELSEIF 比较两个数字
问题描述
我得到了两个 DWORD 值,并将使用.IF
,比较它们.ELSE
,.ELSEIF
以查看哪个数字更大或它们是否相等。例如,屏幕上调用了两个提示,分别是“输入数字 1”和“输入数字 2”。数字 1 和数字 2 使用eax
for num1和ecx
for num2存储到单独的寄存器中。如果eax
和ecx
相等,则调用相等提示。如果他们不是,那么这就是.ELSEIF
进来的地方。eax
被比较,ecx
反之亦然。
唯一的问题是第二个值总是大于第一个值,如果它们不相等的话。
include asmlib.inc
.data
Prompt BYTE " Enter a number ", 0 ;Type number 1
Prompt2 BYTE " Enter another number ", 0 ;Type number 2
Large BYTE " Is larger ", 0 ;Larger number output
Equal BYTE " Is equal", 0 ;Numbers are equal output
num1 DWORD ? ;Number 1 is num1
num2 DWORD ? ;Number 2 is num2
.code
main PROC
mov edx, OFFSET Prompt ;Enter first number
call writeLine
call readInt
mov num1, eax
endl
mov edx, OFFSET Prompt2 ;Enter second num
call writeLine
call readInt
mov num2, ecx
endl
.IF eax == ecx
mov edx, OFFSET Equal ;display Equal output
call writeString ;display line
.ENDIF
.IF ecx > eax && eax < ecx
mov ecx, num2
call writeInt
mov edx, OFFSET Large
call writeString
.ELSEIF ecx < eax && eax > ecx
mov eax, num1
call writeInt
mov edx, OFFSET Large
call writeString
.ENDIF
exit
main ENDP
end main
解决方案
mov edx, OFFSET Prompt2 ;Enter second num call writeLine call readInt mov num2, ecx
由于检索程序输入时出错,所有.IF
、.ELSEIF
、.ELSE
或可以做的事情都无效。readInt返回寄存器中的整数,因此您的指令应为.ENDIF
EAX
mov num2, ecx
mov num2, eax
唯一的问题是第二个值总是大于第一个值,如果它们不相等的话。
如果ecx > eax
显示“更大”,并且ecx < eax
还显示“更大”。你期待什么?
- 在您的第一
.IF eax == ecx
条指令之前,您应该EAX
从num1和ECX
从num2加载。 - 如果数字恰好相等,您不想使用
.ENDIF
,因为它会让您失败并且另外(并且不必要地)执行“大于”的比较。
mov eax, num1
mov ecx, num2
.IF eax == ecx
mov edx, OFFSET Equal
call writeString
.ELSEIF eax > ecx
call writeInt
mov edx, OFFSET Large
call writeString
mov eax, ecx ; ecx = num2
call writeInt
.ENDIF
推荐阅读
- go - Cobra CMD 没有完全执行
- typescript - 用打字稿开玩笑,不拿起 __mocks__
- jenkins - 基于变量的Jenkins Pipeline阶段跳过
- php - 如何删除laravel中的多个ID?
- javascript - 如何在使用 javascript 单击 URL 时为其添加值
- javascript - React Js - 'styles' 未定义 no-undef 错误
- objective-c - 屏幕锁定时计时器停止
- java - 当另一个进程同时写入同一个表时,Java ResultSet 的行为是什么?
- regex - 用于在 bash 中构建 gradle 文件的正则表达式
- slice - Myhdl:将位片分配给带符号的变量失败并出现负值