zoukankan      html  css  js  c++  java
  • 汇编寄存器(内存访问)基础知识之三---mov指令

     1 内存中字的存储

      一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位。

      

    注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址)

       (1) 2地址单元中存放的 字节型 数据是 12H
       (2)2地址单元的存放法 字型 数据是 0012H (字型要2个字节)
       (3) 1地址单元的存放的 字型 数据是 124EH

    结论:

       任何2个地址连续的内存单元,N号和N+1号,可以看成2个内存单元,
       也可以看成一个地址为N的字单元中的高字节单元(n+1)和低位字节单元(n)

       一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位。


      cpu要读取一个内存单元的时候,要先给出这个内存单元的地址
      DS寄存器(数据段寄存器),存放要访问的数据的段地址

    mov指令的可以完成3种传送:
      (1)数据直接送入寄存器
      (2)一个寄存器的内容送入另一个寄存器
      (3)可以将一个内存单元中的内容送入一个寄存器

    mov指令的格式:
        mov 寄存器名,内存单元地址

      [...]表示一个内存单元,[....]中的0表示内存单元的偏移地址是0
      但是内存单元的段地址是: cpu自动取ds中的数据为内存单元的段地址

      mov ds,1000H 表示是错误的,
        因为8086CPU不支持将数据直接送入段寄存器,
        但是直接可以送入通用寄存器,这是硬件设计的问题


      数据--》通用寄存器--》段寄存器

    从哪个内存单元送到哪个寄存器中呢?

    例如: 将数据从内存中单元送入寄存器(AH 是AX 的高8位,AL 是AX 的低8位)
      mov bx,1000H
      mov ds,bx
      mov al,[0] //偏移地址0放到al里面 ,[ ... ]表示一个内存单元, [ ...]里的0表示内存单元的偏移地址是0
      上面指令是从1000H(1000:0)中的读数据


    思考:如何将数据从寄存器送入内存单元:
      mov bx,1000H
      mov ds,bx
      mov [0],al


    2  字的传送:
      8086cpu是16位结构,有16根数据线,所以一次性可以传送16位的数据,也就是一次性传送一个字(2个字节,2个16进制=1个字节,2个字节=4个16进制)
      比如:
        mov bx,1000H
        mov ds,bx
        mov ax,[0] //1000:0 处的字 型数据(一个字=2个字节)传入
        mov [0],cx //cx 中的16位数据送到1000:0处

      一个字型数据占2个单元,内存里面一个内存单元一个字节(8位)
      测试:

          

      修改命令是 e 1000:0 23 11 22 66

         

      写入命令( a CS:IP)

        

      t执行命令
        结果是

        

      分析说明:

        

    3: mov add , sub(减法)指令

      mov指令的几个形式:

        mov 寄存器,数据 比如 mov ax,8

        mov 寄存器,寄存器 比如 mov ax,bx

        mov 寄存器,内存单元 比如 mov ax,[0]

        mov 内存单元,寄存器 比如 mov [0],ax

        mov 段寄存,寄存器 比如 mov ds,ax

       add和sub形式和mov指令类似,

    说明:sub ax,ax和mov ax,0 功能一样;区别是  sub的机器码是2个字节,mov的机器码是3个字节

     小结:

    (1)字在内存中存储时,要在2个连续的内存单元(一个单元一个字节)来存放。字的低位字节存放在低地址单元中,高为字节存放在高地址单元中

    (2)用mov指令访问内存单元,可以在mov指令中给出单元的偏移地址,此时,段地址默认在DS寄存器中

    (3)[address]表示一个偏移地址为address的内存单元

    (4)在内存和寄存器之间传递 字型 数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器想对应

    (5)mov ,add,sub具有2个操作对象的指令,jmp是具有一个操作对象的指令

     

  • 相关阅读:
    java前端学习步骤
    安装Sublime Text 3插件的方法(转自Rising的博文)
    LibSVM学习详细说明
    class 2-3 小项目练习
    class 2-2 小项目练习
    class 2-1 小项目练习
    class 1-1 python开发环境配置
    Class
    class 10 文件和异常
    class
  • 原文地址:https://www.cnblogs.com/DonAndy/p/6090859.html
Copyright © 2011-2022 走看看