0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:一口吃成大胖纸 作者:一口吃成大胖纸 2023-09-20 14:47 次阅读

内存存储方式

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.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5042

    浏览量

    117788
  • 存储器
    +关注

    关注

    38

    文章

    7154

    浏览量

    162034
收藏 人收藏

    评论

    相关推荐

    【转】汇编语言入门教程

    使用的那一种。寄存器学习汇编语言,首先必须了解两个知识点:寄存器内存模型。先来看寄存器。CPU 本身只负责运算,不负责储存数据。数据一般
    发表于 01-16 11:06

    汇编语言长什么样子的呢

    文章目录汇编语言长什么的样子呢?ARM汇编指令条件和状态Status码ARM汇编寻址方式数据操作(ALU操作)逻辑操作(与,或,非,异或)比较操作汇编语言长什么的样子呢?举例:向
    发表于 12-14 07:28

    汇编语言常用的寄存器有哪几种?

    汇编语言常用的寄存器有哪几种?
    发表于 01-18 07:51

    如何用C语言寄存器汇编语言去实现流水灯

    目录一、初始化1、地址映射和寄存器映射2、接线3、程序下载二、用C语言寄存器实现流水灯三、汇编语言实现流水灯四、心得一、初始化1、地址映射和寄存器
    发表于 02-10 07:55

    ARM汇编语言与指令格式资料分享

    1、ARM汇编语言与指令格式介绍汇编语言介绍概念指的是用助记符代替操作码,用地址符号或标签(:#&)代替地址码的编程语言。优缺点优点:可以直接访问硬件目标,代码简短,执行速度快
    发表于 04-22 16:10

    汇编语言教程-段寄存器的说明语句

    汇编语言教程-段寄存器的说明语句   在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这
    发表于 03-27 17:17 1258次阅读

    汇编语言

    汇编语言举例,比如读寄存器内容的源代码、汇编语言制作的光带菜单及源程序、获得操作系统版本的汇编源代码等
    发表于 12-31 10:40 29次下载

    51单片机汇编语言教程_单片机的特殊功能寄存器

    51单片机汇编语言教程:7课单片机的特殊功能寄存器
    发表于 01-19 15:26 0次下载

    寄存器Load/Store内存访问指令

    5.4 多寄存器Load/Store内存访问指令 多寄存器Load/Store内存访问指令也叫批
    发表于 10-18 15:56 1次下载

    汇编语言学习

    寄存器 一个cpu有多个寄存器 就是cpu中可以存储数据的器件,一个cpu中有多个寄存器汇编语言由一下3类组成 1、汇编
    发表于 11-23 18:06 14次下载
    <b class='flag-5'>汇编语言</b>学习

    [从零学习汇编语言] -寄存器详解

    文章目录前言一、 存储器与通用寄存器1. 存储器2. 通用寄存器前言上一章我们曾简单的介绍过计算机中的一些硬件和软件的相关概念,还不熟悉的小伙伴可以点击下面的链接进行预习:[汇编语言] -
    发表于 11-26 20:51 8次下载
    [从零学习<b class='flag-5'>汇编语言</b>] -<b class='flag-5'>寄存器</b>详解

    [从零学习汇编语言] - 寄存器内存访问

    [从零学习汇编语言] - 寄存器内存访问
    发表于 11-26 20:51 12次下载
    [从零学习<b class='flag-5'>汇编语言</b>] - <b class='flag-5'>寄存器</b>与<b class='flag-5'>内存</b><b class='flag-5'>访问</b>

    深度剖析ARM内核寄存器及基本汇编语言1

    M3/M4内核寄存器 * 1.2 A7内核寄存器 * 1.3 ARM中的PC指针的值 * 二、ARM汇编语言
    的头像 发表于 04-24 09:59 666次阅读
    深度剖析ARM内核<b class='flag-5'>寄存器</b>及基本<b class='flag-5'>汇编语言</b>1

    深度剖析ARM内核寄存器及基本汇编语言2

    M3/M4内核寄存器 * 1.2 A7内核寄存器 * 1.3 ARM中的PC指针的值 * 二、ARM汇编语言
    的头像 发表于 04-24 10:00 800次阅读
    深度剖析ARM内核<b class='flag-5'>寄存器</b>及基本<b class='flag-5'>汇编语言</b>2

    深度剖析ARM内核寄存器及基本汇编语言3

    M3/M4内核寄存器 * 1.2 A7内核寄存器 * 1.3 ARM中的PC指针的值 * 二、ARM汇编语言
    的头像 发表于 04-24 10:01 842次阅读
    深度剖析ARM内核<b class='flag-5'>寄存器</b>及基本<b class='flag-5'>汇编语言</b>3