如何解决如何使用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,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,odd;
mov edx,leno;
int 0x80;
打印偶数的属于打印奇数的代码。您要在打印偶数后分支到outprog。
上面的C代码代替了此模型:
void fun ( int x )
{
int y;
y=x&1;
if(y==0)
{
show_even();
}
show_odd();
}
无论什么情况,总是打印奇数。
您可以将其优化为一条指令。
jz evenn;
jnz oddd;
jmp outprog;
vs
jnz oddd;
仔细研究代码执行路径。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。