一、设计思路
按照要求设计指令系统,该指令系统能够实现数据传送,进行加、减运算和无条件转移,具有累加器寻址、寄存器寻址、寄存器间接寻址、存储器直接寻址、立即数寻址等五种寻址方式。从而可以想到如下指令:
(1)24位控制位分别介绍如下:
XRD : 外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。
EMWR: 程序存储器EM写信号。
EMRD: 程序存储器EM读信号。
PCOE: 将程序计数器PC的值送到地址总线ABUS上。
EMEN: 将程序存储器EM与数据总线DBUS接通,由EMWR和EMRD决定是将DBUS数据写到EM中,还是从EM读出数据送到DBUS。
IREN: 将程序存储器EM读出的数据打入指令寄存器IR和微指令计数器uPC。
EINT: 中断返回时清除中断响应和中断请求标志,便于下次中断。
ELP: PC打入允许,与指令寄存器的IR3、IR2位结合,控制程序跳转。
MAREN:将数据总线DBUS上数据打入地址寄存器MAR。
MAROE:将地址寄存器MAR的值送到地址总线ABUS上。
OUTEN:将数据总线DBUS上数据送到输出端口寄存器OUT里。
STEN: 将数据总线DBUS上数据存入堆栈寄存器ST中。
RRD: 读寄存器组R0-R3,寄存器R?的选择由指令的最低两位决定。
RWR: 写寄存器组R0-R3,寄存器R?的选择由指令的最低两位决定。
CN: 决定运算器是否带进位移位,CN=1带进位,CN=0不带进位。
FEN: 将标志位存入ALU内部的标志寄存器。
X2: X2、X1、X0三位组合来译码选择将数据送到DBUS上的寄存器。
X1: 见16页表。
X0:
WEN: 将数据总线DBUS的值打入工作寄存器W中。
AEN: 将数据总线DBUS的值打入累加器A中。
S2: S2、S1、S0三位组合决定ALU做何种运算。
本实验还需用到的五条机器指令:IN(输入)、ADD(二进制加法)、STA(存数)、OUT(输出)、JMP(无条件转移),其指令格式如下:
助记符 机器指令码 说明
IN 0000 0000 “INPUT DEVICE”中的开关状态àR0
ADD addr 0001 0000 ×××× R0+[addr] àR0
STA addr 0010 0000 ×××× R0à [addr]
OUT addr 0011 0000 ×××× [addr] àBUS
JMP addr 0100 0000 ×××× addràPC
其中IN为单字长(8位),其余为双字长指令,××××××××为addr对应的二进制地址码。
为了向RAM写入、读出机器指令,并能启动程序执行,还须设计三个控制台操作微程序。
存储器读(KRD):拨动总清开关CLR后,控制台开关SWB、SWA为“0 0”时,按START微动开关,可对RAM连续手动读操作。
存储器写(KWE):拨动总清开关CLR后,控制台开关SWB、SWA为“0 1”时,按START微动开关,可对RAM连续手动写操作。
启动程序(RP):拨动总清开关CLR后,控制台开关SWB、SWA为“1 1”时,按START微动开关,即可转入到第01号“取址”微指令,启动程序运行。
上述三条控制台指令用两个开关SWB、SWA的状态来设置,其定义如下:
SWB | SWA | 控制台指令 |
0 | 0 | 读内存(KRD) |
0 | 1 | 写内存(KWE) |
1 | 1 | 启动程序(RP) |
(二)在实验中使用的模型机的微指令格式如下表给定,长度共24位。
其中最后六位uA0~uA5 为6位的下一条微指令的地址, 前面几位为直接控制字段,直接与相应的控制门连接,A,B,C为3个译码字段,分别由三个控制位译码出多位。其含义如下:
A字段 | B字段 | C字段 | |||||||||
15 | 14 | 13 | 选择 | 12 | 11 | 10 | 选择 | 9 | 8 | 7 | 选择 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
0 | 0 | 1 | LDRi | 0 | 0 | 1 | RS-B | 0 | 0 | 1 | P(1) |
0 | 1 | 0 | LDDR1 | 0 | 1 | 0 | 0 | 1 | 0 | ||
0 | 1 | 1 | LDDR2 | 0 | 1 | 1 | 0 | 1 | 1 | ||
1 | 0 | 0 | LDIR | 1 | 0 | 0 | 1 | 0 | 0 | P(4) | |
1 | 0 | 1 | LOAD | 1 | 0 | 1 | ALU-B | 1 | 0 | 1 | |
1 | 1 | 0 | LDAR | 1 | 1 | 0 | PC-B | 1 | 1 | 0 | LDPC |
控制位含义
微程序控制器的结构与微指令的格式密切相关。
微程序控制器由控制存储器、微地址寄存器、微命令寄存器和地址转移逻辑几部分组成。微地址寄存器和微命令寄存器两者的总长度即为一条微指令的长度,二者合在一起称为微指令寄存器。
●控制存储器(ROM)
ROM中存放微程序,也就是全部的微指令。ROM的容量取决于微指令的总数。假如控制器需要128条微指令,则微地址寄存器长度为7位。ROM的字长取决于微指令长度。如果微指令为32位,则ROM的字长就是32位。实际应用中ROM可采用EPROM或E2PROM、EAROM,用户写入和修改微程序比较方便。
●微命令寄存器
微命令寄存器暂存由控制存储器中读出的当前微指令中控制字段与测试判别字段信息,可由8D寄存器组成。
●微地址寄存器
微地址寄存器暂存由控制存储器读出的当前微指令的下址字段信息。它可由带RD、SD强置端的D触发器组成。其中时钟端和D端配合用做ROM的读出打入,用SD进行下址修改。
●地址转移逻辑
微指令由ROM读出后直接给出下一条微指令的地址,这个地址就放在微地址寄存器中。当微程序出现分支时通过地址转移逻辑去修改微地址寄存器内容,并按修改好的微地址读出下条微指令。地址转移逻辑是一个组合逻辑电路,其输入是当前微指令的判别测试字段Pi、执行部件反馈的“状态条件”及时间因素T4。
●控制时序信号
上图中标明了一个基本机器周期中的控制时序信号。例如用上一周期的T4时间按微地址寄存器内容从ROM中读一条微指令,经过一段时间后被读出,用当前周期的T1时间打入到微指令寄存器。T2、T3时间用来控制执行部件进行操作。T4时间修改微地址寄存器内容并读出下一条微指令。
二、设计步骤:
(一)、拟订指令系统
指令系统是设计计算机的依据 ,拟订指令系统将涉及基本字长、指令格式、指令种类、寻址方式等内容。
基本字长:
程序设计平台中配置的存储器容量为256*8,可知道基本字长定为8位。
指令格式:
指令格式可有单字长和双字长指令两种,在双字长格式中,第二字节一般定义为操作数或操作数地址。
指令格式为:
操作码OP | 源操作数 | 目的操作数 |
指令类型:
模型机有单操作数指令、双操作数指令和无操作数指令。
操作码OP共四位,最多可定义16条指令。
数据的传送单位为8位
数据的传送范围R—>R R—>RAM RAM—>R
寻址方式:
由于指令较短,操作数字段仅两位,为了简化硬件设计,将操作数字段和目的操作数字段的寻址定义为不同的含义。
源操作数字段寻址方式 目的操作数寻址方式
00 R0 00 R1
01 (R0) 01 (R1)
10 I 10 I
11 D 11 D
Ri表示操作数就在寄存器中
(Ri)表示操作数地址在寄存器中
I指令的第二个字节为操作数或称立即寻址
(D)指令的第二个字节为操作数的地址
源操作数使用R0寻址
目的操作数R1寻址
(二)、确定总体结构
根据要求设计数据通路框图:
图2-1 数据通路结构框图 |
2.1流程图
图2-2 微程序流程图
当拟定“取指”微指令时,该微指令的判别测试字段为P(1)测试。由于“取指”微指令是所有微指令都使用的公用微指令,因此P(1)的测试结果会出现多路分支。我们使用指令寄存器的前4位(IR7-IR4)作为测试条件,出现5路分支,占用5个固定微地址单元。
控制台命令的微程序流程,01为取指令微指令的地址:
图2-3 控制台流程图
控制台操作作为P(4)测试,它以控制开关SWB,SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。当分支微地址单元固定后,剩下的其他地方就可以一条微指令占用控存一个微地址单元随意填写。
2.2微代码表
当全部微程序设计完毕后,将每条微指令代码化,把流程图按微指令格式转化成“二进制微代码表”,如下:
微地址 | S3 | S2 | S1 | S0 | M | CN | WE | A9 | A8 | A | B | C | UA5…UA0 |
00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 000 | 000 | 100 | 010000 |
01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 110 | 110 | 110 | 000010 |
02 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 100 | 000 | 001 | 001000 |
03 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 000 | 000 | 001 | 000100 |
04 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 011 | 000 | 000 | 000101 |
05 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 010 | 101 | 000 | 000110 |
06 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 001 | 101 | 000 | 000001 |
07 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 110 | 000 | 000 | 001101 |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 001 | 000 | 000 | 000001 |
11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 110 | 110 | 110 | 000011 |
12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 110 | 110 | 110 | 000111 |
13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 110 | 110 | 110 | 001110 |
14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 110 | 110 | 110 | 010110 |
15 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 000 | 001 | 000 | 000001 |
16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 110 | 000 | 000 | 001111 |
17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 010 | 000 | 000 | 010101 |
20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 110 | 110 | 110 | 010010 |
21 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 110 | 110 | 110 | 010100 |
22 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 010 | 000 | 000 | 010111 |
23 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 000 | 000 | 000 | 00000 |
24 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 010 | 000 | 000 | 011000 |
25 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 000 | 101 | 000 | 000001 |
26 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 101 | 000 | 110 | 000001 |
27 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 000 | 101 | 000 | 010000 |
30 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 000 | 101 | 000 | 010001 |
表2-5 二进制微代码表
2.3确定连线图
根据各部件的功能,确定好电路各个芯片的连接,如下:
图2-4 接线图 |
各部件功能:
指令寄存器(IR):指令寄存器用来保存当前正在执行的一条指令。当执行一行指令时。先把它从内存取到缓冲寄存器中,然后在传至指令寄存器。指令划分为操作码和地址码字段,由二进制数构成,执行任何给定的指令,必须对操作码进行测试[P(1)],通过节拍脉冲T4的控制以便识别所要求的操作。
指令译码器(ID):根据指令中的操作码译码强制微控器单元的微地址,使下一条微指令指向相应的微程序首地址。
输入设备(INPUT DEVTICE):是一种二进制代码开关,实现数据输入。输入时,二进制开关数据直接经过三态门送到总线上,只要开关状态不变,输入的信息也不变。
输出设备(OUTPUT DEVICE):是一种数码块,完成数据输出。输出时,匠输出数据送到数据总线上,当写信号(W/R)有效时,将数据打入输出锁存器,驱动数据块显示。
(三)设置情况
1、寄存器的设置:
R0,R1为通用寄存器,8位。
IR为指令寄存器,8位。
PC程序寄存器,8位。
MAR为地址寄存器,8位。
2、加法器的设置:
采用8位带串行进位并行加法器。
3、选择器的设置:
连入A选择器的数据来源是RAM的读出数据和R0寄存器的数据。连入B选择器的数据来源是PC的数据和R1的数据。
4、数据通路:
数据通路的设计,在总体结构中是最重要的一个问题,模型机的数据通路是以总线为基础,以CPU为核心的。
信息的传送路径:
取指令
MA CPIR
RAM—>选择器A—>Σ—>BUS—>IR
送指令地址
PB CPMAR
PC—>选择器B—>Σ—>BUS—>MAR
指令计数器+1
PB C0 CPPC
PC—>选择器B—>Σ—>BUS—>PC
R0—>R1
RA CRR1
R0—>选择器A—>Σ—>BUS—>R1
R1—>RAM
RB WR
R1—>选择器B—>Σ—>BUS—>RAM
(四)逻辑设计:
总体结构设计之后,便开始总体结构中各部件的逻辑设计和部件之间的连接。
1、加法器的逻辑设计:
如附图2所示,模型机中的加法器是由八个一位全加器构成,全加器之间采用简单的串行进位。全加器逻辑原理如附图3所示:附图3如下
2、选择器的设计:
选择器A和选择器B的结构形式一样,如附图4所示,在控制电位EN0和EN1的控制下,分别选择R0的或R1的数据通过选择器,进入加法器。EN0和EN1是互斥的,高电平有效。
3、寄存器的设计:
不带复位的寄存器:
结构中R0,R1通用寄存器,可存入操作数或结果、中间结果,每个寄存器均由8个D触发器构成。在CPRi的作用下接收总线的数据送入寄存器,输出连入选择器。结构如附图5所示。指令寄存器IR其结构同通用寄存器。
带复位的寄存器:
结构中MAR地址寄存器是一个带复位的寄存器,带复位是指当有复位信号时,MAR清零。逻辑图如附图6所示。
程序计数器的设计:
程序计数器结构如附图6所示。PC加1是通过加法器实现的。
复位信号RET的作用是有复位信号时,计数器PC清零。
部件之间的连接:
由系统结构可看出,部位之间的连接是采用以CPU为中心的总线连接方式。加法器的输出通过总线BUS连接到所有寄存器和存储器的输入端,除指令寄存器IR和地址寄存器MAR的输出端外,其他部件的输出端分别送入选择器A和选择器B。
连线图如附图1所示。
(五)、确定控制方式
控制命令是确定信息的流向,不同的数据通路需要不同的控制指令。即组合逻辑方式和微程序方式,模型机采用微程序方式。微程序的执行方式采用增量、垂直方式。
1、微程序控制器的结构:
微程序控制器的部件由设计平台提供。
2、微程序控制器的时序:
微程序控制器的时序如图所示:
P
P’
P脉冲的低电平用做控制存储器读命令µRD
P脉冲的上升边沿将读出的微指令µIR
负脉冲P的上升边沿将形成的后继地址送微程序计数器µPC,同时将运算结果(总线的数据)送指定的寄存器。
3、微指令格式:
微指令格式由三部分组成,既微指令字段定义,微命令形成逻辑和后继微地址产生逻辑。
后继微地址产生逻辑:
为简单起见只选三种后继微地址生成方式即增量方式、无条件转移方式、按操作码转移方式。
当EN=1时,微程序计数执行加1操作
当EN=0且JP=1时,无条件转移
当EN=0且QJP=1时,按操作码转移
4、 微程序编写:
(1)程序
MOV1 05#,R0
MOV2 01#,R1
ADD R0,R1
MOV3 R1,(R0)
(2)操作码二进制代码
MOV1:0001
MOV2:0010
ADD:0011
MOV3:0100
(3)微程序入口(16进制代码)
取指令入口:00H
MOV1入口:10H
MOV2入口:20H
ADD入口:30H
MOV3入口:40H
(4)指令执行流程图:
指令流程:
00
RAM IR
PC+1 PC
10 20 30 40
PC MAR PC MAR R0+R1 R1 R0 MAR
PC+1 PC PC+1 PC PC MAR R1 RAM
RAM R0 RAM R1 JP PC MAR
PC MAR PC MAR JP
JP JP
(5)编制微程序
根据指令流程跟微指令格式开始编制微程序。
二-四译码器逻辑原理如附图3所示。
三-八译码器逻辑原理如附图8所示。
全部微程序如表1所示。
(六)分调
将模式开关至于分调
1、伟福系统
平台上的所有开关和发光二极管均随意编制用做数据输入和状态显示
典型部件如下:
选择器A
带复位的寄存器MAR
不带复位的寄存器R0
程序计数器PC
在部件设计无错、连线无错、1032E的管脚定义无错时可生成下载文件下载到1032E中。
2、单片机系统
微程序经过检查无误后,将模式开关至分调后通过键盘写入响应的单元中。
(七)统调
将模式开关置于统调,此时平台上的开关及发光二极管的设置情况如下:
开关K15--K0无效,不可编程使用
L15--L0用于显示IR15--IR0的状态,不能作他用
LED15--LED8用于显示从存储器读出的内容和数据总线BUS的内容不能再作他用
LED7--LED0可编程到任意观测点,以显示系统运行的状态
(1) 按复位健RET
使MAR清洗、指令计数器清洗,保证从存储器0号单元取指令。
使微程序计数器PC清洗,保证从而2#ROM,1# ROM的0#单元取指令微程序的第一条微指令。
(2) 执行微程序
按复位健后,PC、MAR为0
0号单元的内容是一条指令,指令代码读出后,在MA的作用下,进入加法器至总线。此时,总线上的内容点亮LED15-8,查看是否正确。
注意的是:在没有按下次脉冲键前,数据通路的内容一直不变。
按一次脉冲键又产生一负脉冲。该负脉冲反相后的上升沿产生CPIR,将上条微指令读出的指令代码送IR,同时上升沿还将PC+1。该负脉冲的低电平用以读出PC指示的第二条微指令。
这样一一取出微指令并执行微指令就会读出并执行存放在MAR中的程序。
三、测试流程与结果
3.1连接线路
按照图用排线连接好电路
3.2写程序
方法一:手动写入
先将机器指令对应的微代码正确的写入2816中。使用控制台KWE和KRD微程序进行机器指令程序的装入和检查。
A.使编程开关处于“RUN”,STEP为“STEP”状态,STOP为“RUN”状态。
B.拨动总清开关CLR(0→1),微地址寄存器清零,程序计数器清零。然后使控制台SWB、SWA开关置为“01”,按动一次启动开关START,微地址显示指示灯显示“010001”,再按动一次START,微地址灯显示“010100”,此时数据开关的内容置为要写入的机器指令,按动两次START键后,完成该条指令的写入。
C.写完程序后须进行校验。拨动总清开关CLR(0→1)后,微地址清零。PC程序计数器清零,然后使控制台开关SWB、SWA为“00”,按动启动START,微地址灯将显示“010000”,再按START,微地址灯显示为“010010”,第三次按START,微地址灯显示为“010111”,再按START后,此时输出单元的数码管显示为该首地址中的内容。不断按动START,以后每个循环PC会自动加1,可检查后续单元内容。每次在微地址灯显示为“010000”时,是将当前地址中的机器指令写入到输出设备中显示。
方法二:联机读/写程序
按照规定格式,将机器指令及微指令二进制表编辑成十六进制的如下格式文件。微指令中的微代码为24位微代码按从左到右分成3个8位,将此3个8位二进制代码化为相应的十六进制数即可。并将该格式文件用联机软件的传输文件功能传入实验系统。
机器指令格式说明:
$PXX YY
XX 十六进制地址
YY 机器指令代码
程序:
$P4000
$P4110
$P420A
$P4320
$P440B
$P4530
$P460B
$P4740
$P4800
$P4A01
微指令格式说明:
$M XX YYYYYY
XX 十六进制地址
YYYYYY 微指令代码
微程序:
$M00018110
$M0101ED82
$M0200C048
$M0300E004
$M0400B005
$M0501A206
$M06959A01
$M0700E00D
$M08001001
$M0901ED83
$M0A01ED87
$M0B01ED8E
$M0C01Ed96
$M0D028201
$M0E00E00F
$M0F00A015
$M1001ED92
$M1101Ed94
$M1200A017
$M13018001
$M14002018
$M15070A01
$M1600D181
$M17070A10
$M18068A11
3.3运行程序
单步运行程序:
A.使编程开关处于“RUN”状态,STEP为“STEP”状态,STOP为“RUN”状态。
B.拨动总清开关CLR(0->1),微地址清零,程序计数器清零。程序首址为00H。
C.单步运行一条微指令,每按动一次START键,即单步运行一条微指令。对照微指令流程图,观察微地址显示灯是否和流程一致。
D.单步运行结束后,检查存数单元(0BH)中的结果是否和理论值一致。
连续运行程序:
-
- 使“STATE UNIT”中的STEP开关置为“ECEX”状态。STOP开关置为“RUN”状态
- 拨动CLR开关,清微地址及程序计数器,然后拨动START,系统连续运行程序,稍后将STOP拨至“STOP”时,系统停机。
- 停机后,检查存数单元(0BH)结果是否正确。
3.4 测试验证
此次测试验证的内容为FEH
验证程序的内存映象(装入起始地址00H)如下:
地址(二进制) | 内容(二进制) | 助记符 | 说 明 |
0000 0000 | 0000 0000 | IN | 将输入数据送R0寄存器 |
0000 0001 | 0001 0000 | ADD [OAH] | |
0000 0010 | 0000 1010 | RO+[0AH]—>R0 | |
0000 0011 | 0010 0000 | STA [0BH] | |
0000 0100 | 0000 1011 | R0—>[0BH] | |
0000 0101 | 0011 0000 | OUT [0BH] | |
0000 0110 | 0000 1011 | [0BH]—>LED | |
0000 0111 | 0100 0000 | JMP 01 | |
0000 1000 | 0000 0001 | 01H—>PC | |
0000 1001 | |||
0000 1010 | 0000 0001 | 输入自定的数据 | |
0000 1011 | 求和结果的存储单元 |
表3-1 验证程序内存映象
INPUT DEVICE中输入为00000001时,在地址00001011单元上显示内容00000002,并显示02。单步运行是满足微程序流程图的运行顺序。
四、心得体会:
本次课程设计我们要设计一台微程序控制的模型机,以对计算机能有一个整机的概念,完成对计算机组成原理这门课程的综合应用,达到学习本书的作用.作为一个计算机系学生这是必需掌握的。使我们对数据选择器、移位器、加法器、运算器、存储器和微程序控制器,有了非常透彻的认识。
由于计算机设计的部件较多、结构原理较复杂,对于我们这样的初设计者来说感到无从下手,所以我们在整个过程中采取由浅入深,由简单到复杂的放法,通过这次设计,使我们能清楚的了解计算机的基本组成、基本原理和设计步骤、设计思路和调试步骤,最终能清晰的建立起整机概念,为独立完成计算机设计奠定了基础。
课程设计结束了,从中我们也学到了不少知识.虽然计算机组成原理的课程设计与学习已经结束,可我们学习之路并没有结束,我们会继续努力学习其相关的知识,以适应社会的发展与需要.这样才能真正成为一名合格的大学生.
在此次的设计中,感谢老师对我们的帮助和指导。过程还不够完善,希望老师继续指导。
附图:
附图2八位串行进位加法器
附图4选择器逻辑图
附图5不带复位的八位寄存器逻辑图 附图6带复位的八位寄存器逻辑图
附图7后继微地址形成逻辑图
附图8 3-8译码器逻辑图
附图9微指令计数器逻辑图
附图10 三位二进制计数器(COUNT8底层图)