全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 存储技术 >

汇编语言之内存访问(寄存器)

时间:2023-09-20 14:47

人气:

作者:admin

标签:   内存  汇编语  言之  访问 

导读:CPU中用16位寄存器来存储一个字(1 word = 2 bytes = 16 bits). 其中高8位存放高字节, 低8位存放低字节...

内存存储方式

CPU中用16位寄存器来存储一个字(1 word = 2 bytes = 16 bits). 其中高8位存放高字节, 低8位存放低字节. 如下图, 用0 , 1两个内存单元存放数据20000(4E20H).

图片

DS和[address]

  1. CPU读写一个内存单元时,必须要先给出这个内存单元的地址.
  2. 内存地址由段地址偏移地址组成.
  3. 数据段寄存器DS( Data Segment ), 用来存放要访问数据的段地址.
mov BX, 1000H  #向BX寄存器中写入1000H
mov DS, BX     #将BX寄存器中的值移入DS寄存器
mov AL,[0]     #将地址单元1000h:0中的值移入AX寄存器中的低位.
#"[]"说明操作对象是一个内存单元
  1. "[...]"表示一个内存单元, [0] 表示内存单元的偏移地址为0. 在执行指令时8086CPU自动读取DS寄存器中的数据作为内存单元的 段地址 .
  2. 因为8086CPU的硬件设计无法使用mov指令直接对DS寄存器写入数据.
  3. 段寄存器:
  • 代码段寄存器CS(Code Segment).
  • 数据段寄存器DS(Data Segment).
  • 堆栈段寄存器SS(Stack Segment).
  • 附加段寄存器ES(Extra Segment).
    例题:

图片

mov、add、sub指令

  1. mov
    • mov 段寄存器, 寄存器.
    • mov 寄存器, 段寄存器.
    • mov 内存单元, 寄存器.
    • mov 内存单元, 段寄存器.
    • mov 段寄存器, 内存单元.
  2. add和sub
    • 不能对段寄存进行操作.

CPU提供的栈机制

  1. 栈(stack), 有两个基本操作: LIFO(Last In First Out)
    1. 入栈: 将新元素放入栈顶.
    2. 出栈: 从栈顶取出一个元素.
  2. 8086CPU提供入栈(PUSH)和出栈(POP)指令. 例如:
    1. push ax : 表示将寄存器ax中的数据送入栈中.
    2. pop ax : 表示从栈顶取出数据送入ax.
  3. 注意: 在8060CPU中push/pop操作都是以word(16 bits)为单位. 图例:
    图片
  4. CPU如何知道栈顶的地址?
    1. 8086CPU中有两个寄存器:
      • 段寄存器SS.
      • 寄存器SP.
        *任意时刻,SS:SP 都指向栈顶元素.

push、pop指令

1. push/pop 寄存器
2. push/pop 段寄存器
3. push/pop 内存单元
  1. 将10000H~1000FH这段空间作为栈, 初始栈是空的, 将AX, BX, DS中的数据入栈.
分析:
1. 需要设置栈空间.则需要设置SS:SP.
2. push AX BX DS.
代码:
mov ax, 1000   ;将段地址写入寄存器ax.
mov ss, ax     ;将ax寄存器中的值写入ss段寄存器.
mov sp, 0010   ;将偏移地址写入sp寄存器.


;将AX, BX, DS中的数据入栈
push ax
push bx
push ds

栈段

  • 栈段就是将一组地址连续, 起始地址为16的倍数的内存单元当作栈空间来使用.
  • 栈段的最大容量为64KB. 因为在执行push, pop指令时只修改SP, 而SP的变化换位是0-FFFFH, 所以为64KB.
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信