assembly - 为什么即使ebx中的值大于eax中的值,我的代码也会跳转到return1
问题描述
所以这是代码,即使 ebx 中的值大于 eax 中的值,它也总是跳转到 return1
我尝试使用 ret,但它会导致内存冲突。
mov eax, 5
mov edx, 5
mov ebx, 11
add eax, edx
cmp eax, ebx
jg return1
mov eax, 0
return1:
mov eax, 1
我希望输出为“0”,但实际输出为“1”
解决方案
您的代码会覆盖 EAX 寄存器,而忽略所采用的分支。
在 (EAX > EBX) 的情况下,执行的代码将是:
mov eax, 0 // eax = 0
mov eax, 1 // eax = 1
除此以外:
mov eax, 1 // eax = 1
尝试在“return1”标签之前立即插入无条件跳转(跳转)到退出代码,以消除对 EAX 寄存器的覆盖:
mov eax, 5
mov edx, 5
mov ebx, 11
add eax, edx
cmp eax, ebx
jg return1
mov eax, 0
jmp return2
return1:
mov eax, 1
return2:
推荐阅读
- python - 如何加载所有扑克牌的图像?
- reactjs - React Bootstrap 下拉菜单
- java - 在列表上执行投影
- mongodb - ESLint 和 TypeScript 在 MongoDB 脚本文件中抱怨
- typescript - 如何在环回 4 中设置浮点类型
- azure - 使用 Azure DevOps Artifact 时无法在 Build Pipeline 中执行“dotnet tool restore --interactive”
- package-managers - 是否有 pkgsrc 命令来“冻结”所有已安装的软件包?
- python - 如何在sqlite查询中将组中的年份组合为10
- node.js - 为什么我的 ctx.request.files 未定义,而 ctx.request.body 没问题?
- javascript - 在进行 fetch 调用时使用请求对象和不使用它们有什么区别?