鱼C论坛

 找回密码
 立即注册
查看: 2334|回复: 7

数据存放

[复制链接]
发表于 2013-9-10 20:23:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
mov al,[bx]
mov es:[di],al
为什么不能直接用mov es:[di],[bx]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-10 20:58:58 | 显示全部楼层
8086不支持内存单元之间的直接mov数值传递~
记住就ok
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 21:09:23 From FishC Mobile | 显示全部楼层
无法确定传送的是字,还是字节。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-10 21:23:50 | 显示全部楼层

那这个呢  mov ax,0123h
                mov ds:[0],ax
为什么不能直接mov ds:[0],0123h
         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 21:37:47 | 显示全部楼层
aa_hao 发表于 2013-9-10 21:23
那这个呢  mov ax,0123h
                mov ds:[0],ax
为什么不能直接mov ds:[0],0123h

我印象里立即数是可以直接到内存的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 22:48:02 | 显示全部楼层
                mov ax, 0123H
                mov ds:[0],ax
允许内存单元到寄存器之间传值,上面两个指令可在masm下编译通过,debug下不行。

以下是mov指令的详解
MOV指令可以在CPU内或CPU和存储器之间传送字或字节,它传送的信息可以从寄存器到寄存器,立即数到寄存器,立即数到存储单元,从存储单元到寄存器,从寄存器到存储单元,从寄存器或存储单元到除CS外的段寄存器(注意立即数不能直接送段寄存器),从段寄存器到寄存器或存储单元。
      但是注意
(1)      MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器;
(2)      MOV指令中绝对不允许在两个存储单元之间直接传送数据;
(3)      MOV指令中绝对不允许在两个段寄存器之间直接传送数据;
(4)      MOV指令不会影响标志位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 23:30:33 | 显示全部楼层
MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器;这一条我记得很熟悉!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-11 00:21:35 | 显示全部楼层
本帖最后由 liangfei44 于 2013-9-11 00:25 编辑

为什么不能mov es:[di],[bx],其实相当复杂。

这得从Intel 的架构说起:
打个比方:mov [4],[5], 计算机内部需要怎么实现呢?他需要经过两次总线周期,一个读内存,一个写内存的的总线周期,我的妈啊,那这条指令的指令周期就相当滴长呢。如果是这样,那也就算了,长也长点吧,可惜的是,偶们的指令,X86不认识啊,这时候就必须通过译码器,将指令翻译成微码,用流水线的形式来执行,这个时候郁闷了,偶们的Intel体系结构,微码的长度是有限制的哦,很显然我们同一条指令两次访问内存,让偶们的微码的长度超标了,所以,就不行哦,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表