计算机组成原理——课程设计

article/2025/10/16 14:34:01

《计算机组成原理》

课程设计

 

一、目的和要求

深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。

二、实验环境

1.    TEC-2机一台

2.    电脑一台

3.    TEC-2模拟软件一套


三、具体内容

1.分析TEC-2机的功能部件组成,分析TEC-2机支持的指令格式等。

(一)AM2901芯片的内部结构和芯片的引脚信号

AM2901是位片结构,每片内仅有4位线路,内部组成包括:

1.4位的ALU,可以实现8种运算功能,每一位上的2个输入端数据分别用R和S表示,8种功能分别是R+S,S-R,R-S 3种算术运算,R∧S,R∨S,/R∧S,R⊕S,R⊙S 5种逻辑运算。这8种功能的选择控制,用外部送入的3位编码值I5~3实现的。ALU还有Cn+4、F、OVR、和F=0000 4位状态信息,并能接收最低位的一个进位输入信号Cn,ALU还给出了超前进位信号/G和/P。

2.16个4位的通用寄存器组,用R0-R15表示,和一个4位的Q寄存器。通用寄存器组为双端口读出和单端口控制写入的运行方式,而且运算后的结果经一个移位器实现写入。Q寄存器本身具有左、右移位功能且能接收ALU的运算结果。左右移位时,就有移出、移入信号RAM3、RAM0、Q3、Q0 4个信号。

3.该信片能接收外部送入的4位数据D3-0,并输出4位的数据Y3-0。Y3-0可以是通用寄存器A端口上的输出或ALU的运算结果F,并且输出允许控制信号/OE的控制,尽在/OE为低时,Y3-0才有输出。

4.ALU的两个输入端R和S分别可以接收D输入、A端口或逻辑0数据,和A端口、B端口、Q寄存器或逻辑0数据。AM2901器件选用了12种组合的8种,即A_Q,A_B,O_Q,0_B,0_A,D_A,D_Q和D_0 8种组合,并用外部送来的3位控制码I2-0选择。

5.AM2901采用另外3位外部送来的控制信号I8-6,一是选择向外部送出的数据的来源,二是选择内部的通用寄存器组和Q寄存器是否接收和如何接收数据写入。

6.在AM2901芯片内有16个通用寄存器R0-R15,R0-R3、R7-R15共13个寄存器作为通用寄存器供用户使用,R4-R63个寄存器分别作为SP、PC、IP。正常情况下,不能把这3个寄存器当作通用寄存器使用。

 

 

(二)AM2901芯片引脚信号

1.D3-D0:外部送给AM2901的数据信号

2.Y3-Y0:AM2901向外送出的数据信号

3.A、B地址:选择通用寄存器组种的源与目的寄存器,当A和B同值时,被选中的同一个寄存器中的内容将被同时送到A、B两个数据输出端口。

4.I8-I0:外部送来的3组3位控制信号,分别选择AM2901对数据结果的处理方案、ALU执行的运算功能、ALU接收的操作数来源。

 

 

(三)TEC-2机的控制器组成

指令寄存器IR:用于存放当前正在执行的指令内容。

程序计数器PC:PC是用运算器通用寄存器组中的寄存器R5实现的,程序计数器PC用于存放内存单元地址,

指令指针寄存器IP:IP是用运算器通用寄存器组中的寄存器R6实现的,IP用于存放当前正在执行的机器指令其指令代码所在的内存单元地址。

7片LS6116随机读写的存储器芯片组成的56位字长的微程序控制存储器,用于存放TEC-2机的微程序。其内容在刚加电时不定,加电后将首先从2片ROM中读出固化的、用于实现53条机器指令的微程序,稍加组织后写入这一控制存储器,这一过程称为装入微码。装入完成后,将从监控程序的零地址执行指令,完成TEC-2机的启动过程。之后,可以用LDMC指令向控制存储器写入新的微程序,实现新的机器指令。

微指令寄存器PLR由7片8位的寄存器芯片(6片LS374和1片LS273)组成,用于存放当前微指令的内容。

 

(四)为AM2910提供输入地址信号的配套线路

由两片LS2716ROM芯片组成的MAPROM,它可以将指令寄存器中的操作码变为一段微程序的入口地址。

由1片LS125和LS244组成的接受内部总线的IB9-0信号的选择门电路,把由水平板上的开关提供的微指令地址送入AM2910的地址输入端。

由1片LS125和微指令寄存器的PLR55-48组成的一组地址输入,把当前微指令中的后续地址B55-46送入AM2910的地址输入端。

这三组信号均为10位宽,且为互斥关系,分别由/MAP、/VECT和/PL加以选通。

 

(五)AM2910芯片

1.功能:正确形成下一条微指令的地址,以保证微程序正确、高效地执行。

