1
A
回答
3
不,你不能这样做(确切地说)。对于几乎所有的Intel x86指令,其中一个操作数必须是一个寄存器。
有一个例外于:cmpsb
比较[ds:si]
到[es:di]
(或者,在32位模式下,[ds:esi]
到[es:edi]
,或在64位模式下,使用rsi
和rdi
)。
如果你想使用si
但是指向两个操作数,你需要加载一些其他的寄存器,然后进行比较:
mov al, [temp+si]
cmp al, [temp+si+1]
另一种可能性是从[si]
加载,并增加si
:
lodsb ;roughly equivalent to mov al, [si]/inc si
cmp al, [si]
因为这是唯一能够使用si
,不temp+si
,你需要使用此之前,加在一起的。这个稍微短一点,但是在大多数当前的处理器上(至少理论上)较慢。要恢复速度,你也可以使用更原始的指令:
mov al, [si+temp]
inc si
cmp al, [si+temp]
或者,因为你使用+temp
两个指令,你可以通过这样做,除了提前获得一点:
add si, temp
mov al, [si]
inc si
cmp al, [si]
虽然有一点需要记住:因为你正在处理内存中的数据,所以这可能不会在速度上产生任何实质性差异 - 如果你对内存做了很多事情,内存的带宽通常(通常是?)瓶颈,所以优化处理器本身的指令执行效果几乎没有什么区别。
相关问题
- 1. 我可以重写这样的网址吗?这是个好主意吗?
- 2. 可以写这样的东西吗?
- 3. 模板 - 可以这样做吗?
- 4. 我可以用这种方式写“OCAML模式匹配”吗?
- 5. 可以这样做吗?
- 6. 可以这样查询吗?
- 7. 可以这样做吗?
- 8. Java可以这样做吗?
- 9. 可以jquery这样做吗?
- 10. x86寻址模式
- 11. 这个XML例子可以写出一个模式吗?
- 12. 索引寻址模式和隐含寻址模式
- 13. 寄存器寻址模式与直接寻址模式
- 14. 这是反模式还是可以吗?
- 15. 这是ARM DA(Decrement After)寻址模式的第一个地址吗?
- 16. emacs 23 python.el自动缩进样式 - 可以这样配置吗?
- 17. 寻址模式效率
- 18. MASM寻址模式语法
- 19. 大会寻址模式
- 20. MIPS可以字节寻址
- 21. 这是可以写这个每周crontab表达式吗?
- 22. 可以这样用外联接写
- 23. 我可以投这样的指针吗?
- 24. 我可以做这样的事吗?
- 25. .NET AppDomains可以这样做吗?
- 26. [“var”+1] = someValue - 可以这样做吗?
- 27. 我可以这样使用#undef吗?
- 28. 这样可以使用PhoneGap吗?
- 29. Xaml - '计算值' - 可以这样做吗?
- 30. 静态类...可以这样做吗?
假设它是x86,OP没有指定。 –
谢谢!
–