【虎彡】offset与lea的区别
时间:2010-12-20
来源:互联网
问1:OFFSET只能取得标号的偏移 LEA呢?
问2:我看到别人说offset用于全局变量,lea用于局部变量。 什么是全局变量,什么事局部的呢?
问3:我还听说 mov bx,offset xx 和lea bx,xx 的指令周期是不一样的, lea要长 我记得有个指令周期 还有个什么周期我忘 了 貌似是指指令长度、大小的 那个叫什么周期来着?
问4:指令周期是不是指令的执行时间?
作者: znxllyuan 发布时间: 2010-12-20
1.都可以的,LEA还可以做一些四则运算
2.局部变量就是一个临时开辟的内存空间,比如在函数中,函数执行完毕,会将局部变量所占的内存归还,不再占用.全局变量是和局部变量存放的位置不同,不是在栈上了,当整个程序执行完毕后,全局变量被释放.两者的生命期不同
3.不了解,指令字节数?
4.好象是的
2.局部变量就是一个临时开辟的内存空间,比如在函数中,函数执行完毕,会将局部变量所占的内存归还,不再占用.全局变量是和局部变量存放的位置不同,不是在栈上了,当整个程序执行完毕后,全局变量被释放.两者的生命期不同
3.不了解,指令字节数?
4.好象是的
作者: va_zaixuexi 发布时间: 2010-12-20
offset是伪指令;lea是硬指令;offset在编译阶段得出偏移地址;lea在程序执行的时候才去的偏移地址;
offset经过编译后,得到的是操作数是一个数值。从速度上来说,要比lea来得快! 但是,从复杂度和灵活性来说,lea则远远超过offset。
以上个人理解。
offset经过编译后,得到的是操作数是一个数值。从速度上来说,要比lea来得快! 但是,从复杂度和灵活性来说,lea则远远超过offset。
以上个人理解。
作者: masmaster 发布时间: 2010-12-20
1、offset只能取静态地址(静态变量、函数、标号),lea可以取各种储存期寻址方式的地址(例如基址+变址+偏移量)。
2、不是全局和局部变量(根据作用域区分),是静态和动态变量(根据分配方式区分)。
3、现在的CPU这两条指令的周期都是一样的。
4、可以说是。
2、不是全局和局部变量(根据作用域区分),是静态和动态变量(根据分配方式区分)。
3、现在的CPU这两条指令的周期都是一样的。
4、可以说是。
作者: cnzdgs 发布时间: 2010-12-20
LEA 用于取全局变量的偏移也没报错啊~
作者: znxllyuan 发布时间: 2010-12-20
问1:OFFSET只能取得标号的偏移 LEA呢?
答:offset是运算符,“offset 变量或标号”得到的是一个立即数,这个数在编译时就被算出,然后用这个数代替源程序中的offset,而lea是一条指令,执行时把那个地址的偏移值送目标操作数。所以offset是立即数寻址,lea是存储器的某种寻址。
问2:我看到别人说offset用于全局变量,lea用于局部变量。 什么是全局变量,什么事局部的呢?
答:我倒是没见过这种说法。
在汇编中,全局变量是指被“public”(应该是它)说明的变量,一个模块中定义了,其它模块只要用“外部符号(extra?)”说明就可使用,大家用的都是同一个地址。而局部变量就是各模块自己定义的变量,编译完变成各自的地址,即使源程序中2模块用了同一个变量名,编译完以后也使用各自的单元。
问3:我还听说 mov bx,offset xx 和lea bx,xx 的指令周期是不一样的, lea要长 我记得有个指令周期 还有个什么周期我忘 了 貌似是指指令长度、大小的 那个叫什么周期来着?
答:指令长度是指编译后的机器代码占得字节数,比如mov ax,0001编译成B80001(好像是这几个数),它占3个字节,所以这条指令的长度是3。指令周期数是执行这条指令用多少个指令周期,每个指令周期所用时间是CPU主频的倒数。比如80386的某个CPU的主频是133MHz,表示一个指令周期用1/(133*10^6)秒,如果这条指令是5个指令周期,那执行它需要5/(133*10^6)秒。
问4:指令周期是不是指令的执行时间?
答:见问3.
答:offset是运算符,“offset 变量或标号”得到的是一个立即数,这个数在编译时就被算出,然后用这个数代替源程序中的offset,而lea是一条指令,执行时把那个地址的偏移值送目标操作数。所以offset是立即数寻址,lea是存储器的某种寻址。
问2:我看到别人说offset用于全局变量,lea用于局部变量。 什么是全局变量,什么事局部的呢?
答:我倒是没见过这种说法。
在汇编中,全局变量是指被“public”(应该是它)说明的变量,一个模块中定义了,其它模块只要用“外部符号(extra?)”说明就可使用,大家用的都是同一个地址。而局部变量就是各模块自己定义的变量,编译完变成各自的地址,即使源程序中2模块用了同一个变量名,编译完以后也使用各自的单元。
问3:我还听说 mov bx,offset xx 和lea bx,xx 的指令周期是不一样的, lea要长 我记得有个指令周期 还有个什么周期我忘 了 貌似是指指令长度、大小的 那个叫什么周期来着?
答:指令长度是指编译后的机器代码占得字节数,比如mov ax,0001编译成B80001(好像是这几个数),它占3个字节,所以这条指令的长度是3。指令周期数是执行这条指令用多少个指令周期,每个指令周期所用时间是CPU主频的倒数。比如80386的某个CPU的主频是133MHz,表示一个指令周期用1/(133*10^6)秒,如果这条指令是5个指令周期,那执行它需要5/(133*10^6)秒。
问4:指令周期是不是指令的执行时间?
答:见问3.
作者: shzhfu 发布时间: 2010-12-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28