首页 > 其他 > 详细

计算机组成原理5-中央处理器

时间:2020-07-02 09:35:13      阅读:128      评论:0      收藏:0      [点我收藏+]

CPU功能与结构

CPU功能

  1. 指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
  2. 操作控制:一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号,把各种操作信号送往相应的部件,从而控制这些部件暗指令的要求进行动作。
  3. 时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
  4. 数据加工:对数据进行算术和逻辑运算。
  5. 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理。

运算器和控制器的功能

运算器

对数据进行加工

控制器

协调并控制计算机各部件执行程序的指令序列,基本功能包括去指令、分析指令、执行指令。

取指令:自动形成指令地址;自动发出取指令的命令。

分析指令:操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。

执行指令:根据分析指令得到的"操作命令"和"操作数地址",形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。

中断指令:管理总线以及输入输出;处理异常情况(如掉电)和特殊情况(如打印机请求打印一行字符)

基本结构

运算器的基本结构

  1. 算术逻辑单元:主要功能是进行算术/逻辑运算。
  2. 通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数以及中间结果)和各种地址信息等。SP是堆栈指针,同余指示栈顶的地址。
  3. 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器重,否则会破坏其原有内容。
  4. 累计寄存器:它是一个通用寄存器,用于暂时存储ALU运算的结果信息,用于实现加法运算。
  5. 程序状态字寄存器:保留由算术逻辑运算指令或测试指令的结果二建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些参与并决定微操作的形成。
  6. 移位器:对运算结果进行移位运算。
  7. 计数器:控制乘除运算的操作步数。

数据通路方式

专用数据通路方式:根据指令执行过程中的数据和地址的流动方法安排连接线路。

性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。

如果直接使用导线连接,相当于多个寄存器同时并且一直向ALU传输数据。解决方法如下:

  1. 使用多路选择器根据控制信号选择一路输出

    技术分享图片

  2. 使用三态门可以控制每一路是否输出

    如:ROout为1时\(R_0\)中的数据输出到A端,ROout为0时\(R_0\)中的数据无法输出到B端,

    技术分享图片

CPU单总线方式:将所有寄存器的输入端和输出端都连接到一条工共的通路上。

结构简单,容易实现,但数据传输存在较多的冲突现象,性能较低。

技术分享图片

控制器的基本结构

  1. 程序计数器:用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。应程序中指令(通常)时顺序执行的,所以PC有自增的功能。

  2. 指令寄存器:用于保存当前正在执行的那条指令。

  3. 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。

  4. 微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。

  5. 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。

  6. 存储器地址寄存器:用于存放所要访问的主存单元地址。

  7. 存储器数据寄存器:用于存放向主存写入的信息或从主存中读出的信息。

    技术分享图片

CPU基本结构

技术分享图片

用户可见寄存器:通用寄存器组、程序状态字寄存器PSW、程序计数器PC

用户不可见寄存器:MAR、MDR、IR、暂存寄存器。

指令执行过程

指令周期

指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。

指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。

一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。

技术分享图片

每个指令周内机器周期数可以不等,每个周期内的节拍数也可以不等。

技术分享图片

指令周期流程

技术分享图片

实现方式:通过触发器实现

技术分享图片

四个工作周期都有CPU访存操作,只是访存的目的不同。取值周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点。

指令周期的数据流

取值周期

技术分享图片

  1. 当前指令地址送至存储器地址寄存器,记做:(PC)->MAR
  2. CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1->R
  3. 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR)->MDR
  4. 将MDR中的内容(此时是指令)送入IR,记做:(MDR)->IR
  5. CU发出控制信号,形成下一条指令地址,记做:(PC)+1->PC

间址周期

技术分享图片

一次间址为例:

  1. 将指令的地址码送入MAR,记做:Ad(IR)->MAR或Ad(MDR)->MAR
  2. CU发出控制信号,启动主存做读操作,记做:1->R
  3. 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR)->MDR
  4. 将有效地址送至指令的地址码字段,记做:MDR->Ad(IR)

