if-statement - 如何使用 AND 来检查汇编语言中的条件?
问题描述
我正在尝试使用 32 位 NASM 在汇编中检查偶数奇数,该代码对于奇数工作正常,但对于偶数它给出输出
Even
Odd
Odd
我的代码是,
section .data
even db "Even", 0xa;
odd db "Odd", 0xa;
lene equ $-even;
leno equ $-odd;
section .text
global _start;
_start:
mov ax, 0x4;
and ax, 1;
jz evenn;
jnz oddd;
jmp outprog;
evenn:
mov eax, 4;
mov ebx, 1;
mov ecx, even;
mov edx, lene;
int 0x80;
oddd:
mov eax, 4;
mov ebx, 1;
mov ecx, odd;
mov edx, leno;
int 0x80;
outprog:
mov eax, 1;
int 0x80;
解决方案
void fun ( int x )
{
int y;
y=x&1;
if(y==0)
{
show_even();
}
else
{
show_odd();
}
}
本质上是您正在尝试做的事情,并且您从正确的方向开始,但是在 show_odd 或 show_even 之后,您需要采用单独的路径到函数的末尾,您不想通过第二条路径
您的偶数路径正在通过此代码:
evenn:
mov eax, 4;
mov ebx, 1;
mov ecx, even;
mov edx, lene;
int 0x80;
oddd:
mov eax, 4;
mov ebx, 1;
mov ecx, odd;
mov edx, leno;
int 0x80;
打印 Even 然后落入打印 Odd 的代码中。您想在打印 Even 后分支到 outprog。
上面的 C 代码作为模型而不是这个:
void fun ( int x )
{
int y;
y=x&1;
if(y==0)
{
show_even();
}
show_odd();
}
无论如何,总是打印奇数。
您可以将其优化为一条指令。
jz evenn;
jnz oddd;
jmp outprog;
对比
jnz oddd;
仔细考虑代码执行路径。
推荐阅读
- javascript - 使用 mat-table 对嵌套属性进行排序
- java - java.io.IOException:重新抛出为 IOE
- cassandra-3.0 - Cassandra 问题 v3.11.3 ... 从 table1 中选择 count(*)
- node.js - Azure 上的 Nodejs:触发长服务器计算并避免超时
- javascript - Jquery Show / Hide Toggle Div Selected Items
- android - 在 Google Pay 中使用测试信用卡时请求失败
- xml - 无法将文件的 XML 字符串发送到 get rest 服务
- android - 圆角 MaterialCardView 的共享元素过渡
- c# - 用户或角色授权检查
- uwp - 应用程序不允许 Xbox Live 创意者计划