• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-03-28 07:05 Aet 隐藏边栏 |   抢沙发  11 
文章评分 3 次,平均分 5.0

汇编

寄存器和内存访问部分。

字的存储

  1. CPU中,用16位的寄存器来存储一个字
  2. 寄存器的高8位(高位单元)存放字的高位字节,寄存器的低8位(低位单元)存储字的低位字节
  3. 由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放
  4. 字单元,即存放一个字型数据的内存单元,由两个地址连续的内存单元组成

DS和[address]

  1. CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址
  2. 8086PC中,内存单元由段地址+偏移地址组成
  3. 8080CPU中,DS寄存器通常用来存放要访问数据的段地址
    1. mov bx,1000H,mov ds,bx,mov al,[0]
    2. 其中,[0]表示一个内存单元,0表示内存单元的偏移地址
    3. 但是只有偏移地址没用段地址,是无法定位一个内存单元的
    4. 其实,执行指令时,8086CPU自动取ds寄存器中的数据为内存单元的段地址
  4. 8086CPU不支持将数据直接送入段寄存器的操作
    1. 所以,类似mov ds,1000H这样的操作是非法的
    2. 因而,需要一个通用寄存器来中转,如mov bx,1000H,mov ds,bx

字的传送

  1. 8086CPU是16位机构,有16根数据线,可以一次传送16位的数据
  2. 也就是说,可以一次传送一个字

访问数据段中的数据

  1. 将一段内存当作数据段
  2. 用ds存放数据段的段地址
  3. 根据需要,用相关指令访问数据段中的具体单元

  1. 栈是一种具有特殊的访问方式的存储空间
  2. 特殊之处在于,最后进入这个空间的数据,最先出去
  3. 从程序化的角度,应该有一个标记一直指示着栈顶

CPU提供的栈机制

  1. 8086CPU提供相应的指令来以栈的方式访问内存空间
    1. 基于8086编程的时候,可以将一段内存当作栈来使用
  2. 8086CPU提供入栈和出栈指令
    1. push是入栈
    2. pop是出栈
    3. 8086CPU的入栈和出栈操作都是以字为单元进行的
  3. 8086CPU中,有两个寄存器用来标记栈顶位置
    1. 段寄存器SS存放栈顶的段地址
    2. 寄存器SP存放对应的偏移地址
  4. 任意时刻,SS:SP指向栈顶元素
  5. 而push和pop指令执行时,CPU从SS:SP中得到栈顶的位置

栈顶越界的问题

  1. 8086CPU用SS和SP来指示栈顶的位置,并提供了push和pop命令来实现入栈和出栈操作
  2. 那么如何保证入栈出栈时,栈顶不会超出栈空间?
    1. 当栈满或栈空的时候,再使用push或pop指令,都将发生栈顶越界问题
    2. 8086CPU中并没有可以记录栈顶上限和栈底下限的寄存器
    3. 我们要自己操心栈顶越界的问题

push和pop

  1. 这两个指令是可以在寄存器和内存之间传送数据的
  2. push 寄存器
  3. push 段寄存器
  4. push 内存单元

栈段

  1. 将一段内存当作栈段,仅仅是我们编程时的一种安排,CPU并不会由于这种安排,就在执行push和pop指令时就将自动将我们定义的栈段当作栈空间来访问

指令功能

mov

  1. 将数据直接送入寄存器
  2. 将一个寄存器的内容送入另一个寄存器
  3. mov 寄存器 数据
  4. mov 寄存器 寄存器
  5. mov 寄存器 内存单元
  6. mov 内存单元 寄存器
  7. mov 段寄存器 寄存器
  8. mov 段寄存器 内存单元
  9. mov 寄存器 段寄存器

add

  • 和mov类似

sub

  • 和mov类似

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享