执行周期

执行周期的任务是根据IR中的指令字的操作嘛和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有同一的数据流向。

中断周期

中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈是先修改指针,后存入数据。

技术分享图片

  1. CU控制将SP减1,修改后的地址送入MAR,记做:(SP)-1>SP.(SP)->MAR

    本质是将断点存入某个存储单元,假设其地址为a,故可记做:a->MAR

  2. CU发出控制信号,启动主存做写操作,记做:1->W

  3. 将断点(PC内容)送入MDR,记做:(PC)->MDR

  4. CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,记做:向量地址->PC

指令执行方案

  • 方案1.单指令周期

    对所有都选用相同的执行时间来完成。

    指令之间串行执行;指令周期取决于执行最执行时间最长的指令的执行时间。

    对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。

  • 方案2.多指令周期

    对不同类型的指令选用不同的执行步骤来完成。

    指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程。

    需要更复杂的硬件设计。

  • 方案3.流水线方案

    在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。指令之间并行执行。

数据通路

数据通路:数据在功能部件之间的传送的路径。

基本结构

CPU内部单总线方式

技术分享图片

内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线;

系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类IO接口间互相连接的总线。

数据传送方式:

  1. 寄存器之间数据传送

    比如把PC内容送至MAR,实现传送数据的流程及控制信号为:

    (PC)->Bus PCout有效,PC内容送总线

    Bug->MAR MARin有效,总线内容送MAR

  2. 主存与CPU之间的数据传送

    比如CPU从主存读取指令,实现传送操作的流程及控制信号为:

    (PC)->Bus->MAR PCout和MARin有效,现行指令地址->MAR

    1->R CU发读命令(通过控制总线发出)

    M(MAR)->MDR MDRin有效(通过地址线与数据线)

    MDR->Bus->IR MDRout和IRin有效,现行指令->IR

  3. 执行算术或逻辑运算

    比如一条加法指令,微操作序列及控制信号为:

    Ad(IR)->Bus->MAR AdIout(MDRout)和MARin有效

    1->R CU发读命令

    M(MAR)->数据线->MDR MDRin有效

    MDR->Bus->Y MDRout和Yin有效,操作数->Y

    (ACC)+(Y)->Z ACCout和ALUin有效,CU向ALU发送加命令

    Z->ACC Zout和ACCin有效,结果->ACC

专用数据通路

技术分享图片

以取指周期为例:

(PC)->MAR \(C_0\)有效

(MAR)->主存 \(C_1\)有效

1->R 控制单元向主存发送读命令

M(MAR)->MDR \(C_2\)有效

(MDR)->IR \(C_3\)有效

(PC)+1->PC

Op(IR)->CU \(C_4\)有效

控制器

结构和功能

控制单元的输入输出

技术分享图片

输入

  1. 指令寄存器: OP(IR)->CU 控制信号的产生和操作码有关
  2. 时钟:一个时钟脉冲发一个操作命令或一组需要同时执行的操作命令。
  3. 标志:如条件转移指令,根据相应的标志位决定下一步操作
  4. 外来信号:如中断请求信号INTR,总线请求信号HRQ

输出

  1. CPU内部的控制信号:寄存器之间的数据传输、PC的修改、控制ALU进行相应的运算

  2. 到控制总线的控制信号:

    到存储器:访存控制信号\(\overline{MREQ}\),读命令\(\overline{RD}\)、写命令\(\overline{WR}\)

    到IO设备:访问I/O设备的控制信号\(\overline{IO}\)

    z中断响应信号INTA,总线响应信号HLDA

CPU控制方式