2.组成:AM291包括一个四输入的多路地址选择器,用来选择寄存器/计数器(R),直接输入(D),微程序计数器(μPC)或微堆栈(F)中的一个作为下一条微指令的地址。

3.寄存器/计数器由12个D型触发器组成。当它用作寄存器时,主要用于保存一个微地址,用以实现微程序分支;当它用作计数器时,具有减一功能,主要用于控制微程序的循环次数,若装入的初值为N,则可执行N+1次。

4.微程序计数器由12位增量器和12位寄存器组成。 当增量器的进位输入C1为高电平时,多路器的输出Y加1后装入μPC,用于实现微程序的顺序执行;当C1为低电平时,多路器的输出Y直接装入μPC,用于实现同一条微指令的多次执行。

5.微堆栈是由5字×12位的寄存器堆和微堆栈指针μSP组成,主要用于保存微子程序调用的返回地址和微程序循环的首地址。微堆栈指针μSP总是指向最后一次压入的数据。因此,执行微程序循环时,允许不执行弹出操作而直接访问微堆栈的栈顶。当堆栈中的数据达到5个时,发出堆栈已满信号(/FULL=0)。这时,任何压入操作都将覆盖掉栈顶的数据。

 

 

(六)微指令格式

每条微指令由56位组成,从高到低各位标记为B55-B0,分为13个字段。

 

B55-B46的10位微码是下地址字段;

B55,B44备用;

B43-B40位CI3-1,用于给出AM2910芯片的16中命令码的编号;

B39-37、36分别为3位的SCC和1位的SC,给出AM2910芯片的条件判断信号/CC的选择码,用于保证微指令的条件转移等;

B35位备用;

B34-32位SST,控制标志寄存器的写入;

B31、B27、B23位为/MI0,REQ和/WE,用于控制内存的读写、外设接口的读写,以及微码的装入。

B30-B28位为MI8-6,用于选择运算结果存入的寄存器,以及Y输出的选择;

B26-B24位为MI5-3,用于选择进行何种算术或逻辑运算;

B22-B20位为MI2-0,用于选择R和S端的数据输入;

B19-B16位为A口地址;

B15-B12位为B口地址;

B11-B10位为SCi,控制最低位进位;

B9-B8位为SSH,形成移位信号;

B7位为A口地址选通信号;

B6-B4位为DC1,控制向IB总线的发送内容;

B3位为B口选通地址;

B2-B0位为DC2,选择接收的寄存器。

 

 

(七)自行设计新指令的微程序段

MEM的内容是当前地址寄存器AR所存的地址单元的内容。

寄存器Q的内容可以是立即数,也可以是地址。

11条未定义的机器指令的6位操作码已定,最低两位可用于选择C、Z、V、S四个标志位作为判别条件。

11条未定义的机器指令具有对应的微程序段的入口地址,如D4对应的是100H,D8对应的是110H。

装入新指令的微码有两种方法,一是通过水平板上的开关与按键直接拨入,二是在程序中用LDMC指令实现自动装入。

新指令在每次TEC-2机重新加电后,至少得重新装入一次对应的微码;仅在装入相应微码后,新指令才能执行。

 

2.使用TEC-2仿真软件进行微指令级的设计和调试,完成微程序控制的特定功能计算机的指令设计。

 

选定指令格式、操作码,设计如下指令:

77c58fad45534bccb7107c30c3a86135.png 

基于上图进行下列指令说明:

例:

f63974d60216411bbd2e9f8530b48387.png 

2.1

  1. 把用绝对地址表示的内存单元ADDR2中的内容与内存单元ADDR1中的内容相减,结果存于内存单元ADDR1中。

指令格式:D8××,ADDR1,ADDR2,   三字指令(控存入口110H)

功能:    [ADDR1]=[ADDR2] -[ADDR1]

 

画出微指令流程图

72cde38aa3264efeaee159851bc9eccf.png

 

微指令详细设计:

PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第1个操作数的地址做准备

MEM -> AR, MEM->R7:  0000 0E00 30F0 7002   将指令地址送AR(ADDR1),R7寄存器

MEM->Q:              0000 0E00 00F0 0000   将内存单元中的数据送入Q寄存器

PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第2个操作数的地址做准备

MEM->AR:             0000 0E00 10F0 0002   将指令地址送AR(ADDR2)

MEM-Q->Q:             0000 0E01 02E0 0000   ADDR2-ADDR1=ADDDR1

R7->AR:              0000 0E00 9047 0002   把ADDR1的地址R7送入AR中

Q→MEM,CC#=0,3#,A4H:  0029 0300 1020 0010   将结果送入ADDR1中

 

 

pc指向addr2之后,如何把计算的结果值重新送回addr1。先把addr1的地址保存在R7寄存器中。要存入结果的时候,把R7中的内容送到AR中。

 

 

  1.  PC→AR,PC+1→PC:0000  0E00  A0B5  5402

 

0   0    0    E    0    0    A     0    B    5    5    4     0    2

