汇编语言读书笔记 Day 15

知识点

  1. 8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和POP(出栈)。
  2. 8086CPU的入栈和出栈操作都是以字为单位进行的。
  3. 8086CPU是如何知道内存里某一区间是栈的?

8086CPU中,有两个寄存器,段寄存器ss和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP 指向栈顶元素。

  1. 8086CPU存在栈顶超界的问题,当栈满的时候再使用push指令入栈,或栈空的时候再使用pop指令出栈,都将发生栈顶超界问题。
  2. 8086CPU不保证我们对栈的操作不会超界。这也就是说,8086CPU只知道栈顶在何
    处(由SS:SP指示),而不知道我们安排的栈空间有多大。

问题3.7

编程,将10000H~1000FH 这段空间当作栈,初始状态栈是空的,将AX、BX、DS中的数据入栈。

代码

mov ax, 1000H
mov ss, ax
mov ax, 0010H
mov sp, ax
push ax
push bx
push ds

解析

  1. 前4行代码用于设定10000H~1000FH为栈,SP = 0010H,其计算过程是:
    SP = 1000FH - 10000H + 1 = 0010H
mov ax, 1000H
mov ss, ax
mov ax, 0010H
mov sp, ax

问题3.8

编程:
(1)将10000H~1000FH这段空间当作栈,初始状态栈是空的;
(2)设置AX=001AH,BX=001BH;
(3)将AX、BX中的数据入栈;
(4) 然后将AX、BX清零;
(5)从栈中恢复AX、BX原来的内容。

代码

mov ax, 1000H
mov ss, ax
mov ax, 0010H
mov sp, ax
mov ax , 001AH
mov bx, 001BH
push ax
push bx
mov ax, 0H
mov bx, 0H
pop bx
pop ax
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 栈 栈:是一种具有特殊的访问方式的存储空间(后进先出, Last In Out Firt,LIFO) 8086会将...
    番薯大佬阅读 512评论 0 0
  • 最近在读王爽版的《汇编语言》,把需要记录的内容记录在这里。 第一章 基础知识 编译器:将汇编指令转换成机器指令的翻...
    wshxj123阅读 784评论 0 1
  • 8086的寻址方式 CPU访问内存单元时,要给出内存单元的地址,所有的内存单元都有唯一的地址,叫做物理地址 808...
    hfzhangzhang阅读 1,023评论 0 0
  • 黑色的海岛上悬着一轮又大又圆的明月,毫不嫌弃地把温柔的月色照在这寸草不生的小岛上。一个少年白衣白发,悠闲自如地倚坐...
    小水Vivian阅读 3,133评论 1 5
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,324评论 0 13