loops - 汇编语言 : difference between ja and jg?

标签 loops assembly x86

我无法理解汇编语言的 ja 和 jg 之间的区别。我有一段代码:

cmp  dh, dl
j--  hit

我询问哪个条件跳转命中(替换 j-- 命中)将采用 DX = 0680 的十六进制值。

这会使 dl = 06 和 dh = 80,所以在比较时,80 > 06。我知道 jg 适合这个,因为我们可以直接比较结果,但如果 ja 适合(或者在这种情况下,不适合)这个代码?

最佳答案

  1. 如果dx为0x0680,则dh为0x06,dl为0x80。
  2. 0x80 在无符号模式下被解释为 128,在有符号模式下被解释为 -128。
  3. 因此,您必须使用jg,因为6 > -128,但6 < 128。jg 进行符号比较; ja 进行无符号比较。

关于loops - 汇编语言 : difference between ja and jg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7510381/

相关文章:

linux - exec* 的 argv 可以在多个地方包含 0 值吗?

c++ - 每次循环时都会创建相同的随机数。

assembly - 为什么CMP(比较)有时会在8086组件中设置进位标志?

assembly - 如何使用NASM访问系统时间?

c - 在执行procprob时,b可以是任何数据类型吗?

c - x86 汇编指令执行计数

php - AJAX、PHP 和 MYSQL - 限制数据选择和偏移

r - 在 R 中的 if 语句中使用 for 循环

c++ - 无故循环退出

c++ - 为什么具有顺序一致性的std::atomic存储区使用XCHG?