- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我在 x86 中有以下说明
add dh, dl ; These are both unsigned integers.
jb loc_123456
jb
在此上下文中表示什么?一般来说,它的意思是“如果低于则跳转”,但我不确定这在这种情况下意味着什么。
最佳答案
根据 Intel's Software Developer's Manual,“JB”代表“如果低于则跳转”
5.1.7 Control Transfer Instructions The control transfer instructions provide jump, conditional jump, loop, and call and return operations to control program flow.
- JE/JZ Jump if equal/Jump if zero
- JNE/JNZ Jump if not equal/Jump if not zero
- JA/JNBE Jump if above/Jump if not below or equal
- JAE/JNB Jump if above or equal/Jump if not below
- JB/JNAE Jump if below/Jump if not above or equal
- JBE/JNA Jump if below or equal/Jump if not above
- JG/JNLE Jump if greater/Jump if not less or equal
- JGE/JNL Jump if greater or equal/Jump if not less
- JL/JNGE Jump if less/Jump if not greater or equal
- JLE/JNG Jump if less or equal/Jump if not greater
- JC Jump if carry
- JNC Jump if not carry
- JO Jump if overflow
- JNO Jump if not overflow
- JS Jump if sign (negative)
- JNS Jump if not sign (non-negative)
- JPO/JNP Jump if parity odd/Jump if not parity
- JPE/JP Jump if parity even/Jump if parity
x86 条件分支仅识别 8 种类型的条件(及其逆条件,因此总共 16 种)。使用哪种助记符(同义词)取决于具体情况,通常您会使用更有意义的助记符。如果反汇编代码,那么反汇编程序可能不够智能,无法选择最有意义的选择。请注意,在上面的列表中,英特尔列出了 18 个条件跳转,而不是 16 个,这是因为
Here's a convenient table,同义词分组在一起。
JB通常用在“CMP”之后,类似这样
cmp dh,dl
jb loc_123456 ; jump if DH is below DL
如果设置了进位标志,则“JB”分支。如前所述,您还可以使用 JNAE“如果不高于或等于则跳转”执行相同的条件分支
cmp dh,dl
jnae loc_123456 ; jump if DH is not above or equal to DL
或者用“JC”
cmp dh,dl
jc loc_123456 ; jump if there was a carry (borrow) when subtracting DL from DH
在您的情况下,使用“JC”可能是更好的选择,如果进位设置则跳转
add dh, dl ; These are both unsigned integers.
jc loc_123456 ; Jump if carry set
将条件分支视为测试前一条指令的结果是很方便的 - 然而它在 x86 架构中的定义方式 EFLAGS 寄存器是保存结果条件代码的“中间人”。某些指令(通常是算术、逻辑、比较)会更新 EFLAGS 寄存器来指示运算结果,而条件分支指令又使用 EFLAGS 寄存器来确定是否进行分支。
关于指令计算哪些 EFLAGS 位有一些晦涩的规则,有时无论操作数如何,总是设置为 1 或 0,对于其他指令,某些 EFLAGS 位未定义,并且某些指令保留某些 EFLAGS 位(不被操作说明)。例如,INC 和DEC 指令将进位标志的内容保留在EFLAGS 中。循环指令更新进位和溢出标志并保留其他标志,如果计数大于 1,则循环后溢出标志未定义...等等。
这里有一个人为的例子来说明这一点。在此示例中,条件分支正在测试在两个不同的 8 位寄存器上运行的两条不同指令的结果。
rol dl,1
inc dh
jnbe loc_123456
ROL 循环指令将 DL 左循环一位,并将 EFLAGS 进位标志设置为循环的最后一位。 INC 指令将 DH 加 1,保留 EFLAGS 进位标志,设置 EFLAG 中的其他算术标志。 JNBE 是“如果不低于或等于则跳转”,如果 EFLAGS 进位标志为零且 EFLAGS 零标志清零,则进行分支。如果在递增 DH 后 DH 寄存器不为零,则零标志被清除(这是正确的,除非 DH 为 0xFF 并且在递增后将其包装为 0x00)。进位标志设置为与左移的最后一位相匹配,换句话说,左移后 DL 的最低有效位(之前是最高有效位)。如果您将 JNBE 视为“如果不低于或等于则跳转”,则 JNBE 没什么意义,但如果您将其视为简单地测试进位标志和零标志是否都为零,则可能有意义。
关于assembly - 如果前面有 "jb"命令,那么 "add"表示什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23370521/
Byte byte1=10; Short short1=20; Integer integer=30; 在上面的代码中自动装箱成功在这里查看下面的代码,我正在明确地进行 casitng,因为它默认将
这里有几个相关的问题。 根据标题,如果我们将变量类型指定为 long 或 float、double,为什么它是一个要求?编译器不会在编译时评估变量的类型吗? Java 将所有整型文字视为 int -
我最近一直在使用一些 bash 脚本,并且一直在浏览手册页。根据我收集到的信息,$(( )) 是否表示 expr 而 [ ] 是否表示 test? 对于 $(( )): echo $(( 5 + 3
我有 UILabel,其中显示了 int 值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现? 最佳答案 这个怎么样? int myNum =
我正在自学 verilog 并尝试编写失败模型。我在指定部分遇到了以下 ck->q 延迟弧的建模,但无法理解它到底是做什么的。 (posege CK => (Q : 1'b1))=(0, 0); 谁能
考虑这样一个句子: John Smith travelled to Washington. 在美好的一天,名称标记者会将“约翰·史密斯”识别为一个人,将“华盛顿”识别为一个地方。然而,如果没有其他证据
有没有办法通过某种元处理器或预处理器告诉 JavaScript 单词 AND 等于 && 而单词 OR 等于 ||和 <> 等同于 !===? 也许将 THEN 等同于 { 结束到 不要! 最佳答案
我正在处理一个非常大的图,它有 5 亿个节点,节点的平均度为 100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个 vector ,如下所示 // V could be 100 m
我想使用 Python 表示一组整数范围,其中可以动态修改该集合并测试其是否包含在内。具体来说,我想将其应用于文件中的地址范围或行号。 我可以定义我关心的地址范围: 200 - 400 450 -
>>> x = -4 >>> print("{} {:b}".format(x, x)) -4 -100 >>> mask = 0xFFFFFFFF >>> print("{} {:b}".forma
虽然代码不多,但简单明了 复制代码 代码如下: preg_match('/^(?!string)/', 'aa') === true 这个用来验证一个字符串是否是非'string'开头的,
我正在尝试创建一些 SQLAlchemy 模型,并且正在努力解决如何将 timedelta 正确应用于特定列的问题。 timedelta(以天为单位指定)作为整数存储在单独的表 (Shifts) 中,
“Range: bytes=0-” header 是什么意思?是整个文件吗?我尝试发回 0 个字节但没有成功,当我发送整个文件时它可以正常工作,但我在流式上下文中不止一次收到此请求,它看起来不正确。
要创建时间序列的 SAX 表示,您首先需要计算数据的 PAA(分段聚合近似),然后将答案映射到符号表。但是,在计算 PAA 之前,您需要对数据进行标准化。 我正在对数据进行标准化,但我不知道之后如何计
假设我有一个 RESTful、超文本驱动的服务来模拟冰淇淋店。为了帮助更好地管理我的商店,我希望能够显示每日报告,列出所售每种冰淇淋的数量和美元值(value)。 这种报告功能似乎可以作为名为 Dai
我需要以 RDF 格式表示句子。 换句话说,“约翰喜欢可乐”将自动表示为: Subject : John Predicate : Likes Object : Coke 有谁知道我应该从哪里开始?是否
我即将编写一个解析器,将文本文件逐行读取到不同类型的结构中,并将这些结构提供给回调(观察者或访问者 - 尚不确定)。 文本文件包含 MT-940 数据 - SWIFT 银行对帐单。 这些行由一个指定类
我主要是一名 C++ 开发人员,但我经常编写 Python 脚本。我目前正在为游戏编写骰子模拟器,但我不确定在 Python 中解决我的问题的最佳方法。 一共有三种玩家技能,每个玩家一强、中一、弱一。
在过去的 5 个小时里,我一直在寻找答案。尽管我找到了很多答案,但它们并没有以任何方式提供帮助。 我基本上要寻找的是任何 32 位无符号整数的按位异或运算符的数学、算术唯一表示。 尽管这听起来很简单,
我需要将依赖项存储在 DAG 中。 (我们正在细粒度地规划新的学校类(class)) 我们正在使用 rails 3 注意事项 宽于深 很大 我估计每个节点有 5-10 个链接。随着系统的增长,这将增加
我是一名优秀的程序员,十分优秀!