0000

0000

0000

1110

000 0

0 000

1 010

0 000

1 011

0101

0101

01 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                     不操作 

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R5 ,即程序计数器 PC

A 口:使用了寄存器 R5 ,即程序计数器 PC

MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 B

MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 A

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC      未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

(2)  MEM -> AR, MEM->R7:0000 0E00 30F0 7002

 

0   0    0    E    0    0    3     0    F    0    7    0     0    2

0000

0000

0000

1110

000 0

0 000

0 011

0 000

1 111

0000

0111

00 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                     存储器读

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R7 ,即程序计数器 PC

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

MI5-3 :运算功能选择为“ +S ”,即执行 D+0

BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC      未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

 

(3)  MEM→Q:0000 0E00 00F0 0000

 

0   0    0    E    0    0    0     0    F    0    0    0     0    0

0000

0000

0000

1110

000 0

0 000

0 000

0 000

1 111

0000

0000

00 00

0 000

0 000

下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

MI5-3 :运算功能选择为“ +S ”,即执行 D+0

BI8-6 :有返回值 0 ,而 Y 的输出选择为 F   ,故此处为 000

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为读出内存单元内容,并将其送入 Q 寄存器,故取 001

SST :未用状态,故为 000

备用位为 0

SC     未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

(4)  PC→AR,PC+1→PC:0000 0E00 A0B5 5402

 

与第一条指令相同

 

(5)  MEM→AR:0000 0E00 10F0 0002

 

0   0    0    E    0    0    1     0    F    0    0    0     0    2

0000

0000

0000

1110

000 0

0 000

0 001

0 000

1 111

0000

0000

00 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

MI5-3 :运算功能选择为“ +S ”,即执行 D+0

BI8-6 :没有返回值,  Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为存储器读,故取 001

SST :未用状态,故为 000

备用位为 0

SC    未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

(6)  MEM-Q->Q:   0000 0E01 02E0 0000

 

 

0   0    0    E    0    1    0     2    E    0    0    0     0    0

0000

0000

0000

1110

000 0

0 001

0 000

0 010

1 111

0000

0000

00 00

0 000

0 000

下地址         顺序执行 SCC SC  备用SST  F->B    S-R     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 Q

MI5-3 :运算功能选择为“ S-R ”,即执行 Q-D

BI8-6 :有返回值 0 ,而 Y 的输出选择为 F   ,故此处为 000

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为读出内存单元内容,将其与 Q 寄存器中内容相加,故取 001

SST :状态保存,故为 001

备用位为 0

SC      未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

(7)   R7->AR: 0000 0E00 9047 0002

 

0   0    0    E    0    0    9     0    4    7    0    0     0    2

0000

0000

0000

1110

000 0

0 000

1 001

0 000

0 100

0111

0000

00 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R7 ,即程序计数器 PC

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 A

MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC      未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

 

(8)  Q→MEM,CC#=0, 3#, A4H:0029 0300 1020 0010

 

2   9    0    3    0    0    1     0    2    0    0    0     1    0

0010

1001

0000

0011

000 0

0 000

0 001

0 000

0 010

0000

0000

00 00

0 001

0 000

下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,,寄存器未接收,故 DC2 为 000

DC1 :向 IB 总线发送运算器的指令,故 DC1 为 001

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 Q

MI5-3 :运算功能选择为“ +S ”,即执行 0+Q

BI8-6 :没有返回值, Y 的输出选择为 F

MI0# , REQ , WE# :用于控制内外数据总线的读和写,此处为将 Q 寄存器中值写入内存单元,故取 000

SST :未用状态,故为 000

备用位为 0

SC    此处低电平有效,故取 SCC 为 000 , SC 为 0

SCC

Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

 

2.2

(2)把用绝对地址表示的内存单元ADDR2中的内容传送至地址为ADDR1的内存单元中保存。

指令格式:E0××,ADDR1,ADDR2,三字指令(控存入口130H)

功能:    [ADDR1]←[ADDR2]

 

 

画出微指令流程图

b061d76cb4f14634929a519cb9a66c66.png

 

微指令详细设计:

PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第1个操作数的地址做准备

MEM -> AR, MEM->R7:  0000 0E00 30F0 7002   将指令地址送AR(ADDR1),R7寄存器

PC->AR,PC+1->PC:     0000 0E00 A0B5 5402   为读取第2个操作数的地址做准备

MEM->AR:             0000 0E00 10F0 0002   将指令地址送AR(ADDR2)

MEM->Q:               0000 0E00 00F0 0000   将内存单元中的数据送入Q寄存器

R7->AR:              0000 0E00 9047 0002   把ADDR1的地址R7送入AR中

Q→MEM,CC#=0,3#,A4H:  0029 0300 1020 0010   将结果送入ADDR1中

 

(1)  PC→AR,PC+1→PC:0000  0E00  A0B5  5402

 

