欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微机原理及应用实验——MOV指令的使用详解

程序员文章站 2022-06-20 10:41:45
...

前言

本文用到的汇编调试程序为TD.exe,简称TD

具体使用方法请参照:

初识MOV指令

通用数据传送指令包括一般传送指令MOV、堆栈操作指令PUSH和POP、交换指令XCHG、查表转换指令XLAT和字位拓展指令。

通用数据传送指令的执行对标志位不产生影响。

指令格式

MOV dest,src

  • 两操作数字长必须相同;
  • 两操作数不允许同时为存储器操作数;
  • 两操作数不允许同时为段寄存器;
  • 在源操作数是立即数时,目标操作数不能是段寄存器;

指令功能

这里的dest表示目标操作数,src表示源操作数。

指令的功能是将一个操作数从源地址传送到目标地址,而源地址中的数据保持不变。

也就是说,MOV指令实际上是完成了一次数据的复制。

MOV指令可实现以下各种传送

微机原理及应用实验——MOV指令的使用详解
注:

  • reg:寄存器
  • mem:存储器
  • sreg :段寄存器
  • data :8或16立即数

使用TD进行调试

启动TD(Turbo Debugger)输入程序段,观察执行情况并分析结果:

MOV BL,08H
MOV CL,BL
MOV AX,03FFH
MOV BX,AX
MOV [0200H],BX
MOV ES:[0300H],AX

首先将上面的命令敲到TD程序里:
微机原理及应用实验——MOV指令的使用详解
与我们平常使用的编辑器不太一样:

  • 光标(一长条的横杠)在哪里,就在哪里输入指令,直接输入即可
    微机原理及应用实验——MOV指令的使用详解
  • 运行指令要看指针位置
    微机原理及应用实验——MOV指令的使用详解
    可以看到,当前的指针ip,其值为0100,这里的0100指的是cs的偏移地址,可以看到,对应着的就是第一行指令

下面我们一步一步地运行上面这6条指令,按F8运行单条指令(运行python程序是F5,我经常会按错。。。)

1.MOV BL,08H

执行这一条语句后,可以看到:
微机原理及应用实验——MOV指令的使用详解
首先,bx的值变了,bh是bx的高8位,bl是bx的低8位

MOV BL,08H

这条指令的意思是将08H这个值赋给bl,即执行该指令后,bx应该变成0008h,结果与上图一致

另外,执行完一条指令后,ip会自动指向下一条指令,该指令的偏移地址为0102h

再来看下一条指令

2.MOV CL,BL

执行该指令后:
微机原理及应用实验——MOV指令的使用详解

MOV CL,BL

该指令的意思是把bl的值赋给cl,由上图可知,cx的低8位和bx的8位是一样的,结果一致

于此同时,ip也指向了下一条指令

3.MOV AX,03FFH

该指令执行后:
微机原理及应用实验——MOV指令的使用详解

MOV AX,03FFH

该指令的意思是把03ffh这个十六进制的值赋给ax,结果与上图一致,ax的值变成了03ff

4.MOV BX,AX

执行该指令后:
微机原理及应用实验——MOV指令的使用详解

MOV BX,AX

该指令的意思是把AX的值赋给BX,如图所示,现在AX,BX的值都是03ff

5.MOV [0200H],BX

MOV [0200H],BX

这条指令的意思是把bx的值赋值到ds:[0200H]这个地址里(基地址默认为ds),先来看看这个地址里原来的值是多少:
微机原理及应用实验——MOV指令的使用详解
可以看到,现在ds:[0200H]里全0,当我们运行这条指令后:
微机原理及应用实验——MOV指令的使用详解
看,03ff这个值就被存到ds:[0200H]里了

如果这样看的不舒服,可以用将byte改成word类型来显示:
微机原理及应用实验——MOV指令的使用详解

6.MOV ES:[0300H],AX

MOV ES:[0300H],AX

这条指令的意思是把AX里的数据送入ES:[0300H]这个地址里

跟上一条指令做一下对比:

MOV [0200H],BX

没有指定基地址时,基地址默认为ds;这里指定了基地址为es,所以我们要去es段找0300h这个偏移地址:

微机原理及应用实验——MOV指令的使用详解
这里可以看到,ds和es的基地址都是一样的,说明他们公用了一个基地址

我们找到0300这个偏移地址,它里面的初始数据也是全0

下面执行一下MOV ES:[0300H],AX这个指令:

微机原理及应用实验——MOV指令的使用详解
可以看到,0300h这个偏移地址里的值也变成ax的值了