assembly - ROL 和 OF 的行为不一致
问题描述
手册指出
OF 标志仅针对 1 位循环定义;在所有其他情况下它是未定义的(仅 RCL 和 RCR 指令除外:零位循环不执行任何操作,即不影响标志)
这也显示在下面的伪代码中
IF (COUNT & COUNTMASK) = 1
THEN OF ← MSB(DEST) XOR CF;
ELSE OF is undefined;
FI;
但是,在实践中尝试时这是不同的。这是有问题的代码
mov rax, 0x4444444433332211
mov cl, 0x44
rol rax, cl
然而,溢出标志似乎被设置了,
这种行为不是特定于 0x44 也不是 cl 作为源,它会发生在任何非零的情况下(前提是首先设置 OF 的原因)。
解决方案
当一个标志被称为“未定义”时,这意味着它的值没有以定义的方式更新,因此不能使用。
它实际上可能由于某些特定于实现的原因而改变(在您的情况下它已设置),但您不能假设这是可靠或可移植的行为。
推荐阅读
- meteor - 使用 findone 自动运行跟踪器
- android - 滚动以本机反应结束时加载更多信息
- php - max_execution_time - php.ini、phpinfo 和脚本错误中的 3 个不同值
- android - 添加文本时,Android 6.0 上的 PhotoEditor SDK 崩溃
- ruby-on-rails - 为数据库适配器指定了“postgresql”,但未加载 gem
- java - 澄清 lambda 中的 `this` 关键字
- javascript - 停用按钮,直到检查完所有 javascript 条件
- ios - 用户点击 SearchBar 时如何使 TableView 不透明
- django - 将 ReactJS SPA 与 Django 集成
- arrays - 无法将“__NSSingleEntryDictionaryI”(0x10d249f78)类型的值转换为“NSArray”