0   0    0    E    0    0    A     0    B    5    5    4     0    2

0000

0000

0000

1110

000 0

0 000

1 010

0 000

1 011

0101

0101

01 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 不操作 

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R5 ,即程序计数器 PC

A 口:使用了寄存器 R5 ,即程序计数器 PC

MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 B

MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 A

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC      未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

(2)  MEM -> AR, MEM->R7:0000 0E00 30F0 7002

 

0   0    0    E    0    0    3     0    F    0    7    0     0    2

0000

0000

0000

1110

000 0

0 000

0 011

0 000

1 111

0000

0111

00 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                               存储器读

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R7 ,即程序计数器 PC

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

MI5-3 :运算功能选择为“ +S ”,即执行 D+0

BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC      未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

 

(3)  PC→AR,PC+1→PC:0000 0E00 A0B5 5402

与第一条指令相同

(4)  MEM→AR:0000 0E00 10F0 0002

 

0   0    0    E    0    0    1     0    F    0    0    0     0    2

0000

0000

0000

1110

000 0

0 000

0 001

0 000

1 111

0000

0000

00 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

MI5-3 :运算功能选择为“ +S ”,即执行 D+0

BI8-6 :没有返回值,  Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为存储器读,故取 001

SST :未用状态,故为 000

备用位为 0

SC    未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

(5)  MEM→Q:0000 0E00 00F0 0000

 

0   0    0    E    0    0    0     0    F    0    0    0     0    0

0000

0000

0000

1110

000 0

0 000

0 000

0 000

1 111

0000

0000

00 00

0 000

0 000

下地址         顺序执行 SCC SC  备用SST  F->B    +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 D (外部数据), S 端输入为 0

MI5-3 :运算功能选择为“ +S ”,即执行 D+0

BI8-6 :有返回值 0 ,而 Y 的输出选择为 F   ,故此处为 000

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处为读出内存单元内容,并将其送入 Q 寄存器,故取 001

SST :未用状态,故为 000

备用位为 0

SC     未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

(6)   R7->AR: 0000 0E00 9047 0002

 

0   0    0    E    0    0    9     0    4    7    0    0     0    2

0000

0000

0000

1110

000 0

0 000

1 001

0 000

0 100

0111

0000

00 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R7 ,即程序计数器 PC

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 A

MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC      未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

 

(7)  Q→MEM,CC#=0, 3#, A4H:0029 0300 1020 0010

 

2   9    0    3    0    0    1     0    2    0    0    0     1    0

0010

1001

0000

0011

000 0

0 000

0 001

0 000

0 010

0000

0000

00 00

0 001

0 000

下地址         顺序执行 SCC SC  备用SST  无       +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,,寄存器未接收,故 DC2 为 000

DC1 :向 IB 总线发送运算器的指令,故 DC1 为 001

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 Q

MI5-3 :运算功能选择为“ +S ”,即执行 0+Q

BI8-6 :没有返回值, Y 的输出选择为 F

MI0# , REQ , WE# :用于控制内外数据总线的读和写,此处为将 Q 寄存器中值写入内存单元,故取 000

SST :未用状态,故为 000

备用位为 0

SC    此处低电平有效,故取 SCC 为 000 , SC 为 0

SCC

Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

 

2.3

