gpt4 book ai didi

assembly - 以下汇编命令有什么好处吗?

转载 作者:行者123 更新时间:2023-12-04 22:47:33 24 4
gpt4 key购买 nike

在我们系统的编程类(class)中,我们正在学习汇编语言。在大多数示例程序中,我们的教授。曾在类里面展示过;他正在使用:

XOR CX, CX

代替
MOV CX, 0

或者
OR AX, AX
JNE SOME_LABEL

代替
CMP AX, 0
JNE SOME_LABEL

或者
AND AL, 0FH        ; To convert input ASCII value to numeral
; The value in AL has already been checked to lie b/w '0' and '9'

代替
SUB AL, '0'

我的问题如下,使用 AND 时是否有更好的性能?/ ORXOR而不是替代(易于理解/阅读)方法?

由于这些程序通常在理论课时向我们展示,因此大多数类(class)无法实际口头评估它们。为什么要花 40 分钟的讲座来解释这些琐碎的陈述?

最佳答案

XOR CX, CX  ;0x31 0xC9

仅使用两个字节:操作码 0x31和存储源和目标寄存器的 ModR/M 字节(在这种情况下,这两个是相同的)。
MOV CX, 0  ;0xB8 0x08 0x00 0x00

需要更多字节:操作码 0xB8 , ModR/M 用于目的地(在本例中为 CX)和两个字节立即数填充零。
从时钟角度来看没有区别(都只需要一个时钟),但是 mov需要 4 个字节,而 xor只使用两个。
OR AX, AX  ;0x0A 0xC0

再次仅使用操作码字节和 ModRM 字节,而
CMP AX, 0  ;0x3D 0x00 0x00 <-- but usually 0x3B ModRM 0x00 0x00

使用三个或四个字节。在这种情况下,它使用三个字节(操作码 0x3D,立即字表示零),因为 x86 对累加器寄存器的某些操作具有特殊的操作码,但通常它会使用四个字节(操作码、ModR/M、字立即数)。在谈论 CPU 时钟时也是如此。

执行时处理器没有区别
AND AL, 0x0F  ;0x24 0x0F  <-- again special opcode for Accumulator


SUB AL, '0'  ;0x2D 0x30 0x00  <-- again special opcode for Accumulator

(只有一个字节的差异),但是当你减去 ASCII 零时,你不能确定不会剩下大于 9 的值。在蓄能器中。
也安定套 OFCF为零,而 sub根据结果​​设置它们 AND ing 可能更安全,但我个人认为这种用法取决于上下文。

关于assembly - 以下汇编命令有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com