数据存放
mov al,mov es:,al
为什么不能直接用mov es:,
8086不支持内存单元之间的直接mov数值传递~
记住就ok
无法确定传送的是字,还是字节。 tsembrace 发表于 2013-9-10 20:58 static/image/common/back.gif
8086不支持内存单元之间的直接mov数值传递~
记住就ok
那这个呢mov ax,0123h
mov ds:,ax
为什么不能直接mov ds:,0123h
aa_hao 发表于 2013-9-10 21:23 static/image/common/back.gif
那这个呢mov ax,0123h
mov ds:,ax
为什么不能直接mov ds:,0123h
我印象里立即数是可以直接到内存的
mov ax, 0123H
mov ds:,ax
允许内存单元到寄存器之间传值,上面两个指令可在masm下编译通过,debug下不行。
以下是mov指令的详解
MOV指令可以在CPU内或CPU和存储器之间传送字或字节,它传送的信息可以从寄存器到寄存器,立即数到寄存器,立即数到存储单元,从存储单元到寄存器,从寄存器到存储单元,从寄存器或存储单元到除CS外的段寄存器(注意立即数不能直接送段寄存器),从段寄存器到寄存器或存储单元。
但是注意
(1) MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器;
(2) MOV指令中绝对不允许在两个存储单元之间直接传送数据;
(3) MOV指令中绝对不允许在两个段寄存器之间直接传送数据;
(4) MOV指令不会影响标志位 MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器;这一条我记得很熟悉! 本帖最后由 liangfei44 于 2013-9-11 00:25 编辑
为什么不能mov es:,,其实相当复杂。
这得从Intel 的架构说起:
打个比方:mov ,, 计算机内部需要怎么实现呢?他需要经过两次总线周期,一个读内存,一个写内存的的总线周期,我的妈啊,那这条指令的指令周期就相当滴长呢。如果是这样,那也就算了,长也长点吧,可惜的是,偶们的指令,X86不认识啊,这时候就必须通过译码器,将指令翻译成微码,用流水线的形式来执行,这个时候郁闷了,偶们的Intel体系结构,微码的长度是有限制的哦,很显然我们同一条指令两次访问内存,让偶们的微码的长度超标了,所以,就不行哦,
页:
[1]