(3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定目的地址,否则顺序执行。

指令格式:E5 DR SR,DISP 双字指令(控存入口140H,  DISP为相对转移地址偏移量)

功能:    if  DR=SR goto  IP+DISP  else 顺序执行。

 

画出微指令流程图

 

00a622f9a38a43db969e2165d767e0f0.png

 

 

 

微指令详细设计:

 

 

SR-DR:    0000 0E01 9190 0088   两者相减,若相等CC#=Z=1

PC→AR,PC+1→PC,CC#=CND:     0029 03E0 A0B5 5402  判断相等,相等跳转IP+DISP,否则顺序执行。

MEM+R6→PC:    0029 03E0 20D6 5000  :把一个内存赋值

 

 

(1)  SR-DR:    0000 0E01 9190 0088

 

0   0    0    E    0    1    9     1    9    0    0    0     8    8

0000

0000

0000

1110

000 0

0 001

1 001

0 001

1 001

0000

0000

00 00

1 000

1 000

下地址         顺序执行 SCC SC  备用SST  无       S-R    MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,寄存器未接收,故 DC2 为 000

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :用指令给 ALU 的 R 端赋值,故为 1

SB :用指令给 ALU 的 S 端赋值,故为 1

SSH :未移位

SCI :未进位

B 口:未使用寄存器,故为 0

A 口:未使用寄存器,故为 0

MI2-0 :此时 ALU 的 R 端输入为 A , S 端输入为 B

MI5-3 :运算功能选择为“ S-R ”,即执行 SR-DR

BI8-6 :没有返回值, Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不进行任何操作,故取 10X

SST :状态保存,故为 001

备用位为 0

 SC    未用条件码,故为 0

SCC

Am2901 命令: 14# 命令,即为顺序执行

下地址:由于顺序执行,并未使用下地址,故下地址为 0

 

(2)  PC→AR,PC+1→PC,CC#=CND:     0029 03E0 A0B5 5402

 

2   9    0    3    E    0    A     0    B    5    5    4     0    2

0010

1001

0000

0011

111 0

0 000

1 010

0 000

1 011

0101

0101

01 00

0 000

0 010

下地址         顺序执行 SCC SC  备用SST  F->B     +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                                                 存储器读

 

DC2 :在本条微码中,地址寄存器接收,故 DC2 为 010

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R5 ,即程序计数器 PC

A 口:使用了寄存器 R5 ,即程序计数器 PC

MI2-0 :此时 ALU 的 R 端输入为 0 , S 端输入为 B

MI5-3 :运算功能选择为“ +S ”,即执行 +1 功能

BI8-6 :有返回值,且返回值返回至 B ,而 Y 的输出选择为 A

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC    此处根据 SR-DR 数值是否为 0 判断 SR 与 DR 是否相等,条件是由指令给出的,所以这里 SCC

SCC   为 111 ,而 CC 低电平有效,故 SC 为 0,

Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

 

(3)  MEM+R6→PC:    0029 03E0 20D6 5000

 

2   9    0    3    E    0    2     0    D    6    5    0     0    0

0010

1001

0000

0011

111 0

0 000

0 010

0 000

1 101

0110

0101

00 00

0 000

0 000

下地址         顺序执行 SCC SC  备用SST  F->B     +S     MI2-0  A口    B口  SCI SSH  SA DC1 SB DC2

                                               存储器读

 

DC2 :在本条微码中,,寄存器未接收,故 DC2 为 000

DC1 :未向 IB 总线发送控制,故 DC1 为 000

SA :作 Am2901

SB :作 Am2901

SSH :未移位

SCI :未进位

B 口:使用了寄存器 R5 ,即程序计数器 PC ,故为 0101

A 口:使用了寄存器 R6 ,即程序计数器 PC

MI2-0 :此时 ALU 的 R 端输入为 D( 外部数据 ) , S 端输入为 Q

MI5-3 :运算功能选择为“ +S ”,即执行 D+0

BI8-6 :有返回值,且返回值返回至 Q ,而 Y 的输出选择为 F

MI0# , REQ , WE# :三位用于控制内外数据总线的读和写,此处不操作,故取 10X

SST :未用状态,故为 000

备用位为 0

SC    此处根据 SR-DR 数值是否为 0 判断 SR 与 DR 是否相等,条件是由指令给出的,所以这里 SCC

SCC   为 111 ,而 CC 低电平有效,故 SC 为 0,

Am2901 命令: 3# 命令,即为条件转移,低电平有效,有效时,转入下地址

下地址:此命令为最后一条命令,若指令跳转,将转入 A4H ,即下地址为 29

 

3.测试程序设计及调试。

3.1

选定指令操作码,指令格式,设计一条指令,其功能是把用绝对地址表示的内存单元B中的内容减去内存单元A中的内容相加,结果存放在A单元中。

 

把用绝对地址表示的内存单元ADDR2中的内容与内存单元ADDR1中的内容相减,结果存于内存单元ADDR1中。

指令格式:D8××,ADDR1,ADDR2,   三字指令(控存入口110H)

功能:    [ADDR1]=[ADDR2] -[ADDR1]

 

(1)用“E”命令输入微码

在命令行提示符状态下输入:

E900

 

屏幕上将显示:

0900:

 

之后继续输入:

0000 0E00 A0B5 5402

0000 0E00 30F0 7002

0000 0E00 00F0 0000

0000 0E00 A0B5 5402

0000 0E00 10F0 0002

0000 0E01 02E0 0000

0000 0E00 9047 0002

0029 0300 1020 0010

 

(2)用“A”命令输入加载微码的程序

在命令行提示符状态下输入:

A800

屏幕将显示:

0800:

 

之后继续输入:

MOV R1,900   ;微码在内存中的首地址

MOV R2,8      ;共8条指令

MOV R3,110   ;微码在微控存中的首地址

LDMC         ;加载微码指令

RET

 

(3)用“G”命令运行加载微码的程序

在命令行提示符状态下输入:

G800

 

(4)用“A”命令输入程序

在命令行提示符状态下输入:

A820

 

屏幕将显示:

0820

 

之后继续输入:

MOV R0,0015

MOV [A00],R0

MOV R0,0046

MOV [A01],R0

NOP

NOP

NOP

RET

 

(5)用“E”命令输入新指令

在命令行提示符状态下输入:

E828

 

屏幕将显示:

0828

 

之后继续输入:

D800 0A00 0A01

 

(6)用“G”命令运行程序

在命令行提示符状态下输入:

G820

 

(7)用“D”命令察看运行结果

在命令行提示符状态下输入:

DA00

 

以下为检验过后的截图:

 

 

644ad0db17d5499e96d446619934ebf8.png

 f208b1ab087a4641ae85a56aae5dcaf5.png

分析:将立即数0015存入内存单元0A00(ADDR1),将立即数0046存入内存单元0A01(ADDR2);0046-0015=0031即(ADDR2-ADDR1),利用R7所存内存单元地址0A00,使结果存入了0A00,即(ADDR2-ADDR1=ADDR1)。验证所写微程序正确。

 

 

3.2

选定指令操作码,指令格式,设计一条指令,其功能是把用绝对地址表示的内存单元B中的内容存放在A单元中。

 

 

把用绝对地址表示的内存单元ADDR2中的内容传送至地址为ADDR1的内存单元中保存。

指令格式:E0××,ADDR1,ADDR2,三字指令(控存入口130H)

功能:    [ADDR1]←[ADDR2]

 

 

(1)用“E”命令输入微码

在命令行提示符状态下输入:

E900

屏幕上将显示:

0900:

之后继续输入:

 

0000 0E00 A0B5 5402

0000 0E00 30F0 7002

0000 0E00 A0B5 5402

0000 0E00 10F0 0002

0000 0E00 00F0 0000

0000 0E00 9047 0002

0029 0300 1020 0010

 

(2)用“A”命令输入加载微码的程序

在命令行提示符状态下输入:

A800

 

屏幕将显示:

0800:

 

之后继续输入:

MOV R1,900   ;微码在内存中的首地址

MOV R2,7      ;共7条指令

MOV R3,130   ;微码在微控存中的首地址

LDMC         ;加载微码指令

RET

 

(3)用“G”命令运行加载微码的程序

在命令行提示符状态下输入:

G800

 

(4)用“A”命令输入程序

在命令行提示符状态下输入:

A820

 

屏幕将显示:

0820

 

之后继续输入:

MOV R0,0015

MOV [A00],R0

MOV R0,0046

MOV [A01],R0

NOP

NOP

NOP

RET

 

(5)用“E”命令输入新指令

在命令行提示符状态下输入:

E828

 

屏幕将显示:

0828

 

之后继续输入:

E010 0A00 0A01

 

(6)用“G”命令运行程序

在命令行提示符状态下输入:

G820

 

(7)用“D”命令察看运行结果

在命令行提示符状态下输入:

DA00

47d8e9856d394b56beb62b10fa27b050.png

007ed83c50d9423b81d6f579bb1198c1.png

358f5df65ded403fbc2dc28bfd6a8e37.png 

 

 

 

 

分析:与上题相似,将立即数0015存入内存单元0A00(ADDR1),将立即数0046存入内存单元0A01(ADDR2);利用R7所存内存单元地址0A00,将0A01的内容存入了0A00,即(ADDR2-)ADDR1)。验证所写微程序正确。

 

 

 

