8086地址传送指令LEA,LDS,LES

LEA BX,[SI] ;BX<--DS:[SI]内存单元的偏移地址,与该单元中的数据无关

LDS BX,[SI] ;BX<--DS:[si]内存单元中的数据的低16位,DS<--内存单元中数据的高16位
LES BX,[SI] ;BX<--DS:[SI] ,ES<--DS:[SI+2]
显然LDS和LES的操作数是32位的(两个字 四个字节 32位)

写个程序测试一下,假设我们向内存中写入数据idata dd 12345678H

LEA:-u 0CA1:0000 B8A00C MOV AX,0CA0 0CA1:0003 8ED8 MOV DS,AX ;
DS指向数据段 0CA1:0005 8D1E0000 LEA BX,[0000] ;
指向数据段中第一个内存单元(16位5678) ;
此时如果是MOV BX,[0] 那么AX=5678H AX=0CA0 BX=0000 CX=001E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0CA0 ES=0C90 SS=0CA0 CS=0CA1 IP=0005 NV UP EI PL NZ NA PO NC 0CA1:0005 8D1E0000 LEA BX,[0000] DS:0000=5678 -t AX=0CA0 BX=0000 CX=001E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0CA0 ES=0C90 SS=0CA0 CS=0CA1 IP=0009 NV UP EI PL NZ NA PO NC 0CA1:0009 B8004C MOV AX,4C00 -;
BX=0000H 说明LEA只是传送DS:[]指向内存单元的偏移地址

 

LDS:-u 0CA1:0000 B8A00C MOV AX,0CA0 0CA1:0003 8ED8 MOV DS,AX 0CA1:0005 C51E0000 LDS BX,[0000] ;
ds:[0]指向数据段的第一个内存单元 -t ;
此时如果是MOV BX,DS:[0] 那么AX=5678H AX=0CA0 BX=0000 CX=001E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0CA0 ES=0C90 SS=0CA0 CS=0CA1 IP=0005 NV UP EI PL NZ NA PO NC 0CA1:0005 C51E0000 LDS BX,[0000] DS:0000=5678 -t AX=0CA0 BX=5678 CX=001E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1234 ES=0C90 SS=0CA0 CS=0CA1 IP=0009 NV UP EI PL NZ NA PO NC 0CA1:0009 B8004C MOV AX,4C00 -;
bx=5678H,ds=1234H ;
是的,LDS的传送并不是偏移地址而是实实在在的内存单元中的数据,bx<--[0],ds<--[0+2]
LES: 
LES BX,[0]
bx<--[0]
es<--[0+2]

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值