gpt4 book ai didi

assembly - 是否有任何理由使用 MOVS/CMPS/STOS/SCAS 而不使用重复前缀?

转载 作者:行者123 更新时间:2023-12-03 06:27:48 25 4
gpt4 key购买 nike

x86 架构允许使用带或不带重复前缀的字符串指令。但如果没有重复前缀,他们似乎不会做任何有趣的事情。例如,没有 REP 的 MOVS 可以用简单的 MOV 替换。

是否有充分理由使用 MOVS(以及 STOS、SCAS、CMPS)而不使用 REP?或者这只是 x86 指令集的无用特性?

最佳答案

是的。不一定是故意的,但您可以使用它们进行某种优化。

例如,使用 movs 比使用 movs 更快(假设 rsi、rsi 指向正确的位置)

mov rax,[whatever1]
mov [whatever2],rax

对于其余的,我目前还不确定,但我想可以查找执行时间。递增/递减 rsi, rdi 实际上会产生副作用。

此外,在低级模式下打印 C 样式字符串(无格式或特殊字符;直接视频内存访问)如下:

    ; ...
_load_char:
lodsb
or al,al
jz _end_of_string
stosw
jmp _load_char
_end_of_string:
; ...

这里您需要检查加载的每个单个字符并确定是否到达字符串末尾,因此您不能使用rep。尽管有人可能会认为 repz movsb 在这里不起作用,因为视频内存中的两个连续字节之一是特定字符的属性字节。在本例中,这是一个预期的功能。

关于assembly - 是否有任何理由使用 MOVS/CMPS/STOS/SCAS 而不使用重复前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26513117/

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