【汇编语言】第 3 章 寄存器(内存访问)

版权声明:本文为 gfson 原创文章,转载请注明出处。
注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢。

3.1 DS 和 [address]

  • DS 寄存器,通常用来存放要访问的数据的段地址。
  • [...] 表示内存单元的偏移地址,DS 中数据为内存单元的段地址。

3.2 mov、add、sub 指令

  • mov 指令可以有以下形式:

    • mov 寄存器,数据
    • mov 寄存器,寄存器
    • mov 寄存器,内存单元
    • mov 内存单元,寄存器
    • mov 内存单元,段寄存器
    • mov 段寄存器,内存单元
    • mov 段寄存器,寄存器
    • mov 寄存器,段寄存器
  • add、sub 有以下几种形式:

    • add 寄存器,数据
    • add 寄存器,寄存器
    • add 寄存器,内存单元
    • add 内存单元,寄存器
    • sub 寄存器,数据
    • sub 寄存器,寄存器
    • sub 寄存器,内存单元
    • sub 内存单元,寄存器
  • add、sub 不能对段寄存器进行操作,如 add ds,ax 是非法的。

3.3 数据段

  • 将内存当作数据段。
  • 用 ds 存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。

3.4 检测点 3.1


  • 答案:
    第一题:



    第二题:


3.5 CPU 的栈机制

  • 栈顶的段地址存放在 SS 中,偏移地址存放在 SP 中。
  • 任意时刻,SS:SP 指向栈顶元素
  • push 和 pop 指令执行时,CPU 从 SS 和 SP 中获得栈顶的地址。
  • push ax 的执行:
  • pop ax 的执行:
  • 栈顶超界
    • 8086CPU 不保证我们对栈的操作不会超界。
    • 8086CPU 只知道栈顶在何处,而不知道我们安排的栈空间有多大。
    • 我们编程时,需要自己考虑栈越界的问题。

3.6 push、pop 指令

  • push 和 pop 指令的格式可以如下:
    • push 寄存器 ;将一个寄存器中的数据入栈
    • push 段寄存器 ;将一个段寄存器中的数据入栈
    • push 内存单元 ;将一个内存字单元处的字入栈(注意:栈操作都是以字为单位)
    • pop 寄存器 ;出栈,用一个寄存器接收出栈的数据
    • pop 段寄存器 ;出栈,用一个段寄存器接收出栈的数据
    • pop 内存单元 ;出栈,用一个内存字单元接收出栈的数据

3.7 栈段

  • 将内存当作栈段。
  • 将 SS:SP 指向我们定义的栈段。

3.8 数据段、代码段、栈段


  • 内存中到底是代码、数据还是栈,关键取决于 CPU 中寄存器的设置,即 CS、IP、SS、SP、DS 的指向

3.9 检测点 3.2


  • 答案:


3.10 实验 2


  • 答案:
    (1)略
    (2)在使用 t 命令进行单步追踪的时候,产生了中断,为了保护现场,CPU 将 PSW、CS 和 IP 依此入栈,导致了内存相关位置内容的改变。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容