汇编中中括号[]作用以及lea和mov指令的区别
区别 以及 作用 指令 汇编 中括号
2023-09-11 14:19:08 时间
现在总结一下:其中牵扯到lea指令,mov指令,[]
一.lea指令:
对于寄存器来说:第二个操作数是寄存器必须要加[],不然报错,这里lea就是取[寄存器]的值,如:
mov eax,2
lea ebx,[eax];执行后ebx=2
mov ebx,eax;等同于上句
lea ebx,eax;编译器报错: error A2070: invalid instruction operands
对于变量来说加不加[]都是一样的效果,都是取变量的地址,相当于指针
如:
num dword 2
lea ebx,num
lea eax,[num]; eax为num的地址,如eax=4206598,随程序不同不同,这时ebx==eax
二.mov指令:
对于变量来说
num dword 2
mov eax,2
mov ebx,num
mov ecx,[num];执行完ebx==ecx==2
对寄存器
mov ebx,eax;ebx==2
mov ecx,[eax];可能会报错,因为这里翻译成汇编是mov ecx,DS:[eax]
总的说来加不加中括号[]的区别就是:
lea对变量没有影响是取地址,对寄存器来说加[]时取值,第二操作数不加[]非法
mov对变量来说没有影响是取值,对寄存器来说是加[]时取地址,第二操作数不加[]是取值
还有一点这里顺便说下,看有的教程说mov指令不支持mov ebx,[eax+2*eax......什么乱七八糟的表达式]归根结底就是对于mov来说当第二个操作数是寄存器的时候如果加上[]就是寻址了....
https://blog.csdn.net/spygg/article/details/8760310
相关文章
- MySQL与MongoDB的操作对比,以及区别
- array_map、array_walk的用法和区别
- PHP面向对象与面向过程的区别
- LinkedHashMap和hashMap和TreeMap的区别
- 中文全角和半角输入有什么区别?
- 关于Vue项目npm操作中npm run serve或npm run dev报错以及二者区别
- [转]JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
- java和 javaw 以及 javaws的区别
- 并发编程--CountDownLatch、Semaphore、CyclicBarrier的区别及示例
- 讲讲频率和概率以及均值和期望的联系区别
- [转] php die()与exit()的区别实例详解
- 静态哈希和动态哈希的区别
- SwiftUI 内功之Objective-C 与Swift 最大区别是什么
- macOS SwiftUI 之 Text 与 Label效果区别
- 【使用vue init和vue create的区别以及搭建vue项目的教程】
- sprintf、strcpy和memcpy的区别
- SQL语句中union all和union的区别以及用法
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
- HTTP ------ connection 为 close 和 keep-alive 的区别
- SQL中的cast和convert的用法和区别以及时间转换
- 浅析exports和module.exports的理解以及对module.exports、exports、export都是导出的区别
- Dockerfile中RUN/CMD/ENTRYPOINT命令区别
- 浅析字面量、new操作符和Object.create(null)创建出来的对象的区别以及Object.create()方法理解
- 信号与系统——傅里叶变换、拉普拉斯变换、Z变换联系与区别以及工程应用(二)
- pytorch.Variables()以及和tensor的区别
- tesorflow训练完保存模型和测试模型的方法以及区别