汇编语言中如何用AND判断条件?
How to use AND to check condition in Assembly language?
我正在尝试检查汇编中的偶数,使用 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;
思考代码执行路径。
我正在尝试检查汇编中的偶数,使用 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;
思考代码执行路径。