汇编语言 LEA ,OFFSET, SEG功能有什么不同?

如题所述

LEA和OFFSET这两条指令在功能上是相同的,BX寄存器都可得到符号地址LIST的值,而且此时MOV指令的执行速度会比LEA指令更快。

但是,OFFSET只能与简单的符号地址相连,而不能和诸如LIST[SI]或[SI]等复杂操作数相连。因此,LEA指令在取得访问变量的工具方面是很有用的。

OFFSET是将数值回送变量或标号的偏移地址值LEA是将数值回送变量或标号的有效地址值SEG, 汇编程序将回送变量或标号的段地址值。

扩展资料:


LEA是微机8086/8088系列的一条指令,取自英语Load effective address——取有效地址,也就是取偏移地址。在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与偏移地址之和得到。地址传送指令之一。

Offset是Excel中的函数,在Excel中,OFFSET函数的功能为以指定的引用为参照系,通过给定偏移量得到新的引用。返回的引用可以为一个单元格或单元格区域。并可以指定返回的行数或列数。Reference 作为偏移量参照系的引用区域。Reference 必须为对单元格或相连单元格区域的引用。

SEG(Searl-Effect Generator)是一部不需要能源的发电机,它可以收集能源,但不需要使用任何燃料。当SEG的滚筒很靠近环状体时,瑟尔效应的共振磁场会使周遭环境里的负离子与电子被吸进这部机器并在里面加速。稀土族金属元素「钕」对电子具有高度的吸引力,因而促进了这个过程。

参考资料:百度百科-汇编语言

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2019-08-10

1、汇编指令功能上不同:LEA是真正的汇编指令,它对应于一个机器码,而OFFSET只是一个给汇编程序的关键字,它要求汇编程序在汇编时算出相应的地址偏移,也就是说它对应的操作数必须是一个汇编程序知道的变量或者标量!而lea却可以算出任何形式的地址偏移!

汇编语言中SEG, 汇编程序将回送变量或标号的段地址值。

2、总体上的不同:汇编语言中LEA  BX,LIST5、MOV  BX,OFFSET  LIST6、可以看出,LEA和OFFSET这两条指令在功能上是相同的,BX寄存器都可得到符号地址LIST的值,而且此时MOV指令的执行速度会比LEA指令更快。

但是,OFFSET只能与简单的符号地址相连,而不能和诸如LIST[SI]或[SI]等复杂操作数相连。

扩展资料

汇编语言数据传送指令

这部分指令包括通用数据传送指令MOV、条件传送指令CMOVcc、堆栈操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等。

注意,CMOVcc不是一条具体的指令,而是一个指令簇,包括大量的指令,用于根据EFLAGS寄存器的某些位状态来决定是否执行指定的传送操作。

参考资料来源:百度百科-lea

参考资料来源:百度百科-offset

参考资料来源:百度百科-seg

本回答被网友采纳
第2个回答  2012-01-09
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∶ 数值返回运算符。其加在一个变量名或标号前面,返回的数值是该变量名或标号所在的段基址。
第3个回答  推荐于2017-05-16
LEA BX,LIST
MOV BX,OFFSET LIST
可以看出,LEA和OFFSET这两条指令在功能上是相同的,BX寄存器都可得到符号地址LIST的值,而且此时MOV指令的执行速度会比LEA指令更快。但是,OFFSET只能与简单的符号地址相连,而不能和诸如LIST[SI]或[SI]等复杂操作数相连。因此,LEA指令在取得访问变量的工具方面是很有用的。
OFFSET是将数值回送变量或标号的偏移地址值
LEA是将数值回送变量或标号的有效地址值
SEG, 汇编程序将回送变量或标号的段地址值。本回答被网友采纳
第4个回答  2012-01-09
lea是一条机器指令,格式:lea dest,src.表示把src的偏移地址送到dest.
你应该注意区别:
MOV AX ,[BX][DI] 是将源操作数所指内存字单元里的值送到AX中,
LEA AX , [BX][DI] 是将源操作数指出的地址送到AX中。

而OFFSET, SEG是两条地址操作符,不属于伪指令。具体的:
offset 是取偏移地址,seg是取段地址。(偏移地址、段地址定义可参考8086微机的内存分段管理)把它们取出的地址编码当一个立即数处理。例如:
若var1,var2是两个变量,
mov ax,seg var1;表示把变量var1的段地址当立即数送到AX
mov,ax,offset var2;表示把变量var2的偏移地址作为立即数送到AX

说了这么多,了解吧!有什么疑问再问我哈。QQ:920114104
相似回答