关于les指令的小问题

littlecc2009 2010-05-24 12:25:43
请问LES指令,为什么要把寄存器内容+2或+4之后存进es段寄存器呢??
请指教~!谢谢
...全文
525 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangfaqun 2010-05-24
  • 打赏
  • 举报
回复

我还没涉及到楼上说的知识。。。
zara 2010-05-24
  • 打赏
  • 举报
回复
LES 指令格式是 LES BX/BBX, [xxxx],BX/EBX 也可用是其它的通用寄存器。其将 [xxxx] 处数据给 BX,+2/+4 处给 ES。为什么这么涉及,是因为这样要求 [xxxx] 处的数据为一完整的远地址,其结构形式为 Offset:Seg,和 JMP/CALL 间接寻址的格式一致,也和 x86 上数据存储时低端在前,高端在后的约定一致。
pandazhong 2010-05-24
  • 打赏
  • 举报
回复
汇编这样规定的,这个指令的一个功能之一就是初始化ES段寄存器。等待高人详细讲解。
Boover 2010-05-24
  • 打赏
  • 举报
回复
更正一点,不是把寄存器内容+2/+4之后存进es段寄存器,而是把
LES REG,SRC

SRC地址+2/+4之后指向的内存单元的内容存进es段寄存器。

此指令完成把地址送到指定寄存器的功能,也即一般情况下,SRC处存的是地址(段:偏移地址对)。
若REG为16位,则(SRC,SRC+1)为偏移量,此二内存单元内容移入REG;(SRC+2,SRC+3)为段地址,
移入ES。
REG为32位,理同上。

试举一例:
LES DI,[BX]

如果指令执行前
(DS)=B000H, (BX)=080AH, (0B080AH)=05AEH, (0B080CH)=4000H
则指令执行之后:
(DI)=((DS)*10H+080AH)=(B000H*10H+080AH)=(0B080AH)=05AEH,
(ES)=((DS)*10H+080AH+2H)=(0B080CH)=4000H

21,497

社区成员

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

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