use*_*rBI 12 x86 assembly masm tasm
ar db "Defference $"
Run Code Online (Sandbox Code Playgroud)
有什么区别
mov dx,offset ar
Run Code Online (Sandbox Code Playgroud)
和
lea dx,ar
Run Code Online (Sandbox Code Playgroud)
我认为两者都在做同样的工作,但这两者之间有什么区别
Nil*_*nck 15
在这个用例中,LEA和MOV做同样的事情.如果您想以更复杂的方式计算地址,LEA比MOV更强大.
例如,假设您想要获取数组中第n个字符的地址,并且n存储在bx中.使用MOV,您必须编写以下两条说明:
Mov dx, offset ar
add dx, bx
Run Code Online (Sandbox Code Playgroud)
使用lea,您只需一条指令就可以完成:
lea dx, [ar + bx]
Run Code Online (Sandbox Code Playgroud)
这里要考虑的另一件事是:该add dx,bx
指令将改变CPU的状态标志.lea dx, [ar + bx]
另一方面,在指令内部完成的添加不会以任何方式更改标志,因为它不被视为算术指令.
如果您想在进行一些简单计算时保留标志(地址计算非常常见),这有时会很有用.存储和恢复标志寄存器是可行的,但操作很慢.
归档时间: |
|
查看次数: |
14098 次 |
最近记录: |