产生不同微操作命令序列所用的时序控制方式。

  1. 同步控制方式

    整个系统所有的控制信号均来自一个统一的时钟信号。

    同步控制方式的优点是控制电路简单,缺点是运行速度慢。

  2. 异步控制方式

    异步控制方式不存在基准时标信号。

    各部件按自身固有的速度工作,通过应答方式进行联络。

    异步控制方式的优点是运行速度块,缺点是控制电路比较复杂。

  3. 联合控制方式

    对各种不同的指令的微操作实行大部分采用同步控制、小部分采用异步控制的方法。

安排微操作时序的原则

  • 原则一:微操作的先后顺序不得随意更改
  • 原则二:被控对象不同的微操作尽量安排在一个节拍内完成
  • 原则三:占用时间较短的为擦偶哦尽量安排在一个节拍内完成并允许有先后顺序

硬布线

硬布线工作原理:微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生

设计步骤:

  1. 分析每个阶段得微操作序列
  2. 选择CPU的控制方式
  3. 安排微操作时序
  4. 电路设计
    1. 列出操作时间表
    2. 写出微操作命令的最简表达式
    3. 画出逻辑图

微程序

微程序工作原理:事先把微操作控制信号存储在一个专门的存储器(控制存储器)中,将每一条机器指令编写成一个微程序,这些微程序可以存到一个控制存储器中,用寻址用户程序机器指令的办法来寻址每个微程序的微指令。

基本思想

相容性微命令:可以同时产生、共同完成某一些微操作的微命令。

互斥性微命令:在机器中不允许同时出现的微命令。

基本结构

技术分享图片

微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行。

顺序逻辑:控制微指令的顺序。

CMAR:微地址寄存器,接收微地址形成部件送来的微地址,为在CM中读取微指令作准备。

地址译码:将地址码转化为存储单元控制信号。

控制存储器:用于存放各指令对应的微程序,控制存储器可用只读存储器ROM构成。

CMDR:用于存放从CM中取出的微指令,它的位数同微指令字长相等。

微指令的格式

  1. 水平型微指令:一次能定义并执行多个并行操作。

    基本格式:

    微操作码 微地址码
    操作控制 顺序控制

    优点:微程序短,执行速度快;

    缺点:微指令长,编写微程序较麻烦。

  2. 垂直型微指令:类似机器指令操作码的方式,由微操作吗字段规定指令的功能。

    基本格式:

    \(\mu OP\) \(Rd\) \(Rs\)
    微操作码 目的地址 源地址

    优点:微指令短、简单、规整,便于编写微程序;

    缺点:微程序长,执行速度慢,工作效率低。

  3. 混合型微指令:在垂直型的基础上增加一些不太复杂的并行操作。

    微指令短,仍便于编写;微程序也不长,执行速度加快。

微指令的编码方式

微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是保证速度的情况下,尽量缩短微指令字长。

  1. 直接编码(直接控制)方式

    在微指令的操作控制字段中,每一位代表一个微操作命令。

    某位为"1"表示该控制信号有效。

    技术分享图片

    优点:简单、直观,执行速度快,操作并行性好。

    缺点:微指令字长过长,n各微命令就要求微指令的操作字段有n位,造成控存容量极大。

  2. 字段直接编码方式

    将微指令的控制字段分成若干"段",每端经译码后发出控制信号。

    微命令字段分段的原则:

    1. 互斥性微命令分在同一段内,相容性微命令分在不同段内。
    2. 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
    3. 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,单某字段的长度为3位时,最多只能表示7个互斥的微命令.通常用000表示不操作。

    技术分享图片

    优点:可以缩短微指令字长。

    缺点:要通过译码电路再发出微命令,因此笔直接编码方式慢。

  3. 字段间接编码方式

    一个字段的某个微命令需由微命令来解释,由于表示考字段直接译码发出的微命令.故称为字段间接编码,又称隐式编码。

    技术分享图片

    优点:可进一步缩短微指令字长。

    缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。

