Assembly “什么是”呢&引用;在'jnz.'或'jmp.'语句中是什么意思?

Assembly “什么是”呢&引用;在'jnz.'或'jmp.'语句中是什么意思?,assembly,x86,gnu-assembler,att,Assembly,X86,Gnu Assembler,Att,我正在阅读一些汇编代码(att sintax、x86代码、GAS),我发现了这条指令jnz.或jmp.,我知道jnz或jmp的意思,但我不知道它在调用jnz.或jmp.时的含义,我没有调试或跟踪的方法,我相信它会转到下一条指令,但我不确定。JMP的语法是-JMP-label。这里,label指定代码将从该点跳转到的标签。在问题中,可被视为标签。它是一个特殊的符号,指的是它正在组合成的当前地址JMP。本质上是一个无限循环,因为代码将无限地跳回自身,直到您得到一个中断 JNZ语句是一个条件跳转语句,

我正在阅读一些汇编代码(att sintax、x86代码、GAS),我发现了这条指令
jnz.
jmp.
,我知道jnz或jmp的意思,但我不知道它在调用
jnz.
jmp.
时的含义,我没有调试或跟踪的方法,我相信它会转到下一条指令,但我不确定。

JMP的语法是-
JMP-label
。这里,label指定代码将从该点跳转到的标签。在问题中,
可被视为
标签
。它是一个特殊的符号,指的是它正在组合成的当前地址<代码>JMP。本质上是一个无限循环,因为代码将无限地跳回自身,直到您得到一个中断

JNZ
语句是一个条件跳转语句,当未设置零标志(
Z=0
)时,它将充当
JMP
)。如果设置了zero标志,程序将跳过跳转,直接转到下一行代码

因此,如果
Z=0
(未设置零标志),并且如果
Z=1
,则可以将
JNZ.
视为移动到下一行,然后继续无限循环,直到
Z
标志复位或得到中断


希望这能解决您的问题。

JMP的语法是-
JMP-label
。这里,label指定代码将从该点跳转到的标签。在问题中,
可被视为
标签
。它是一个特殊的符号,指的是它正在组合成的当前地址<代码>JMP。本质上是一个无限循环,因为代码将无限地跳回自身,直到您得到一个中断

JNZ
语句是一个条件跳转语句,当未设置零标志(
Z=0
)时,它将充当
JMP
)。如果设置了zero标志,程序将跳过跳转,直接转到下一行代码

因此,如果
Z=0
(未设置零标志),并且如果
Z=1
,则可以将
JNZ.
视为移动到下一行,然后继续无限循环,直到
Z
标志复位或得到中断

希望这能解决您的问题。

特殊符号
表示as正在汇编到的当前地址

在代码上下文中,
是当前指令的地址。所以
jmp.
跳回自身;这是一个无限循环<代码>jnz。如果未设置零标志,将跳回自身。由于跳转不会影响零标志,因此,如果未设置零标志,则第一次执行此指令的效果将是永远循环,如果设置了,则继续执行下一条指令。

特殊符号
表示as正在汇编到的当前地址


在代码上下文中,
是当前指令的地址。所以
jmp.
跳回自身;这是一个无限循环<代码>jnz。如果未设置零标志,将跳回自身。由于跳转不影响零标志,如果未设置零标志,第一次执行此指令的效果将是永远循环,如果设置了,则继续执行下一条指令。

真正的问题是,在这个时代,为什么会有人这样做?@SevaAlekseyev:我想是为了等待玩具项目或没有电源管理的微控制器的中断。或者在引导扇区独立程序的末尾。(不过最好在循环中使用
hlt
)标签上写着x86,hlt更有意义。@SevaAlekseyev:
hlt
对于低强度的方法很好,但它仍然只是C0睡眠或类似的东西。您需要
monitor
/
mwait
在深度睡眠中节省更多电量。(但两者都可以在模拟器中运行。)真正的问题是,在这个时代,为什么会有人这样做?@SevaAlekseyev:我想,等待玩具项目或没有电源管理的微控制器的中断。或者在引导扇区独立程序的末尾。(不过最好在循环中使用
hlt
)标签上写着x86,hlt更有意义。@SevaAlekseyev:
hlt
对于低强度的方法很好,但它仍然只是C0睡眠或类似的东西。您需要
monitor
/
mwait
在深度睡眠中节省更多电量。(但两者都可以在模拟器中运行。)我没有调试或跟踪的方法。您至少可以组装并查看机器代码/拆解。但实际上,无法调试是您首先需要解决的问题。你将能够自己解决更多的问题,而无需询问他人并等待答案。您有一个web浏览器,也有一个选项。顺便说一句,另一种使用
的方法显示在“我没有调试或跟踪的方法”。您至少可以组装并查看机器代码/拆解。但实际上,无法调试是您首先需要解决的问题。你将能够自己解决更多的问题,而无需询问他人并等待答案。您有一个web浏览器,也有一个选项。顺便说一句,另一种使用
的方法如中所示