自学王爽老师《汇编语言》笔记——第3章 寄存器(内存访问)

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

3.1 内存中字的存储

  • CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。
  • 内存单元是字节单元,一个字要用两个地址连续的内存单元来存放。
  • 字单元:存放一个字的内存单元,由两个字节单元组成。
  • 高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
  • 任何两个地址连续的内存单元都可以将它们看成一个字单元。

3.2 DS和[address]

  • 8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址。
  • mov指令
    • 将数据直接送入寄存器
    • 将一个寄存器中的内容送入另一个寄存器
    • 将一个内存单元中的内容送入一个寄存器中
      • 格式:mov 寄存器名,内存单元地址
  • [...]表示一个内存单元,[]中的数字表示内存单元的偏移地址,段地址在ds寄存器中。
  • 8086CPU不支持将数据直接送入段寄存器的操作。 必须通过一个寄存器来进行中转。

3.3 字的传送

  • 8086CPU是16位结构,有16根数据线,所以可以一次性传送16位的数据,即可以一次性传送一个字。
  • 在mov指令中给出16位的寄存器就可以进行16位数据的传送了。

3.4 mov、add、sub指令

mov、add、sub指令形式:

mov指令 add指令 sub指令 参数
寄存器,数据
寄存器,寄存器
寄存器,内存单元
内存单元,寄存器
段寄存器,寄存器
寄存器,段寄存器

3.5 数据段

我们可以将一组长度为 N(N <= 64K) 、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。

3.6 栈

  • 栈是一种具有特殊访问方式的存储空间。特殊性在于最后进入这个空间的数据,最先出去。
  • 从程序化的角度来讲,应该有一个标记,这个标记一直指示栈顶。
  • 栈有两个基本操作:入栈和出栈

3.7 CPU提供的栈机制

  • 8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和POP(出栈)。
  • 字型数据用两个单元存放,高地址单元存放高8位,低地址单元存放低8位。
  • 栈顶的段地址存放在SS中,偏移地址存放在SP中。
  • 任意时刻,SS:SP指向栈顶元素
  • 8086CPU中,入栈时,栈顶从高地址向低地址方向增长。
    1. SP = SP - 2
    2. 将寄存器中的内容压入SS:SP指向的内存单元处。
  • 由于 “任意时刻,SS:SP指向栈顶元素”,所以当栈为空的时候,栈中没有元素,也就不存在栈顶元素,所以SS:SP指向栈的最底部单元下面的单元。
  • pop指令执行
    • 将SS:SP指向的内存单元的数据传入寄存器中。
    • SP = SP + 2

3.8 栈顶超界的问题

8086CPU不保证我们对栈的操作不会越界。

3.9 push、pop指令

push和pop指令形式:

push pop 参数
寄存器
段寄存器
内存单元
  • 栈顶的变化范围最大为:0~FFFFH。

3.10 栈 段

  • 我们可以将长度为N(N <= 64KB)的一组地址连续、起始地址为16的倍数的内存单元,当作栈空间来使用,从而定义了一个栈段。
  • 将一段内存当作栈段,仅仅是我们在编程时的一种安排。

实验2 用机器指令和汇编指令编程

Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧跟着被执行。

#汇编语言##自学##读书笔记#
全部评论

相关推荐

一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务