微指令的地址形成方式

  1. 微指令的下地址字段指出

    微指令格式中设置一个下地址字段,有微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。

  2. 根据机器指令的操作码形成

    当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。

  3. 增量计数器法

    (CMAR)+1-->CMAR

  4. 分支转移

    转移方式:指明判别条件;转移地址:指明转移成功后的去向。

    操作控制字段 转移方式 转移地址
  5. 通过测试网络

  6. 由硬件产生微程序入口地址

    第一条微指令地址由专门硬件产生

    中断周期由硬件产生中断周期微程序首地址

微指令控制的基本概念

  1. 微命令与微操操作

    微命令是微操作的控制信号,

    微操作是微命令的执行过程。

  2. 微指令与微周期

    微指令是若干微命令的集合。

    微周期通常指从控制存储器中读取一条微指令并执行相应的微操作所需的时间。

  3. 主存储器与控制存储器

    主存储器用于存放程序和数据,在CPU外部,用RAM实现;

    控制存储器(CM)用于存放微程序,在CPU内部,用ROM实现。

  4. 程序与微程序

    程序是指令的有序集合,用于完成特定的功能;

    微程序是微指令的有序集合,一条指令的功能由一段微程序来实现。

微程序控制单元设计

设计步骤:

  1. 分析每个阶段的微操作序列
  2. 写出对应机器指令的微操作命令及节拍安排
    1. 写出每个周期所需要的微操作(参考硬布线)
    2. 补充微程序控制器特有的微操作:
      • 取指周期:Ad(CMDR)->CMAR OP(IR)->CMAR
      • 执行周期:Ad(CMDR)->CMAR
  3. 确定微指令格式
  4. 编写微指令码点

微程序设计分类

  1. 静态微程序设计和动态微程序设计

    静态 微程序无需改变,采用ROM

    动态 通过改变微指令和微程序改变机器指令,有利于仿真,采用EPROM

  2. 毫微程序设计

    毫微程序设计的基本概念

    微程序设计 用 微程序解释机器指令

    毫微程序设计 用 毫微程序解释微程序

    毫微指令与微指令 的关系好比 微指令和机器指令

硬布线和微程序的比较

对比项目?类型 微程序控制器 硬布线控制器
工作原理 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生
执行速度 慢 快
规整性 较规整 烦琐、不规整
应用场合 CISC CPU RISC CPU
易扩充性 易扩充修改 困难

指令流水线

指令流水定义

一条指令的执行过程可以分成多个阶段(或过程)。根据计算机的不同,具体的分法也不同。

取指 分析 执行

取指:根据PC内容访问主存储器,取一条指令送到IR中

分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数。

执行:根据操作码字段,完成指令规定的功能,即把运算结构写到通用寄存器或主存中。

设取指、分析、执行3个阶段的时间都相等,用t表示,按一下几种执行方式分析n条指令的执行时间:

  1. 顺序执行方式: 总耗时\(T=n \times 3t=3nt\)

    技术分享图片

    传统冯·诺伊曼机采用顺序执行方式,又称串行执行方式。

    优点:控制简单,硬件代价小。

    缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低。

  2. 一次重叠执行方式: 总耗时\(T=3t+(n-1)\times 2t=(1+2n)t\)

    技术分享图片

    优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。

    缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。

  3. **二次重叠执行方式: ** 总耗时\(T=3t+(n-1)\times t=(2+n)t\)

    技术分享图片

    注:也可以把每条指令的执行过程分成4个或5个阶段,分成5个阶段是比较常见的做法。

    与顺序执行相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。

流水线的表示方法

  1. 指令执行过程图

    技术分享图片

    主要用于分析指令执行过程以及影响流水线的因素。

  2. 时空图

    技术分享图片

    主要用于分析流水线的性能。

流水线的性能指标

吞吐量

吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。

设任务数为n;处理完成n个任务所用的时间为\(T_k\)

则计算流水线吞吐率(TP)的最基本公式为\(TP=n/T_K\)

理想情况下,流水线的时空图如下:

技术分享图片

注:一条指令从开始到结束的时间称为装入时间;最后一条指令从开始到结束的时间为排空时间。

