据我了解jmp
,会进行无条件跳转,而ja
如果值无符号则跳转。我做对了吗?
一个例子将不胜感激。
你是jmp
对的,无条件跳转。
但是,您的描述ja
不正确。它根据最近cmp
操作的结果进行条件跳转。如果第一个操作数大于第二个操作数,它会跳转,使用无符号比较而不是有符号比较。jg
将使用有符号比较。
ja
表示“如果未设置进位标志且未设置零标志则跳转”。
该cmp
指令实际上与该sub
指令相同(即,它减去它的参数),除了不保存结果而只更新条件标志。
如果我们比较无符号整数,则减法(a-b)
设置进位标志如果b
大于a
,零标志如果b
等于a
,因此如果这两个标志都没有设置,则它遵循a
大于b
。
如果我们想要比较有符号数,我们必须将符号标志(即结果的最高位)与溢出标志进行比较,并检查零标志是否未设置,这就是jg
指令所做的。
因此,cmp
指令不关心参数是有符号还是无符号。这种区别仅在于以后如何解释标志。