ASM16

数据传送类指令

  • 数据传送是计算机中最基本、最重要的一种操作
  • 传送指令也是最常使用的一类指令
  • 传送指令把数据从一个位置传送到另一个位置
  • 除标志寄存器传送指令外,均不影响标志位
  • 重点掌握 MOV XCHG XLAT PUSH POP LEA

通用数据传送指令

  • 提供方便灵活的通用传送操作
  • 有3条指令 MOV XCHG XLAT

传送指令MOV

  • 把一个字节或字的操作数从源地址传送至目的地址
1
2
3
4
MOV reg/mem,imm ;立即数送寄存器或主存
MOV reg/mem/seg,reg ;寄存器送(段)寄存器或主存
MOV reg/seg,mem ;主存送(段)寄存器
MOV reg/mem,seg ;段寄存器送寄存器或主存

image-20240729175053620

image-20240906001500856

非法传送

  • 两个操作数的类型不一致
    • 例如源操作数是字节,而目的操作数是字;或相反
  • 两个操作数不能都是存储器
    • 传送指令很灵活,但主存之间的直接传送却不允许
  • 段寄存器的操作有一些限制
    • 段寄存器属专用寄存器,对他们的操作能力有限
两个操作数的类型要一致
  • 绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须一致,否则为非法指令

    1
    MOV AL,050AH ;非法指令:050Ah为字,而AL为字节
  • 寄存器有明确的字节或字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型

  • 对于存储器单元与立即数同时作为操作数的情况,必须显式指明;byte ptr指示字节类型,word ptr指示字类型

两个操作数不能都是存储器
  • 8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种操作,可通过寄存器间接实现

image-20240906001549020

要小心段寄存器的操作
  • 不允许立即数传送给段寄存器

    1
    MOV DS,100H  ;非法指令:立即数不能传送段寄存器
  • 不允许直接改变CS值

    1
    MOV CS,[SI]  ;不允许使用的指令
  • 不允许段寄存器之间的直接数据传送

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