一条指令的执行分为k个阶段,每个阶段耗时\(\Delta t\),一般取\(\Delta t\)=一个时钟周期。 \(T_k=(k+n-1)\Delta t\)

流水线的实际吞吐率为\(TP=\frac{n}{(k+n-1)\Delta t}\)

当连续输入的任务\(n\to\infty\),得最大吞吐率为\(TP_{max}=1/\Delta t\)

加速比

完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。

设\(T_0\) 表示不使用流水线时的执行时间,即顺序执行所用的时间;\(T_k\)表示使用流水线的执行时间

则计算流水线加速比(S)的基本公式为\(S=\frac{T_0}{T_k}\)

理想情况下,单独完成一个任务耗时为\(k\Delta t\),则顺序完成n个任务耗时\(T_0=nk\Delta t\),则实际加速比为

\[S=\frac{kn\Delta t}{(k+n-1)\Delta t}=\frac{kn}{k+n-1} \]

当连续输入的任务\(n\to\infty\)时,最大加速比为\(S_{max}=k\)。

效率

流水线的设备利用率称为流水线的效率。

在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比。

则流水线效率(E)的一般公式为

\[E=\frac {n个任务占用k时空区有效面积}{n个任务所用的时间与k个流水段所围成的时空区总面积}=\frac{T_0}{kT_k} \]

理想情况下,当连续输入的任务\(n\to\infty\)时,最高效率为\(E_{max}=1\)。

指令流水线影响因素

机器周期的设置

为了方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。

流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。

结构相关(资源冲突)

由于多条指令在泳衣时刻争用同一资源而形成的冲突称为结构相关。

技术分享图片

解决办法:

  1. 后一相关指令暂停一周期
  2. 资源重复配置:数据存储器+指令存储器

数据相关(数据冲突)

数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况。

数据的基本操作:读(R)、写(W)

冲突的基本类型:RAW、WAR、WAW

技术分享图片

解决办法:

  1. 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入"NOP"两种办法。
  2. 数据旁路技术。
  3. 编译优化:通过编译器调整指令顺序来解决数据相关。

控制相关(控制冲突)

当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。

技术分享图片

解决办法:

  1. 尽早判别转移是否发生,尽早生成转移目标地址
  2. 预取转移成功和不成功两个控制流方向上的目标指令
  3. 加快和提前形成条件码
  4. 提高转移方向的猜准率

流水线的分类

部件功能级、处理机级和处理机间级流水线

根据流水线使用的级别的不同,流水线可分为部件功能级、处理机级和处理机间级流水线。

部件功能级流水就是间复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。

处理机级流水线是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。

处理机间级流水线是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在于下一个处理机所共享的存储器中。

单功能流水线和多功能流水线

按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。

单功能流水线指只能实现一种固定的专门功能的流水线;

多功能流水线指通过各段将的不同连接方式可以同时或不同时地实现多种功能的流水线。

动态流水线和静态流水线

按同一时间内各段之间的连接方式,流水线可分为动态流水线和静态流水线。

静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。

动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得复杂。

线性流水线和非线性流水线

按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线和非线性流水线。

线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。

非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合线性递归的运算。

流水线的多发技术

超标量技术

技术分享图片

每个时钟周期内可并发多条独立指令,要配置多个功能部件;

不能调整指令的执行顺序,通过编译优化技术,把可并行执行的指令搭配起来。

超流水技术

技术分享图片

流水线速度是原来速度的3倍。

在一个时钟周期内再分段(三段)

在一个时钟周期内一个功能部件使用多次(3次)

不能调整指令的执行顺序,靠编译程序解决优化问题。

超长指令字

技术分享图片

由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条。

具有多个操作码字段的超长指令字(可达几百位)

作者:Ligo丶

出处:https://www.cnblogs.com/Ligo-Z/

本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

计算机组成原理5-中央处理器

原文:https://www.cnblogs.com/Ligo-Z/p/13222399.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!