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

    1- 字单元:即存放一个字符数据(16位)的内存单元,由两个地址连续的内存单元组成,高地址单元中存放字型数据的高位字节,低地址单元中存放字型数据的低位字节.我们将起始地址为N的字单元,简称N地址字单元.比如一个字单元由2,3两个内存单元组成,则这个字单元的起始地址为2,我们可以说这是2地址字单元.

    2- 地址单元中存放的字节型数据 地址单元占1字节

      地址字单元中存放的字型数据 地址字单元占2字节

    3- DS寄存器,通常来存放访问数据的段地址

     mov bx,1000H

     mov bs, bx

     mov al,[0] //[...]内存单元的偏移地址,1000H段地址

     将10000H(1000:0)中得数据,读入al中.

    4- 8086CPU 不支持将数据直接送入到段寄存器中(属于8086CPU硬件设计问题).如 mov ds,1000H (错) 需要转 mov bx,1000H mov ds,bx

    5- 将al中得数据送入到内存单元10000H中

     mov bx,1000H

     mov ds,bx

     mov [0],al

    6- 内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应.

    7- 栈:后进入先出 Last in First out

    8- SS:SP指向栈顶元素

    9- push ax (1) SP = SP -2 (2) ax中得内容,送入ss:sp指向的内存单元 (栈顶从高地址像低地址增长)

        pop ax (1) ss:sp指向的内存单元的数据放入ax (2) SP = SP +2

    10- 如果(10000H-10000FH)为空栈, ss:sp指向10010H 为最底部字单元的地址(E)+2,或者为最底部内存单元(F)+1 

    11- CPU没有设置栈顶越界的问题,要自己处理

    12- 在10000H写入字型数据2266H

      方法一:

      mov ax,1000H

      mov ds,ax

      mov ax,2266H

      mov [0],ax

      方法二:

      mov ax,1000H

      mov ss,ax

      mov sp,2

      mov ax,2266H

      push ax

      push,pop等栈操作指令,修改的只是SP,也就是说,栈顶的变化范围最大为:0~FFFFH 

    13- 任何时候SS:SP都指向栈顶元素

    14- 内存单元存放数据,定义为"数据段" 

      内存单元存放代码,定义为"代码段" 

      内存单元存放栈,定义为"栈段" 

    15- 一段内存既可以是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么都不是.关键在于CPU中寄存器的设置,即:CP,IP,SS,SP,DS的指向.

  • 相关阅读:
    数据压缩和归档
    数据持久化
    文件和目录的使用
    数据及数据处理
    data types
    string services
    logging模块
    指导
    比较两个NSDate类型的参数相差的时间差
    推送 iOS 10
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3528065.html
Copyright © 2011-2022 走看看