zoukankan      html  css  js  c++  java
  • 汇编 | mov. add. sub指令

    Description

    前面我们用到了mov, add. sub指令,它们都带有两个操作对象。到现在,我们知道,mov指令可以有以下几种形式。


    mov  寄存器,数据       比如:  mov ax,8
    mov  寄存器,寄存器     比如: mov ax,bx
    mov  寄存器,内存单元   比如: mov ax,[0]
    mov  内存单元,寄存器   比如: mov [0],ax
    mov  段寄存器,寄存器   比如: mov ds,ax
    

    我们可以根据这些己知指令进行下面的推测。

    1. 既然有 “mov段寄存器,寄存器”,从寄存器向段寄存器传送数据,

      那么也应该有 “mov寄存器,段寄存器” ,从段寄存器向寄存器传送数据。

      一个合理的设想是:8086CPU内部有寄存器到段寄存器的通路,那么也应该有相反的通路。
      有了推测,我们还要验证一下。进入Debug,用 (-A)​​​​ 命令,如下图3.4所示。

    图中,用A命令在一个预设的地 (0B39:0100)​处,用汇编的形式 mov ax,ds 写入指令,再用T命令执行,可以看到执行的结果,段寄存器 ds 中的值送到了寄存器 ax 中。

    通过验证我们知道,“mov寄存器,段寄存器”是正确的指令。

    1. 既然有 “mov内存单元,寄存器”,从寄存器向内存单元传送数据,

      那么也应该有“mov内存单元,段寄存器”,从段寄存器向内存单元传送数据。比如我们可以将段寄存器 (cs) 中的内容送入内存 (10000H) 处,指令如下。

    mov  ax,1000H
    mov  ds,ax
    mov  [0],cs
    

    在Debug中进行试验,如图3.5所示。

    图3.5中,当 (CS:IP) 指向 (0B39:0105) 的时候,Debug显示当前的指令mov [0000],cs因为这是一条访问内存的指令,Debug还显示出指令要访问的内存单元中的内容。

    由于指令中的 (CS) 是一个 (16) 位寄存器,所以要访问(写入)的内存单元是一个字单元,它的偏移地址为 (0) ,段地址在 ds 中,Debug在屏幕右边显示出“(DS:0000=0000)",我们可以知道这个字单元中的内容为 (0)

    mov [0000],cs执行后,CS中的数据((0B39H) )被写入 (1000:0) 处,(1000:1) 单元存放 (0BH, 1000:0)​ 单元存放 (39H)
    最后,用D命令从 (1000:0) 开始查看指令执行后内存中的情况,注意(1000:0, 1000:1)两个单元的内容。

    1. "mov段寄存器,内存单元”也应该可行,比如我们可以用1 0000H处存放的字型数据设置ds(即将1 0000H处存放的字型数据送入ds),指令如下。
    mov ax,1000H
    mov ds,ax
    mov ds,[0]
    

    可以自行在Debug中进行试验。
    add和sub指令同mov一样,都有两个操作对象。它们也可以有以下几种形式。

    它们可以对段寄存器进行操作吗?比如“add ds,ax"。请自行在Debug中试验。

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    访问者模式
    中介者模式
    策略模式
    迭代器模式
    责任链模式
    contentProvider模板
    android studio常用快捷键(不断补充)
    jqgrid表格列动态加载的实现
    Android View.onMeasure方法的理解(转载)
    activity的生命周期
  • 原文地址:https://www.cnblogs.com/RioTian/p/15364463.html
Copyright © 2011-2022 走看看