【发布时间】:2020-12-18 08:54:07
【问题描述】:
我正在尝试检查汇编中的偶数奇数,使用 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;
【问题讨论】:
-
lene 是 9,所以 evenn 打印“偶数/奇数”。然后在evenn之后,没有跳转到outprog,所以它再次打印“Odd”。
-
@pri 我认为这应该是一个答案而不是评论。
-
start 中连续的三个分支表明您应该了解控制流的工作原理。所有三个都应该替换为一个:
jnz oddd. -
@luserdroog:是的,但幸运的是它已经是In NASM labels next to each other in memory are causing printing issues 上的答案,所以没有人需要在这里重复。
-
感谢@prl 对控制流的澄清,我认为它们与主程序是分开的
标签: if-statement assembly x86 nasm