assembly 寄存器(内存访问)

assembly 寄存器(内存访问)

1.0 内存中字的存储

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

1.1 DS和[address]

  • CPU要读取一个内存单元的时候,必须要先给出这个内存单元的地址

  • 8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址

  • 下面三条指令将1000:0 中的数据读取到al中

  • mov bx, 1000
    mov ds, bx
    mov al,[0]
    
  • mov 指令还可以将一个内存单元中的内容送入到一个寄存器中

  • 执行指令时,8086CPU会自动读取DS中的数据为内存单元的段地址

  • 8086CPU不支持将数据直接写入段寄存中,需要通过通用寄存器来操作

1.2 字的传送

  • 因为8086CPU是16位的结构,有16根数据线,所有可以一次性传送16位数据,也就是一次性传送一个字

1.3 mov add sub指令

  • 已学mov指令的几种形式
  • mov 寄存器 数据
  • mov 寄存器 寄存器
  • mov 寄存器 内存单元
  • mov 内存单元 寄存器
  • mov 段寄存器 寄存器

1.4 栈 stack (重点)

  • 栈是一种具有特殊访问方式的存储空间,他的特殊就是后进先出,先进后出

  • 入栈

  • 入栈后

  • 出栈的方式

  • 栈有两个基本操作 入栈push,出栈pop 数据结构 后进先出

  • 8086CPU提供相关指令来以栈的方式访问空间

  • push ax 就是将 ax寄存器中的数据送入栈中

  • pop ax 就是将栈顶的数据取出放入ax寄存器中

  • 8086的入栈,出栈操作都是以字为单元进行的

  • 8086有连个寄存器

  • 段寄存器SS 存放栈顶的段地址

  • 段寄存器SP 存放栈顶地址的偏移地址

  • 任何时刻SS:SP执行栈顶元素

  • push ax sp=sp - 2 将ax中的内容送入SS:SP指向的内存单元处。SS:SP指向新的栈顶

  • pop ax 将栈顶元素取出放入ax中 sp = sp + 2 。SS:SP指向新的栈顶

  • 栈顶越界的问题 当栈满的时候在使用push指令或者栈空的时候在使用pop指令都会发生栈顶越界的问题

1.5 栈与内存

  • 栈空间当然也是内存的一部分,它只是一段可以以一种特殊形势进行访问的内存空间

1.6 栈段

  • 将一段内存当作栈段,仅仅是我们在编程中的一种安排,cpu是不会因为这种安排就在执行的时候自动的将我们的定义的栈段当作栈来访问
posted @ 2020-12-08 22:48  immortal_mode  阅读(147)  评论(0)    收藏  举报