Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly jmp和ja之间的区别是什么?_Assembly_X86 - Fatal编程技术网

Assembly jmp和ja之间的区别是什么?

Assembly jmp和ja之间的区别是什么?,assembly,x86,Assembly,X86,根据我的理解,jmp执行无条件跳转,而ja在值无符号时跳转。我说得对吗 请举个例子。您认为jmp执行无条件跳转是正确的 不过,您对ja的描述不正确。它根据最近的cmp操作的结果执行条件跳转。如果第一个操作数大于第二个操作数,则使用无符号比较而不是有符号比较,它将跳转jg将使用有符号比较。ja表示“未设置进位标志和未设置零标志时跳转” cmp指令实际上与sub指令相同(即,它减去其参数),只是结果不保存,而只更新条件标志 如果我们比较无符号整数,减去(a-b)会在b大于a时设置进位标志,如果b等于

根据我的理解,
jmp
执行无条件跳转,而
ja
在值无符号时跳转。我说得对吗


请举个例子。

您认为
jmp
执行无条件跳转是正确的

不过,您对
ja
的描述不正确。它根据最近的
cmp
操作的结果执行条件跳转。如果第一个操作数大于第二个操作数,则使用无符号比较而不是有符号比较,它将跳转
jg
将使用有符号比较。

ja
表示“未设置进位标志和未设置零标志时跳转”

cmp
指令实际上与
sub
指令相同(即,它减去其参数),只是结果不保存,而只更新条件标志

如果我们比较无符号整数,减去
(a-b)
会在
b
大于
a
时设置进位标志,如果
b
等于
a
,则设置零标志,因此如果未设置这两个标志,则
a
大于
b

如果我们想要比较有符号的数字,我们必须将符号标志(即结果的最高位)与溢出标志进行比较,并检查零标志是否未设置,这就是
jg
指令的作用

因此,
cmp
指令不关心参数是有符号的还是无符号的。这种区别仅在于以后如何解释标志


可能有帮助
ja
根据条件标志跳转。条件标志由
cmp
指令设置,但也由各种其他指令设置,包括简单的算术指令,如
add