在汇编中:LEA和OFFSET 的具体区别????

hy_number_one 2006-12-16 09:01:34
在汇编中:LEA和OFFSET 的具体区别?????
过了几年,复习怎么搞忘记了哦
...全文
4566 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2006-12-20
  • 打赏
  • 举报
回复
LEA = Load Effect Address(上载有效地址)

OffSet (偏离原来的起始地址)

----------------------------

Message
.ASCII "i am guy"

........
MOV $Message,%eax
MOV %eax,%edx
LEA %edx (上载Message)

MOV $2,%edx
这样他的OFFSET 就是2了。偏离值为2
jackanie1982 2006-12-19
  • 打赏
  • 举报
回复
LEA是传送地址的
OFFSET是传送偏移地址
例如:
LEA DS 2000H
OFFSET BI 200H
MOV BX,DS+BI
colinboy 2006-12-19
  • 打赏
  • 举报
回复
OFFSET只能取得用数据定义伪指令定义的变量的有效地址,不能取得一般操作数的有效地址(摘自80x86汇编语言程序设计教程)

MOV BX,OFFSET [BX+200]这句是错误的 应该用LEA BX,[BX+200]
  • 打赏
  • 举报
回复
lea可以进行比较复杂的计算,比如lea eax,[esi+ebx*4],把ebx的值*4,加上esi的值,存入eax中。
mov就不行了。
Silent_Spring 2006-12-19
  • 打赏
  • 举报
回复
offset 比 lea 的指令码短?
我也不知从哪看来的
ymghaym 2006-12-18
  • 打赏
  • 举报
回复
没有区别
hy_number_one 2006-12-16
  • 打赏
  • 举报
回复
那实际效果是一样的嘛,干嘛还要用两个名称不一样,效果一样的关键字
具体应用呢?
大熊猫侯佩 2006-12-16
  • 打赏
  • 举报
回复
LEA BX BUFFER”在实际执行时才会将buffer的地址放入bx

而“MOV BX, OFFSET BUFFER 在编译时就已经计算出buffer的地址为4300(假设),
然后将上句替换为:

mov bx,4300
hy_number_one 2006-12-16
  • 打赏
  • 举报
回复
我想问:指令“LEA BX BUFFER”和“MOV BX, OFFSET BUFFER”有甚么区别?
指令“LEA BX,[BX+200]”和“MOV BX,OFFSET [BX+200]”有什么区别?
大熊猫侯佩 2006-12-16
  • 打赏
  • 举报
回复
lea 是机器指令,offset 是伪指令。查看编译后的文件就会一目了然。
汇编语言程序设计练习。好东西大家共享.1、简述标志寄存器各个位的含义。(2.1) 2、简述8086机器代码格式。 (2.2) 3、分别指出下列指令源操作数和目的操作数的寻址方式。(2.2)  (1)MOV SI,100  (2)MOV CX,DATA[SI]  (3)MOV [SI],AX  (4)PUSHF 4、假定DS=2000H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量VAL的偏移地址为0050H,请指出下列指令源操作数字段是什么寻址方式?它的物理地址是多少?(2.2)  (1)MOV AX,100H  (2)MOV AX,[100H]  (3)MOV AX,[BP]  (4)MOV AX,VAL[BX][SI] 5、试分别说明下列各指令源操作数和目的操作数使用的寻址方式。(2.2)  (1)AND AX,0FFH  (2)AND BL,[0FFH]  (3)MOV DS,AX  (4)CMP [SI],CX  (5)MOV DS:[0FFH],CL  (6)SUB [BP][SI],AH  (7)ADC AX,0ABH  (8)OR DX,-35[BX][DI]  (9)PUSH DS 6、给定(BX)=637DH (SI)=2A9BH 位移量D=7237H,试确定下列各种寻址方式下的有效地址是什么?(2.2)  (1)直接寻址   (2)使用BX的寄存器寻址   (3)使用BX的间接寻址  (4)使用BX的寄存器相对寻址   (5)基址变址寻址   (6)相对基址变址寻址 7、指出下列指令的错误。(2.3)  (1)MOV AH,BX  (2)MOV [BX],[SI]  (3)MOV AX,[SI][DI]  (4)MOV BYTE PTR[BX],1000  (5)MOV CS,AX 8、计算下列4条指令操作数的地址并指出执行结果。(2.3)  (1) MOV 1[BX+SI],AX  (2) MOV 2[BP+SI],BX  (3) MOV 3[BX+DI],CX  (4) MOV 4[BP+DI],DX 假定执行前: (DS)=1000H, (SS)=2000H, (BX)=300H, (BP)=400H, (SI)=50H, (DI)=60H, (AX)=12H, (CX)=13H, (DX)=15H. 9、指出下列指令的功能。(2.3) MOV BX,OFFSET TAB MOV AL,4 XLAT TAB 10、分别指出下列各条指令的功能。(2.3) MOV SI,OFFSET NUM LEA SI,NUM MOV AX,[SI] LEA AX,[SI] LEA DI,4[SI]
三级PC南开100题 第一题: 一、请编制程序,其功能是:将内存由SOURCE指示的40个字节有符号数组成的数组分成正数和负数两个数组,并求这两个数组的数据个数,结果存放在RESULT指示的内存区域,存放形式为正数个数在前,其后跟正数数组元素,然后是负数个数及负数数组元素。 例如: 内存有 1EH,91H,74H,91H,42H,30H,81H,F3H,18H,25H 结果为 06H,1EH,74H,42H,30H,18H,25H,04H,91H,91H,81H,F3H 部分程序已给出, 其原始数据由过程LOAD从文件INPUT1.DAT读入SOURCE开始的内存单元。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT。   填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试若发现整个程序存在错误之处, 请加以修改。 试题程序: ? EXTRN LOAD:FAR,SAVE:FAR N EQU 40 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(0) RESULT DB N+2 DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 NDATA DB N DUP(0) PDATA DB N DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;置附加段寄存器 LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'INPUT1.DAT'读取数据 ;****BEGIN**** LEA SI,SOURCE MOV DI,OFFSET PDATA ;PDATA为正数数组存放缓冲区首址 MOV BX,OFFSET NDATA ;NDATA为负数数组存放缓冲区首址 XOR DX,DX MOV CX,N CLD MAIN1: LODSB TEST AL,_______________ JZ MAIN2 INC DH ;- MOV [BX],AL INC BX _______________ MAIN2: INC DL MOV [DI],AL ;+ INC DI MAIN3: _______ MAIN1 LEA SI,PDATA LEA DI,RESULT MOV [DI],DL INC DI XOR CX,CX MOV CL,DL MAIN4: MOV AL,_______________ MOV [DI],AL INC DI INC SI LOOP _______________ MOV [DI],DH INC DI XOR CX,CX MOV CL,DH MOV BX,OFFSET NDATA MAIN5: MOV AL,[BX] MOV [DI],AL INC DI _______________ LOOP MAIN5 ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N+2 ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