zoukankan      html  css  js  c++  java
  • [汇编语言学习笔记][第三章寄存器(内存访问)]

    第三章 寄存器(内存访问)

    3.1 内存中字的存储

    字单元:即存放一个字型数据(16位)的内存单元,由两个连续的内存单元组成。

    在以后我们称起始地址为N的字单元简称为N地址字单元

    3.2 DS和[address]

    DS寄存器,通过用来存放要访问数据的段地址。

    • 只能通过mov ds 寄存器修改ds的值
    • [address]代表偏移地址,光有偏移地址不能访问内存,段地址通过ds得到

    例子:

    mov bx,1000H
    mov ds,bx
    mov al,[0]

    3.5 数据段

    当需要对数据段进行操作的时候,将ds 指向段地址,然后就能对其中的单元进行操作。

    • 对字节数据的访问

      add ax,[0]
      add ax,[1]
      add ax,[2]
    • 对字长数据的访问

      add ax,[0]
      add ax,[2] 

    3.7 CPU提供的栈操作

    • SS:SP,存储栈指针的寄存器,时刻指向栈顶

      • SS :段地址

      • SP : 偏移地址、

    • 注意区分栈区指针是向上,还是向下走的,传统X86 CPU是向下走的,即高地址走向低地址(当sp变为0的时候能确认溢出

    • CPU 不会保证栈不溢出,需要注意栈的长度,但是貌似这种方式不好判断栈空

    • 栈的长度 通过设置sp确定

    • sp,ss 能够被 mov 修改,而cs,ip只能被jmp 修改(这是肯定的啊,因为特么cs,ip是指令指针,他改变了,就等于进行跳转,所以是jmp

    3.10 栈段

    • 一个比较有意思的问题,纠正我对栈指针的一个错误认识

      如果将 10000H~1FFFFH 这段空间当作栈段,初始状态栈是空的,此时SS=1000H,SP=?

      我的答案:FFFFH

      正确答案:0000H,我的错误在于我认为栈指针指向的是栈顶元素上面一个内存空间,而实际上栈指针指向的就是栈顶元素,所以假设有一个元素,那么sp=FFFEH,当这个元素被pop掉后,sp=sp+2 变为0000H。

    总结

    所谓段只是人们确定的一种规定,数据段,代码段,栈段。

    一段内存,即可以是代码的存储空间,也可是是栈的存储空间,也可以是数据的存储空间,也可是什么都不是,一切在于CS,IP,SS,SP,DS的指向

  • 相关阅读:
    jQuery UI炫酷雨滴落在水面上的波纹涟漪特效
    mysql_jdbc
    数据库设计---合适的就是最好的
    谈谈 .NET Reflector
    整型反序
    iOS给Model排序
    php安装zendDebug
    zTree实现地市县三级级联封装类
    rnnlm源代码分析(八)
    CSS制作响应式正方形及其应用
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480524.html
Copyright © 2011-2022 走看看