• 汇编语言之第三章寄存器(内存访问)


    3.1 内存中字的存储

      cpu中用16位寄存器储存一个字,高八位储存高位字节,低八位储存低位字节。字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。我们将起始地址为N的字单元简称N地址字单元。

    3.2DS和address

      地址由段地址和偏移地址构成。DS寄存器,存放要访问数据的段地址。【....】表示内存单元的偏移地址。8086CPU将自动取出DS的数据作为内存单元的段地址。

    注意,因为DS是一个短寄存器,所以不能把数据直接送入DS中,可以通过一个一般的寄存器进行中转一下。

    3.3字的传送

    一个字为16位数据,在mov指令中给出16位储存器就可以进行16位数据的传送。用mov要注意,两个操作数长度要一致,内存单元间不能传送,不能使用mov修改cs,ip的值。

    3.4mov,add,sub指令

      mov,sub,add指令都有两个操作对象,

      指令  寄存器  数据

      指令  寄存器  寄存器

      指令  寄存器  内存单元

      指令  内存单元  寄存器

      指令  段寄存器  寄存器

    jmp是具有一个操作对象的指令

    3.5数据段

      将一组长度为N<=64kb,地址连续,起始地址为16的倍数的内存单元当做专门存储数据的内存空间,从而定义一个数据段。

    3.6栈

      栈:进栈,出栈。后进先出

    3.7CPU提供的栈机制

      8086CPU的入栈出栈已字为单位。段寄存器SS,寄存器SP,任意时刻SS:SP指向栈顶元素。push 进栈指令,pop出栈指令

    3.8栈顶超界的问题

      8086CPU不保证对栈的操作不会超栈。当栈满时使用push 指令入栈,当栈空时使用pop指令出栈,都会栈顶出栈。

    出栈是危险的,会修改其他数据,发生意外

    3.9push,pop指令

      后可跟段寄存器,寄存器,内存单元

     

    3.10栈段

      将一组长度为N<=64kb,地址连续,起始地址为16的倍数的内存单元当做专门存储数据的内存空间,当做一个栈空间,从而定义一个栈段,最大容量为64kB

      数据段,将段地址放在DS寄存器

      代码段,将段地址放在CS寄存器

      栈段,将段地址放在SS寄存器

  • 相关阅读:
    设计模式-解释器模式
    安卓运行环境(四)
    安卓创建应用窗口(三)
    微型 ORM 的第二篇 DapperLambda性能测试[Dapper比较篇]
    微型 ORM 的第一篇 DapperLambda发布
    visual studio 2013 使用IIS Express附加调试MVC5
    数据库常用查询语句写法(优化)
    Windows Server 2008通过计划任务定时执行bat文件
    第一章 Memcached安装
    第四章 LINQ to SQL基本用法
  • 原文地址:https://www.cnblogs.com/bowentianxia/p/9841700.html
Copyright © 2020-2023  润新知