换句话说,有没有什么情况下我可能需要这个指令?
从英特尔指令手册中,这是指令的作用:
从DS:[(E)SI]加载(E)CX字节到AL。
下面是NASM中的例子:
section .data
src: db 0, 1, 2, 3
section .code
mov esi, src
mov ecx, 4
rep lodsb ; mov al, byte[esi + ecx -1]; ecx++
当指令rep lodsb
执行时,我无法控制al
中加载的值。我所能做的就是等待,直到指令终止以获得al
的最后一个值,当然,我可以直接获得,而不需要循环。
同样的问题也适用于家庭的其他成员:REP LODS AX
、REP LODS EAX
和REP LODS RAX
。
2条答案
按热度按时间jmo0nnb31#
阅读记忆在某些情况下会产生副作用。例如,如果存储器被Map到硬件寄存器,则可能发生这种情况。确切的副作用取决于硬件。所以
rep lodsb
在非常罕见的情况下是有用的,你需要副作用发生,但不需要读取的值。iibxawm42#
有没有什么情况下我可能需要这个指令?
您可能不需要它本身,但在16位世界中编码,空间节约很重要,我不止一次地选择它
在较长时间内(以字节为单位)
当然,这一切都取决于情况。
请注意,在不使用循环的情况下获取的替换指令实际上是
mov al, byte[esi + ecx -1]