2025年进程控制块的作用(进程控制块的作用及其初始化工作过程)

进程控制块的作用(进程控制块的作用及其初始化工作过程)CPU 中 用 16 位寄存器来存储一个字 高 8 位存放高位字节 低 8 位存放低位字节 内存单是字节单 一个单存放一个字节 一个字要用两个地址连续的内存单来存放 用 0 1 两个内存单存放数据 20000 4E20H 0 是低地址单 1 是高地址单 CPU 读写一个内存单的时候 必须先给出这个内存单的地址 8086CPU 中有一个 DS 寄存器 通常用来存放要访问数据的段地址 读取 10000H 将 10000H 1000 0 中的数读到 al 中 表示一个内存单




CPU中,用16位寄存器来存储一个字。

高8位存放高位字节,低8位存放低位字节。

内存单元是字节单元(一个单元存放一个字节),一个字要用两个地址连续的内存单元来存放。

《汇编语言》笔记 寄存器(内存访问)_出栈

用0、1两个内存单元存放数据20000(4E20H)

0是低地址单元 1是高地址单元

CPU读写一个内存单元的时候,必须先给出这个内存单元的地址。

8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址。

读取10000H

将10000H(1000:0)中的数读到al中

[]表示一个内存单元,[]中的值表示内存单元的偏移地址

10000H 用段地址和偏移地址表示为 1000:0,我们先将段地址 1000H 放入 ds,然后用 mov al,[0]完成传送。mov 指令中的门说明操作对象是一个内存单元,[中的0说明这个内存单元的偏移地址是 0,它的段地址默认放在 ds 中,指令执行时,8086CPU 会自动从ds中取出。

将al中的数据送入内存单元10000H中

只要在mov指令中给出16位的寄存器就可以进行16位数据的传送

问题:

内存中的情况为

《汇编语言》笔记 寄存器(内存访问)_数据_02


执行项目的指令后寄存器ax,bx,cx中的值为什么

《汇编语言》笔记 寄存器(内存访问)_笔记_03

问题

《汇编语言》笔记 寄存器(内存访问)_出栈_04

《汇编语言》笔记 寄存器(内存访问)_数据_05

mov指令的形式

add指令

sub指令

对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将一组长度为 N≤64KB)、地址连续、起始地址为 16 的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。比如用 123BOH~123B9H 这段内存空间来存放数据,我们就可以认为,123B0H~123B9H 这段内存是一个数据段,它的段地址为 123BH,长度为 10个字节。

《汇编语言》笔记 寄存器(内存访问)_数据_06

《汇编语言》笔记 寄存器(内存访问)_数据_07

栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。

《汇编语言》笔记 寄存器(内存访问)_数据_08

《汇编语言》笔记 寄存器(内存访问)_数据_09

8086CPU提供入栈和出栈指令 PUSH POP

push ax 表示将寄存器 ax 中的数据送入栈中,pop ax 表示从栈顶取出数据送入 ax。

8086CPU 的入栈和出栈操作都是以字为单位进行的。

《汇编语言》笔记 寄存器(内存访问)_汇编_10

8086CPU 中,有两个寄存器,段寄存器SS 和寄存器 SP,栈顶的段地址存放在 SS 中,偏移地址存放在 SP 中。任意时刻,SS:SP 指向栈顶元素。push 指令和pop 指令执行时,CPU 从 SS 和 SP 中得到栈顶的地址。

《汇编语言》笔记 寄存器(内存访问)_汇编_11

《汇编语言》笔记 寄存器(内存访问)_笔记_12

将 10000H~1000FH 这段空间当作栈段,SS=1000H,栈空间大小为16 字节,栈最底部的字单元地址为 1000:000E。任意时刻,SS:SP指向栈顶,当栈中只有一个元素的时候,SS=1000H,SP-000EH。栈为空,就相当于栈中唯一的元素出栈,出后,SP-SP+2,SP 原来为000EH,加2后 SP=10H,所以,当栈为空的时候,SS=1000H,SP=10H。

换一个角度看,任意时刻,SS:SP 指向栈顶元素,当为空的时候,中没有元素也就不存在栈顶元素,所以 SS:SP 只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2,栈最底部字单元的地址为 1000:000E,所以栈空时,SP-0010H.

pop ax 的执行过程和 push ax 刚好相反,由以下两步完成。

(1)将 SS:SP 指向的内存单元处的数据送入 ax 中;

(2)SP=SP+2,SS:SP 指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。

《汇编语言》笔记 寄存器(内存访问)_数据_13

《汇编语言》笔记 寄存器(内存访问)_笔记_14

《汇编语言》笔记 寄存器(内存访问)_寄存器_15

当栈满的时候再使用 push 指令入栈,或栈空的时候再使用 pop 指令出栈,都将发生栈顶超界问题。

8086CPU 不保证我们对栈的操作不会超界。这也就是说,8086CPU只知道栈顶在何处(由 SS:SP 指示),而不知道我们安排的栈空间有多大。这点就好像 CPU 只知道当前要执行的指令在何处(由 CS:IP 指示),而不知道要执行的指令有多少。从这两点上我们可以看出 8086CPU 的工作机理,它只考虑当前的情况:当前的栈顶在何处、当前要执行的指令是哪一条。

我们在编程的时候要自己操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。


编程小号
上一篇 2025-02-25 22:21
下一篇 2025-04-06 07:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/50114.html