3.3

(3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定目的地址,否则顺序执行。

指令格式:E5 DR SR,DISP 双字指令(控存入口140H,  DISP为相对转移地址偏移量)

功能:    if  DR=SR goto  IP+DISP  else 顺序执行。

 

DR!=SR不相等情况时:

用“E”命令输入微码

在命令行提示符状态下输入:

E900

 

屏幕上将显示:

0900:

 

之后继续输入:

 

0000 0E01 9190 0088

0029 03E0 A0B5 5402

0029 03E0 20D6 5000

在命令行提示符状态下输入:

A800

 

屏幕将显示:

0800:

 

之后继续输入:

MOV R1,900   ;微码在内存中的首地址

MOV R2,3      ;共7条指令

MOV R3,140   ;微码在微控存中的首地址

LDMC         ;加载微码指令

RET

 

 

(3)用“G”命令运行加载微码的程序

在命令行提示符状态下输入:

G800

 

(4)用“A”命令输入程序

在命令行提示符状态下输入:

A820

 

屏幕将显示:

0820

 

之后继续输入:

MOV R1,0023

MOV R2,0026

NOP

NOP

MOV R1,0026

RET

 

(5)用“E”命令输入新指令

在命令行提示符状态下输入:

E824

 

屏幕将显示:

0824

 

之后继续输入:

E512  0828

 

(6)用“G”命令运行程序

在命令行提示符状态下输入:

G820

 

(7)用“R”命令察看运行结果

在命令行提示符状态下输入:

R

bae069cffbb34930969af5bf09b8edc1.png

be3ad572dc03411f9aa9b93481b47a4b.png

07d7a22182c04295be06d8990875dd62.png

 

 

 

 

分析:DR=SR不相等时,顺序执行。立即数R1=0023与R2=0026不相等,则顺序执行R1=0026

 

DR=SR相等情况时:

 

用“E”命令输入微码

在命令行提示符状态下输入:

E900

 

屏幕上将显示:

0900:

 

之后继续输入:

 

0000 0E01 9190 0088

0029 03E0 A0B5 5402

0029 03E0 20D6 5000

在命令行提示符状态下输入:

A800

 

屏幕将显示:

0800:

 

之后继续输入:

MOV R1,900   ;微码在内存中的首地址

MOV R2,3      ;共7条指令

MOV R3,140   ;微码在微控存中的首地址

LDMC         ;加载微码指令

RET

 

 

(3)用“G”命令运行加载微码的程序

在命令行提示符状态下输入:

G800

 

(4)用“A”命令输入程序

在命令行提示符状态下输入:

A820

 

屏幕将显示:

0820

 

之后继续输入:

MOV R1,0023

MOV R2,0023

NOP

NOP

MOV R1,0026

RET

 

(5)用“E”命令输入新指令

在命令行提示符状态下输入:

E824

 

屏幕将显示:

0824

 

之后继续输入:

E512  0828

 

(6)用“G”命令运行程序

在命令行提示符状态下输入:

G820

 

(7)用“R”命令察看运行结果

在命令行提示符状态下输入:

R

98fa14b5c25b47f69f08597226bede0e.png

8c6025fde1e74424a16b175ba0e11a40.png

108d5f2dc3d44e16b7475e85801bb32e.png

 

 

 

 

分析:当R1(SR)存储0023H、R2(DR)存储0023H时,即DR=SR时,程序跳转至828H(ADDR),所以未运行MOV R1,0026,所以程序运行后R1仍为0023H。而PC=IP+DISP.

 

4.写出自己在小组中承担的任务及发挥的作用。

一人独立完成

四.实验心得

    本次课程设计,前面虽然不清楚微程序编写,但是根据实验三微程序的加法以及网上资料和书中的知识,才了解怎样设计指令。

    此次课程设计,通过对TEC-2仿真模拟机进行测试,通过3个微指令编写,更加深入了解了各种指令的执行过程。同时在编写微指令时,也需要了解计算机的汇编语言,所以本次课设,与汇编语言和计算机组成原理相互联系,进而进行更深层次的学习。

    实验相对麻烦,在设计过程中,同学之间进行交流,遇到困难相互解决,有各自的想法。所以本次课设不仅巩固了微程序设计的方法与思想,同时也学习了同学之间的交流以及互相帮助。

 

参考资料:

百度文库-信息提示

《计算机组成原理》课程设计---微程序设计_山海一念的博客-CSDN博客_计算机组成原理微程序设计

《计算机组成原理》课程设计报告——TEC-2实验系统——微程序设计_无限迭代中......-CSDN博客

臭咸鱼的缺氧瓶

[计算机组成] TEC-2 课程设计 微码说明_ckxkexing的博客-CSDN博客

 

 


http://chatgpt.dhexx.cn/article/QdFbCZGa.shtml

相关文章

计算机组成原理课程设计:复杂模型机

课程设计报告 课程名称: 计算机组成原理 设计题目: 复杂模型机 目 录 1、课程设计任务书 3 1.1设计任务 3 1.2性能指标和设计要求 3 2、本设计的模型机体系结构及功能 4 2.1 模型机的体系结构 5 2.2 模型机所具有的基本功能 5 3、 模型机硬件设计 5 3…

用excel、matlab、python绘制正态分布图

用excel、matlab、python绘制正态分布图 excel绘图matlab绘图python绘图 为加深对统计知识的理解,老师要求用excel和matlab绘图,在这想介绍3个常见的绘图软件来绘制正态分布密度函数曲线和正态分布分布函数曲线。 excel: matlab: excel绘图…

统计信号处理基础 习题解答1-2

题目: 一个未知参数θ影响一个随机变量实验的结果,这个随机实验可以看成随机变量x。x的PDF为 进行一系列的实验,发现x总是在区间[97,103]内。结果我们得出结论:θ肯定是100,这种推测正确么? 解答&#xf…

数学建模(NO.9斯皮尔曼相关系数)

斯皮尔曼相关系数 一. 定义方法一:计算公式法三.方法二:利用皮尔逊相关系数法四.Matlab计算五.斯皮尔曼和皮尔逊对比六.斯皮尔曼相关系数的假设检验1.小样本(查表)2.大样本(计算统计量) 七.两个比较八.相关…

【FinE】统计与计量指标计算(Matlab)

导航 CDF函数(normal distribution)CDF函数(t-location-scale distribution)CAPM模型 β \beta β计算误差项 ε i \varepsilon_i εi​计算correlation and covariance t t t分布拟合序列Generalized Hyperbolic Distributionapproximation method 1approximation method 2 Go…

【概率论与数理统计】python实验

实验一抛硬币试验的模拟 利用python产生一系列0和1的随机数,模拟抛硬币试验。验证抛一枚质地均匀的硬币,正面向上的频率的稳定值为0.5。 实验步骤 (1)生成0和1的随机数序列,将其放入列表count中;也可用函数…

matlab 数理统计,概率论和数理统计(matlab应用)1

概率论和数理统计(matlab应用)1 (2006-04-29 08:53:49) 12.1 概 述 自然界和社会上会发生各种各样的现象,其中有的现象在一定条件下是一定要发生的,有的则表现出一定的随机性,但总体上又有一定的规律可循。一般称前者为确定性事件&#xff0c…

正态分布中normpdf和normcdf的区别

同时,也可以扩展为其它函数的区别,即pdf与cdf

matlab中normcdf函数用法,Matlab中标准正态分布的密度函数是normcdf(x,0,1)

中标准正属于项目资本现金流量表中现金流出构成的是() 态分USCI模块中的波特率由分频器和调制器共同作用生成。 在MSP430F66xx时钟设置中XT1的XIN和XOUT引脚接32768Hz低频晶振,密度则UCSCTL6的UCSCTL6 & ~XT1OFF表示使能XT1,UCSCTL6 | XCAP_3表示选择…

matlab中normcdf和normpdf区别

最近准备参加个数学建模,其中校赛题目是有关于正态分布的排队论,在做的时候总是发现有问题,后来仔细研究才发现在matlab中关于正态分布有两个函数normcdf和normpdf。

【Matlab】正态分布常用函数normpdf_normcdf_norminv_normrnd_normfit

1.normpdf 功能:正态分布概率密度函数 用法 Y normpdf(X,mu,sigma) Y normpdf(X) % (mu 0, sigma 1) Y normpdf(X,mu) % (sigma 1)例子 % code1 % 画标准正态分布概率密度函数 x -10:0.01:10; y normpdf(x, 0, 1); plot(x,y); grid on;结果&#xff1a…

firefox iMacros

iMacros是一个基于firefox的插件,它可以帮助你自动填写表单,自动提交,自动上传下载等 iMacros就是一个可以帮助你实现自动化重复性的任务。无论你对Firefox做什么,iMacros可以自动执行它。网络设计人员可以使用的功能测试和回归测…

SEO必备的利器–iMacros

Via http://www.snailtoday.com/2012/02/imacros/ 今天向大家介绍一个做SEO必备的利器–iMacros,我们可以用它来自动发布博客评论、自动注册论坛账号、自动发布文章等,几乎可以和一些SEO软件相媲美。其实在之前翻译的一篇文章《10000美元/天是这样炼成的…

imacros:使用外部编辑器

2019独角兽企业重金招聘Python工程师标准>>> 在imacros中,右击iim文件,选择编辑宏,会调用imacros自带的编辑器进行编辑。 其实也可以自定义: 在Paths选项卡中选择外部编辑器: 转载于:https://my.oschina.ne…

FF的插件iMacros简单交流

今天组织了公司第一次软件测试沙龙,主题是自动化测试插件--iMacros,公司的一位同事分享了他关于iMacros使用的一些心得给我们分享,现小小总结一下: iMacros是一款功能比较强的FF插件(当然也有IE和chrome的版本&#xf…

imacros:初次尝试

2019独角兽企业重金招聘Python工程师标准>>> 安装 打开火狐插件管理页面,搜索、安装: 当然,用的免费版本。 安装后,工具栏出现: 示例 VERSION BUILD9030808 RECORDERFX TAB T1 TAB CLOSEALLOTHERS URL GOT…

imacros:运行javascript

2019独角兽企业重金招聘Python工程师标准>>> 将#Current.iim重命名为js后缀的文件,例如test.js。注意,每次录制时都会有新的#Current.iim产生,若无则会新建,有则覆盖内容。 运行test.js: 这里的js有较多的限…

如何使用iMacros进行web程序中页面加载的性能测试

iMacros 的官方简介如下,这里就不做翻译了,本人觉得还是看原汁原味的介绍好。 iMacros is an extension for the Mozilla Firefox web browsers which adds record and replay functionality similar to that found in web testing and form filler sof…

火狐浏览器Firefox 如何使用iMacros 自动填写网页表单

1 我们首先访问一个想要自动填写表单的网站。我们以百度为例,右侧有登录窗口。 2 然后我们点开刚安装上的iMacros插件,一般安装之后就会自动出现在浏览器的某个地方,点击记录选项卡,再点击记录。 3 iMacros将立即开始记录宏命令…

如何使用iMacros自动化重复的网页浏览器任务

如何使用iMacros自动化重复的网页浏览器任务 计算机应该自动重复任务- 如果你发现自己提交或者重复地导航网站,试试 iMacros 。 是 easy-to-use - 你只需要做一次动作。 iMacros对于任何在web浏览器中执行重复任务的人都是理想的,无论是否重复提交复杂的…