SEG和LEA有什么区别?

如题所述

LEA 和 offset 可以对比, Seg单独一类.
1、LEA是汇编指令,对应一个机器码,OFFSET是伪指令,没有专门的机器码;
2、LEA可以使用各种存储器寻址方式,OFFSET只能回送变量或标号的偏移地址;
3、LEA在运行时才能确定操作数的地址,OFFSET在编译时由汇编程序计算出操作数的地址并作为立即数回送给指令(也就是把立即数放入编译出的机器指令中);
4、LEA(可以并非只能)用来确定局部变量的地址,OFFSET(只能)用来确定全局变量的地址,因为全局变量的地址在汇编时就已经确定,而局部变量地址受运行环境的影响,是不确定的,只能在程序运行时计算得出。
===seg指令=======隔一下========================
seg指令是一个前缀指令,前缀指令就是类似于stosw这样的指令前面可以加rep指令来重复执行stosw操作那样。
把seg指令加到mov指令前,会影响mov指令使用的段寄存器。
比较常见的就是,mov指令操作某内存地址时,默认使用DS段,但是你如果在mov指令前加上seg es,那么下面的这条指令就会使用ES段而不是默认的DS段。
如: seg es
mov dx, di
另外一种用法: mov dx, seg scancode 取scancode的段地址放入dx.
SEG∶ 数值返回运算符。其加在一个变量名或标号前面,返回的数值是该变量名或标号所在的段基址。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-06-25
一、指代不同1、lea:是微机8086/8088系列的一条指令,取有效地址,也就是银银手取偏移地址。2、offset:变量名或标号,汇编程序将回送变量或标号的偏移地址。二、规则不同1、lea:在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与偏移地址之和得到。2、offset:Reference作为偏移量参照系的引用区域。Reference必须为对单元格或相连单元格区域的引用;否则,函数OFFSET返回错误值#VALUE!。三、用法不同1、lea:用于把源操作数的地址偏移量传送目的操作数。源操作数一定要是一个存贮器操作数,而召的操作数可以是任何的16位的通用寄存器,包括指针寄存器/变址寄存器。2、offset:OFFSET(reference,rows,cols,height,width),Cols相对于偏移量参照系的左上角单元格,左(右)偏移的列数。参锋嫌考资料来[tele.uapes.cn/article/048752.html]
[tele.mmrnn.cn/article/186529.html]
[tele.jnjiank.cn/article/527861.html]
[tele.mmrnn.cn/article/197583.html]
[tele.qdu123.top/article/083627.html]
[tele.apzoe.cn/article/513082.html]
[tele.ebiofarm.cn/article/742851.html]
[tele.apzoe.cn/article/743069.html]
[tele.hbjwjnjc.cn/article/647019.html]
[tele.jydhy.cn/article/918534.html]
第2个回答  2023-06-25
要说有区别也有offset是伪指令;lea是硬指令;offset在编译阶段得出偏移地址;lea在程序执行的时候才去的偏移地址;液蠢昌从速度上来说,要比闹扒lea来得快!但是,从复杂度和灵活性来说,lea则远远档悄超过offset[tele.aigogo.top/article/093846.html]
[tele.my45du.cn/article/574139.html]
[tele.zcnygs.cn/article/301256.html]
[tele.my45du.cn/article/856293.html]
[tele.xktyz.top/article/781504.html]
[tele.jyjianye.cn/article/370856.html]
[tele.jswybg.cn/article/610548.html]
[tele.jyjianye.cn/article/894206.html]
[tele.syybx.cn/article/803147.html]
[tele.bjjwk.cn/article/860413.html]
第3个回答  2023-06-25
1、从intel的指令代码集我们可以看到与段寄存器有乱毁山关的有:MOVmem,segregMOVsegreg,memMOVserreg,reg很显然,不能把立即数赋值给段寄存器。DATASEGMENT作为伪指令,在编译连接过程会被赋一个立即数的值。2、MOVSI,OFFSETSTRMOVAX,[SI+2]这个是没错的。LEASI,STR与MOVSI,OFFSETSTR最大区别在于OFFSETSTR是一条伪指令,与SEGDATA之类相似,它在编译和连接过程被赋给一个值,你可以把它看成一个立即数,LEASI,STR是把STR的内存指针哗中赋给SI,你可以把它看成内存变量。另外余做,MOVSI,OFFSETSTR是一条2字节立即寻址指令,LEASI,STR是一条3字节内存寻址指令,后者虽然有比较灵活的寻址方式,但前者具有更小的容量和更快的执行速度,推荐尽可能使用MOVSI,OFFSETSTR。[tele.tyhhmp.cn/article/625049.html]
[tele.7e9.com.cn/article/490526.html]
[tele.mioke.com.cn/article/268401.html]
[sport.smqcby.cn/article/136529.html]
[tele.aiplace.cn/article/308257.html]
[sport.smqcby.cn/article/136420.html]
[sport.fyxxnet.cn/article/184269.html]
[tele.jcwl2.cn/article/026738.html]
[sport.msbaby.cn/article/807345.html]
[tele.hacnit.cn/article/076243.html]
第4个回答  2023-06-25
lea指令好像错了,不能使用立即歼芹帆数首雀作为操作数LEASI,[3000H]MOVSI,[3000H]的区别是第一条lea将地址值3000h送入SI,第二条mov则是把地址3000h中存储的值送氏雹入si[tele.apzoe.cn/article/850176.html]
[tele.hbjwjnjc.cn/article/501687.html]
[tele.apzoe.cn/article/981374.html]
[tele.hbjwjnjc.cn/article/032418.html]
[tele.jydhy.cn/article/129504.html]
[tele.47s47.cn/article/317809.html]
[tele.jydhy.cn/article/260389.html]
[tele.47s47.cn/article/104352.html]
[tele.cdbaite.cn/article/039625.html]
[tele.soufto.cn/article/513207.html]
相似回答
大家正在搜