微处理器的结构和工作模式
8086CPU的内部结构
两大部分:
- 总线接口单元
BIU(Bus Interface Unit)
:与外部存储器以及I/O端口之间交换顺序,有段寄存器、6字节指令队列。 - 指令执行单元
EU(Execution Unit)
:负责执行指令,有通用寄存器和运算器ALU
20位地址总线,16位数据总线
8086的内部寄存器
数据寄存器
8086内部有4个16的数据寄存器:AX、BX、CX和DX,可以用来存放16位数据或地址信息,X为H时是高八位,X为L时是低八位,此时只用来存放8位数据不存放地址信息。
AX (Accumulator)
:用于算术和逻辑操作。BX (Base)
:可用作索引(偏移量)。CX (Counter)
:用于循环和字符串操作。DX (Data)
:用于I/O操作和一些乘法和除法操作。
指针寄存器
地址指针
SP (Stack Pointer)
:指向栈顶。BP (Base Pointer)
:用于数据存储和内存访问。
变址寄存器
SI (Source Index)
:源索引,通常用于字符串操作,在进行数据移动或字符串操作等任务时,SI寄存器通常与数据段寄存器(DS)配合使用。- 例如,在执行
MOVSB
(Move String Byte)这样的字符串操作时,DS:SI组合会指向要复制的源字符串。
- 例如,在执行
DI (Destination Index)
:目标索引,也常用于字符串操作,DI寄存器通常与附加段寄存器(ES)配合使用。- 例如,在执行
MOVSB
(Move String Byte)指令时,ES:DI组合会指向目标地址,即数据要被复制到的地方。
- 例如,在执行
段寄存器
CS (Code Segment)
:存储代码段的基地址。DS (Data Segment)
:存储数据段的基地址。SS (Stack Segment)
:存储栈段的基地址。ES (Extra Segment)
:附加段,通常用于字符串操作。
指令指针
IP (Instruction Pointer)
:存储即将执行的下一条指令的地址。IP寄存器与代码段寄存器(Code Segment,简称CS)配合使用,形成一个完整的线性地址,用以确定下一条要执行的指令的准确位置。即完整的地址是由CS:IP
这对寄存器组合形成的。
标志寄存器
9个标志位
- 进位标志
CF(Carry Flag)
:进行算数加减运算时,最高位向前进一位产生进位或者借位时,CF=1,否则CF=0,只有在两个无符号数进行加减运算时,CF标志才有意义;移位操作也讲影响CF标志;执行STC指令可使CF置1,CLC指令使CF清0,CMC指令使CF标志取反。 - 奇偶校验标志
PF(Parity Flag)
:PF标志也称偶标志,若本次运算结果低8位有偶数个1则PF=1否则为0。 辅助进位标志
AF(Auxiliary Flag)
:AF标志也称为半进位标志。在BCD加减运算中,若低4位向高4位进位或借位时就是AF=1,否则AF=0。当AF=1时,要对结果进行修正,执行加法调整指令DAA或减法调整指令DAS,会自动测试AF对BCD码加法或减法运算结果进行修正- 减法出错时减6调整
- 加法出错时加6调整
- 零标志
ZF(Zero Flag)
:当结果为0时,ZF=1;否则ZF=0,常用来测试两数是否相等。 - 符号标志
SF(Sign Flag)
:也称为负标志。若运算结果最高位为1则SF=1,否则SF=0表示该数为正数。 - 溢出标志
OF(Overflow Flag)
:当有符号数学运算产生溢出时,OF=1;没有溢出时,OF=0。
3个控制标志
- 陷阱标志
TF(Trap Flag)
:通过DEBUG指令或操作系统调用进行设置,用于单步跟踪。开启单步执行时,TF=1;关闭时,TF=0。 - 中断标志
IF(Interrupt Flag)
:IF=1时允许CPU响应非屏蔽中断,IF=0时禁止。执行STI使IF=1,CLI使IF=0。 方向标志
DF(Direction Flag)
:用于控制字符串操作指令中地址指针变化的方向。- 0:字符串操作从低地址到高地址,每次操作后SI、DI自动递增
- 1:字符串操作从高地址到低地址,每次操作后SI、DI自动递减
- CLD指令清0
- STD指令置1
寄存器的配合
SP、BP、SI、DI
这组地址指针和变址寄存器加上基址寄存器BX
,可与段寄存器
配合使用,一起构成内存的物理地址:
数据寄存器与段寄存器:
- 通常,数据段(DS)寄存器与数据寄存器(AX、BX、CX、DX)配合,用于数据存储和访问。
- 例如,
MOV AX, [DS:BX]
将数据段DS和BX寄存器的组合地址中的值移动到AX寄存器。
指针寄存器与段寄存器:
- 栈段(SS)通常与栈指针(SP)和基指针(BP)配合,用于栈操作。
- 例如,
PUSH AX
实际上是使用SS和SP寄存器将AX寄存器的内容推到栈上。
索引寄存器与段寄存器:
- 数据段(DS)通常与源索引(SI)和目标索引(DI)配合,用于字符串和数组操作。
- 例如,在串复制(String copy)操作中,可以使用
MOVSB
指令,该指令使用DS:SI作为源地址,ES:DI作为目标地址。
代码段与指令指针:
- 代码段(CS)与指令指针(IP)配合,用于跟踪即将执行的指令。
- 执行一条跳转指令(例如
JMP
)时,会更改IP寄存器的值,而CS:IP的组合则确定了下一条要执行的指令的准确位置。
额外的段寄存器(ES):
- ES(Extra Segment)通常用作一个附加的数据段,与DI(Destination Index)配合,特别是在字符串和块操作中。
8086CPU的引脚功能
$AD_{15}\sim AD_{0}$ (Address Data Bus)
- 地址/数据总线,双向、三态、分时复用信号。
- 在T1周期内,这些引脚用作地址总线。地址被放置在这些引脚上以指示内存或I/O位置。在8086中,地址总线宽度为20位(由A0-A19组成),但因为只有16个引脚(AD15~AD0),因此需要一个额外的地址锁存器以产生完整的20位地址。
- 在T2,T3或TW时钟周期,在这些周期内,引脚变为数据总线用于数据的读取或写入。这是一个16位的双向数据总线,可以同时读写16位(一个字)或8位(一个字节)数据。
$A_{19}/S_6\sim A_{16}/S_{3}$(Address/Status)
- 在T1时钟周期(即第一个时钟周期)中,这些引脚用作地址总线的高位(A19至A16)。8086有20位的地址总线(A19-A0),这4位用于生成内存或I/O设备的完整地址。
在其他时钟周期(T2、T3、T4等)中,这些引脚用作状态输出(S6至S3)。
- s6总是低电平
- s5=1时允许可屏蔽中断,s5=0时禁止该中断
s4s3用来指出当前在访问哪个段服务器
s4 s3 使用的寄存器 0 0 ES 0 1 SS 1 0 CS 1 1 DS
$\overline{RD}$(Read)
读控制信号,低电平时允许CPU从存储器或I/0端口读出数据。
$\overline{WR}$(Write)
写信号,低电平有效,允许CPU对存储器或I/O端口进行写入操作
$M/\overline{IO}$(Memory/Input and Output)
存储器或I/O端口控制信号,高电平CPU访问存储器,低电平CPU访问I/O端口
注:8088是$IO/\overline{M}$
CLK(Clock)
提供CPU的时钟信号。
RESET
复位信号,至少持续4个时钟周期。DS,ES,SS,FLAGS,IF清零,CS:IP=FFFF:0000H。
复位结束后,转到FFFF0H执行命令
- INTR(Interrupt Request)
可屏蔽中断请求信号,高电平有效,INTR=1&IF=1时执行中断服务程序,INTR=1&IF=0时不执行
NMI(Non-Maskable Interrupt)
不可屏蔽中断请求信号,上升沿触发
$\overline{INTA}$(Interrupt Acknowledge)
中断响应信号,低电平有效,是CPU响应外部可屏蔽中断请求后,向外设发出的回答信号
HOLD(Hold Request)和HLDA(Hold Acknowledge)
总线保持请求和总线保持响应信号,用于DMA操作
ALE(Address Latch Enable)
地址锁存信号,高电平有效,用作地址锁存器的控制信号
$DT/\overline{R}$(Data Transmit/Receive)
数据发送/接收信号,用来控制数据收发器(缓冲器)传送数据的方向。
为1时CPU向外传送数据进行写操作
为0时CPU向内传送数据进行读操作
$\overline{DEN}$(Data Enable)
数据允许信号,是数据收发器的控制信号,为0时才允许CPU发送和接收数据
READY
准备就绪信号,若该信号为0,表示存储器或者I/O接口为准备好,CPU进入T3结束后的TW等待周期知道READY变为1
$\overline{TEST}$
测试信号
下面介绍24~31的最大模式信号
$QS_1 QS_0$ (Instruction Queue Status)
指令队列状态信号,用来指示CPU中指令队列的当前状态。
$QS_1$ $QS_0$ 状态 0 0 无操作 0 1 从指令队列中取第一个字节 1 0 队列已空 1 1 从指令队列取出后续字节 $\overline{S}_2 \sim \overline{S}_0$(Bus Cycle Status)
总线周期状态信号
$\overline{S}_2$ $\overline{S}_1$ $\overline{S}_0$ 指令队列状态 0 0 0 中断响应信号 0 0 1 读I/O端口 0 1 0 写I/O端口 0 1 1 暂停(HALT) 1 0 0 取指令 1 0 1 读存储器 1 1 0 写存储器 1 1 1 无总线周期 $\overline{LOCK}$
总线封锁信号。
低电平时不允许其他主控者(如DMA)获得对主线的控制权
$\overline{RQ}/\overline{GT_1}$、$\overline{RQ}/\overline{GT_0}$(Request/Grant)
总线请求信号输入/总线请求允许信号输出。
允许CPU以外的处理器向CPU发出使用总线的请求信号和接收CPU对总线请求信号的回答信号。
都是双向信号,低电平有效。
$\overline{BHE}/S_7$(Bus High Enable/Status)
高8位总线允许/状态信号,8086中低电平时,在读/写操作期间,高8位数据总线D15~D0有效。
状态位S7始终为1
$\overline{SS_0}$(HIGH)
8088中的最小模式/最大模式复用信号
- 最小模式下,其相当于最大模式的$\overline{S_0}$,$IO/\overline{M}$、$DT/\overline{R}$、$\overline{SS_0}$组合产生的总线类型与$\overline{S}_2 \sim \overline{S}_0$组合产生的信号一样
- 最大模式下,始终为逻辑1
$MN/\overline{MX}$(Minimum/Maximum)
最小/最大模式选择信号,接+5V时是最小模式,接地时是最大模式
$V_{cc}$和GND
$V_{cc}$为电源输入,为CPU提供+5V工作电源。GND是接地引脚,两个接地引脚都必须接地。
8086的存储器组织
段地址和偏移地址
段地址和偏移地址组合成物理地址
- 8086/8088有20根地址线,寻址$2^20=1MB$单元,地址范围00000~FFFFFH。
- 第一个寄存器中包含的地址叫做段地址或者段基地址,第二个寄存器包含地址的另一部分,称为偏移地址或偏移量,表示的形式为段地址:偏移地址,这种也称为逻辑地址。
- 在形成20位物理地址时,段寄存器中的16位数自动左移4位,使最低4位一定是0,然后与16位偏移量相加,形成20位的物理地址。
- 由BIU的地址加法器$\Sigma$完成。
由逻辑地址转换为物理地址的公式如下
20位物理地址=段基地址X16+16位偏移地址量
- 段寄存器中的段基地址可以定义任何64KB存储器的起始地址,偏移量用来在64KB的存储器中选择任一单元,一旦知道段的起始地址,只要再加上FFFFH,就可得知该段的结束地址。
- 一个物理地址可以由不同的逻辑地址来组成。
默认段寄存器和偏移地址寄存器
- CS和IP组合寻址下一条要执行指令的字节单元
- SS和SP、BP组合寻址存储器中的数据
- DS和BX、SI、DI组合寻址数据段中的8位或·6位数据
- ES和DI组合寻址目的穿地址
- 通过短超越前缀可以对某些隐含规则进行修改
- 除非专门指定,如用户自行设定之外,在一般情况下,各段在存储器中的分配是由操作系统负责的。每个段可以独立地占用64KB存储区。各段也允许部分重叠或者完全重叠。
堆栈的设置和操作
- 堆栈是在内存中开辟的一个特定数据区域
- 堆栈存放暂时保存的数据,如调用子程序时的返回地址、中断处理时的断点及现场信息等。
- 堆栈位置和长度由SS:SP来决定
- 可设置的堆栈最大容量为64kb
- 栈底不能存放数据,例如:令SS=2000H,SP=1300H。堆栈范围为2000: 0000H ~ 2000:(1300H-1)
- 用PUSH/POP指令进行堆栈操作,遵循先进后出的原则
- 通过BP指针也可以从堆栈中获取数据,或向堆栈存入数据
段加偏移量寻址机制允许重定位
- 可重定位程序,是指一个可以存放在存储器的任何区域,不加修改就可以执行的程序
- 可重定位数据,是指可以存放在存储器的任何区域不用修改就可以贝程序引用的数据。
- 由于存储器采用偏移地址在段内寻址,因此一个程序段或数据块,在内存中搬移时,可以保持其偏移地址不变,只改变段寄存器的内容,因此搬到哪里都只需要修改段寄存器内容后就可以执行,即它们具有了重定位特点。
8086存储器的分体结构
8086的奇偶存储体
- 1MB存储空间分成两个8位的存储体:偶地址体和奇地址体,各占512k字节
- 偶地址体包含所有地址偶数的存储单元,奇地址体包含所有地址奇数的存储单元
- 高位库是奇地址,低位库是偶地址
用8086CPU的引脚信号和地址线A0来选择一个或两个存储体进行数据传送
$\overline{BHE}$ $A_0$ 功能 使用数据总线 0 0 选中两个存储体,传送一个字 $D_{15}\sim D_0$ 0 1 选中奇地址体,传送高字节 $D_{15}\sim D_8$ 1 0 选中偶地址体,传送低字节 $D_{7}\sim D_0$ 1 1 无效
8086CPU对存储器的存取操作
- 存取都从偶体开始。从 偶地址单元开始存取一个字只要1次操作,从奇地址要2次操作
8088CPU对存储器的存取操作
- 8088的外部数据总线为8位,它每次访问存储器只读/写1个字节,读/写1个字要分2次完成
- 1MB存储器被看作一个存储体,由A19~A0直接寻址,系统运行速度要慢些。
8086/8088系统中存储器与总线的连接
8086系统存储器
- 选择信号$\overline{SEL}$和$\overline{BHE}$连,选中1个存储体活两个都选中
- 奇/偶地质体的8位数据线,分别与数据总线的高/低8位相连,传送高/低8位数据。
- 19根地址线$A_{18}\sim A_0$与地址总线$A_{19}\sim A_1$相连,用来选择存储体内512KB单元中的某一个单元。
8088系统的1MB存储体
- 8位数据线直接与8位数据总线相连,20位地址线直接与20根地址总线相连
8086的工作模式和总线操作
工作模式
- CPU工作于最小模式时,送到存储器和I/O接口的所有信号都由CPU产生
- 工作于最大模式时,某些控制信号由8288总线控制器产生。
- 最大模式主要用于包含数值协处理器8087的系统中
1. 最小模式系统
- 硬件包含:8086 CPU、存储器、I/O接口芯片,还有8位地址锁存器74LS373、8位双向数据总线缓冲器74LS245和时钟产生器8284A。
- 3片74LS373锁存器,分离地址/数据线$AD_{15}~AD_0$、地址状态线$A_{19}/S_6~A_{16}/S_$3和$\overline{BHE}/S_7$信号。这些总线上先传地址信号,然后被锁存,再传送数据或状态信号。
- 8086系统传送16位数据,要用2片74LS245驱动。8088仅传送8位数据,只要1片缓冲器。缓冲器还可控制数据传送方向。锁存器也具有缓冲功能。
- 8284A产生系统所需的时钟信号。
CPU可从存储器或I/O接口中读出数据,也可向它们写入数据。以读存操作为例说明最小模式工作过程。
- CPU送出$M/\overline{IO}$和$DT/\overline{R}$信号,$M/\overline{IO}$选中存储器,$DT/\overline{R}$连接到74LS245的DIR,控制传送方向。$DT/\overline{R}=0$DIR=0,数据$A\leftarrowB$,CPU准备接收内存读出的数据。
CPU先送出地址和$\overline{BHE}$信号,再送出地址锁存ALE
- $A_{19}/S_6~A_{16}/S_3$,$AD_{15}~AD_0$,$\overline{BHE}$送出3片74LS373输入
- 这时,地址/状态线和地址/数据线上传送地址信号
- 当ALE=1时,分离出的$A_{19}~A_{0}$和$\overline{BHE}$打入74LS373
- 当ALE接地时,20位地址和$\overline{BHE}$被锁在74LS373中
74LS373的输出允许端$\overline{OE}$恒接地
- 锁存的20位地址和$\overline{BHE}$信号直接送到PC总线上, 也被送到存储器系统, 用来选择存储单元
CPU使$\overline{RD}=0$,$\overline{DEN}=0$
- $\overline{RD}=0$,CPU要从指定存储单元读数据;$\overline{DEN}=0$,表示允许收发数据,$\overline{DEN}$与74LS245的G相连,允许74LS245传送数据
由于第一步中已经设置了缓冲器数据传送方向$A \leftarrow B$,所以可从存储单元读出数据,经数据总线$D_{15}~D_0$,从74LS245的B端传送到A端,再从CPU的$AD_{15}~AD_0$总线送入CPU的寄存器
最大模式
- 8086工作于最大模式时,需增加一片总线控制器8288
- CPU工作于最大模式时$\overline{WR}$,$M/\overline{IO}$,$DT/\overline{R}$,DEN和$\overline{INTA}$等信号,要由总线控制器8288产生。
4组总线信号
状态输入信号$\overline{S}_2~\overline{S}_0$
8086送来,译码后产生总线周期类型信号。
由外部输入的控制信号
- CLK-时钟输入信号,由8284A时钟发生器提供
- $\overline{AEN}$-地址允许信号
- CEN-命令允许
- IOB-I/O总线模式信号
总线控制信号
- $DT/\overline{R}$,DEN(反相后为$\overline{DEN}$),ALE与最小模式类似,$MCE/\overline{PDEN}$为主控级联允许/外设数据允许信号
总线命令信号
时钟周期、指令周期和总线周期
- 每两个时钟脉冲上升(下降)沿之间的时间间隔称为T状态,也称为时钟周期(Clock Cycle),T周期
执行一条指令所需要的时间称为指令周期(Instruction Cycle)
从存储器或输入/输出端口存取一个字节(或字)(总线操作)所花费的时间称为一个总线周期(Bus Cycle)
总线操作时序
- 计算机都是在时钟脉冲CLK控制下,一步步进行工作的,完成每种操作都要一定时间。
- 读/写存储器或I/O端口,是8086最基本的操作。
- CPU读写一次存储器或I/O端口的时间叫总线周期。
- 执行1条指令的时间称为指令周期,1个指令周期可包含1个或几个总线周期。
- 1个总线周期需要4个系统时钟周期(T1~T4),时钟周期也称为T周期或T状态,它为时钟频率的倒数,是8086 CPU动作的最小单位。
- 8086工作时钟为5MHz,即T周期为200ns,总线周期为800ns。则CPU与内存或I/O接口间传送数据的最大速率可达每秒125万次。8086-1的频率为10MHz,每秒最多可执行250万条指令,运算速度达2.5 MIPS(百万指令/秒)。
总线周期
- T1状态:CPU往多路复用总线上发送地址信息,选中所需寻址的存储单元或外设端口地址。
- T2状态:CPU从总线上撤销地址,并使总线的低16位浮置成高阻状态,为传送数据作准备。
- T3状态:总线的高4位继续提供状态信息,低16位将出现由CPU写出的数据,或CPU从存储器或者外设端口读入的数据。
- 等待状态:有些情况下,I/O或M不能及时配合CPU传送数据,在T3状态启动之前它会能READY引脚 向CPU发一个“未准备好”信号 。CPU在T3状态之后自动插入若干个时钟周期Tw。直到CPU接受到“准备好”信号 ,自动脱离Tw状态进行T4.
- T4状态:总线周期结束。
- 空闲周期Ti:两个总线周期之间,若干个时钟周期。
最小模式下的读总线周期
T1状态
- 首先,由$M/\overline{IO}$确定是读内存或I/O端口。时序图中,$M/\overline{IO}$可能是1或0。若执行读内存指令$M/\overline{IO}=1$,I/O操作$M/\overline{IO}=0$
- 其次,给出指定单元地址以便读出。T1开始,20位地址及$\overline{BHE}$从A19/S6~A16/S3、AD15~AD0及$\overline{BHE}/S_7$线输出到74LS373锁存器。若读I/O端口,不用传送高4位地址A19~A16。
- 同时,从ALE输出地址锁存信号。ALE=1时,地址和$\overline{BHE}$打入锁存器,在ALE接地时锁定。此后复用信号线就用来传送数据和状态信号。
- 此外,还置$DTR/\overline{R}=0$,使74LS245的DIR=0,设定数据传送方向A←B,允许从内存或I/O端口读入数据。
T2状态
- 在A19/S6~A16/S3、$\overline{BHE}/S_7$总线上传送状态信息。AD15~AD0呈高阻态,为接收数据作好准备。
- 在T2状态的后半周期,$\overline{RD}=0$,允许从内存或I/O端口读出数据;数据允许信号$\overline{DEN}=0$,使74LS245的门控输入$\overline{G}=0$,允许接收数据。
T3状态
- 读取数据。数据出现在D15~D0上,数据从74LS245的$B\rightarrowA$,经AD15~AD0送入CPU寄存器。
- 若是8位数据操作,仅用低8位数据线传送8位数据。
- 与慢速设备交换数据时,需在T3和T4状态之间插入等待周期Tw。
T4状态
- 数据、状态信号在总线上维持一段时间。到T4后半周期,数据信号撤除,各控制和状态信号无效,$\overline{DEN}$无效,禁止收发数据,读总线周期结束。
最小模式下的写总线周期
T1状态
- 先使$M/\overline{IO}$有效,指出的写内存还是$I/O$端口。再在A19/S6~A16/S3、AD15~AD0及$\overline{BHE}/S_7$线上,传送20位$DT/\overline{R}$地址和$\overline{BHE}$接着ALE接地,锁存地址和$\overline{BHE}=1$,表示要写数据到内存或I/O端口
T2状态
- 撤销地址信号,在地址/状态线和$\overline{BHE}/S_7$上传送状态信号。CPU用锁存的地址,从AD15~AD0向缓冲器发送数据,并保存到T4状态中间,保证写数据可靠
- 还使$\overline{WR}$和$\overline{DEN}$有效,允许74LS245向外发送数据,经D15~D0将数据写入内存或I/0端口。
T3状态
- CPU采样REDAY线,决定是否要插入等待周期Tw。
T4状态
- 从总线上撤销数据,各控制信号和状态信号无效,$\overline{DEN}=1$,禁止收发数据,完成一个写总线周期。
最大模式下的读/写总下周期
仅说明与最小模式下读/写 总线周期的主要不同点,还应搞清$\overline{MEMW}$,$\overline{MEMR}$,$\overline{IOW}$和$\overline{IOR}$信号功能
最大模式读总线周期
- 在最大模式下无$M/\overline{IO}$信号,用$\overline{MEMR}$和$\overline{IOR}$来区分是存储器读还是I/O读周期
- 如果CPU执行的是存储器读指令,则$\overline{MEMR}=0$,同时它还表示$\overline{RD}=0$,CPU进入读存储器总线周期,这时可以用$\overline{MEMR}$信号来代替最小模式下的$\overline{RD}$信号,其中还包含了$M/\overline{IO}=1$的功能
- 若CPU执行I/O读指令,则$\overline{IOR}=0$,它也表示$\overline{RD}=0$。进入读I/O总线周期,可用$\overline{IOR}$信号代替最小模式下的$\overline{RD}$信号,也包含了$M/\overline{IO}=0$的功能
- 最大模式下,ALE,$DT/\overline{R}$和$\overline{DEN}$信号由8288产生$\overline{MEMR}$和$\overline{IOR}$也由8288输出,它代替最小模式下的$\overline{RD}$和$M/\overline{IO}$
最大模式写总线周期
- 与读总线周期一样,最大模式下也无$M/\overline{IO}$信号,用$\overline{MEMW}$和$\overline{IOW}$区分存储器写和I/O写。
- 若执行存储器写指令,则进入存储器写总线周期,$\overline{MEMW}=0$,它用来代替最小模式下的$\overline{WR}$信号,并包含了$M/\overline{IO}=1$信号
- 如CPU执行I/O写指令,则进入I/O写总线周期,$\overline{MEMW}=0$,它用来代替最小模式下的$\overline{WR}$信号,并包含了$M/\overline{IO}=0$的信号。