MOV指令

MOV指令允许进行如下操作:

         MOV  目的               源

(1)MOV  寄存器,       寄存器/内存单元/段寄存器/立即数

(2)MOV  内存单元,   寄存器/段寄存器/立即数

(3)MOV  段寄存器,   寄存器/内存单元

1.立即数送寄存器或主存 MOV reg/mem , im 

mov al , 4 ; al←4,字节传送

mov cx , 0ffh ; cx←00ffh,字传送

mov si , 200h ; si←0200h,字传送

mov byte ptr [si] , 0ah ; byte ptr 说明是字节操作

mov word ptr [si+2 ], 0bh ; word ptr 说明是字操作

# 注意立即数是字节量还是字量

# 明确指令是字节操作还是字操作


2.寄存器送(段)寄存器或主存 MOV reg/mem/seg , reg;
mov ax , bx ; ax←bx,字传送

mov ah , al ; ah←al,字节传送

mov ds , ax ; ds←ax,字传送

mov [bx] , al ; [bx]←al,字节传送

3.主存送(段)寄存器 MOV reg/seg , mem;
mov al , [bx]

mov dx , [bp] ; dx←ss:[bp]

mov es , [si] ; es←ds:[si]

# 不存在存储器向存储器的传送指令

4.段寄存器送寄存器或主存 MOV reg/mem , seg;

mov si , ds 

mov ax , es ; ax←es

mov ds , ax ; ds←ax←es

但是注意
(1)    MOV指令两个操作数的类型必须一致
(2)      MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器;
(3)      MOV指令中绝对不允许在两个存储单元之间直接传送数据;
(4)      MOV指令中绝对不允许在两个段寄存器之间直接传送数据;
(5)      MOV指令不会影响标志位  



MOV指令不允许进行下述操作:

 

(1). 两个操作数的类型不一致

     例如源操作数是字节,而目的操作数是字;或相反

     绝大多数双操作数指令(包括传送指令),除非特别说明,目的操作数与源操作数必须类型一致,或者同为字,或者同为字节,否则为非法指令。

 

例如:
MOV AL,050AH ;非法指令:050Ah为字,而AL为字节

寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型。对于存储器单元与立即数同时作为操作数的情况,必须显式指明。用byte ptr指示字节类型,用word ptr指示字类型。

 


(2). 两个操作数不能都是存储器

 

传送指令很灵活,但主存之间的直接传送却不允许
8086指令系统不允许两个操作数都是存储单元(除串操作指令),没有主存至主存的数据传送。要实现这种传送,可通过寄存器间接实现。


(3). 段寄存器的操作有一些限制:段寄存器属专用寄存器,对他们的操作能力有限


不允许立即数传送给段寄存器,例如:

MOV DS,100H ;非法指令:立即数不能传送段寄存器

不要直接改变CS值,例如:

MOV CS,[SI] ;不允许使用的指令


 

不允许段寄存器之间的直接数据传送,例如:

MOV DS,ES ;非法指令:不允许段寄存器间传送


http://blog.csdn.net/fcrane/article/details/4327739


  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在计算机硬件中,ALU(算术逻辑单元)是负责执行基本算术和逻辑操作的部件。MOVMove)指令是一种常见的数据传输指令,用于将数据从一个内存位置复制到另一个内存位置,或者从寄存器到寄存器。在汇编语言或硬件级别的代码中, MOV 指令的具体实现会依赖于处理器架构。 对于x86架构(如Intel的IA-32系列),MOV指令通常是字节对字节、字对字或双字对双字的操作,ALU并不直接处理这些细节。在微指令集(Microcode)或机器码层面,MOV可能涉及以下步骤: 1. 微指令序列:CPU使用一系列微指令来执行MOV,这些微指令会控制数据总线和控制寄存器,进行地址计算和数据传输。 2. 地址计算:确定源地址和目标地址,可能需要读取特定的地址寄存器或者使用指令中的立即寻址字段。 3. 数据传输:ALU可能只参与数据移动操作的低级控制,比如控制数据总线的读写,而不是实际的数据位操作。 4. 寄存器操作:如果源和目标都是寄存器,可能涉及到ALU的简单转移操作,但从ALU的角度看,这更多是寄存器间的数据移动。 由于这种实现非常底层且具体到每个架构,详细代码通常是保密的,开发者也无需了解太多细节,只需要知道如何编写相应的汇编指令调用这些功能即可。如果你需要更深入的汇编语言示例,可以提供特定平台(例如x86、ARM等)和编程语言环境(裸机汇编、C语言汇编接口等),我会尝试简化解释。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值