8085微处理器减法操作指令


在两个数的减法运算中,8085要求累加器(Accumulator)存储其中一个操作数,然后从该操作数中减去由以下方式指定的另一个操作数。

  • —8位寄存器的内容;

  • —HL寄存器对指向的内存单元的内容;

  • —8位立即数。

在8085指令集中,**SUB** 是一个助记符,代表“从累加器中减去R的内容”。 这里R代表以下任意一个寄存器,或者HL寄存器对指向的内存单元M。

R = A, B, C, D, E, H, L, 或 M

助记符,操作数 
操作码(十六进制)
字节数
SUB A
97
1
SUB B
90
1
SUB C
91
1
SUB D
92
1
SUB E
93
1
SUB H
94
1
SUB L
95
1
SUB M
96
1

在这条指令中,寄存器R的内容将从累加器中减去,结果差将存储到累加器中,覆盖累加器之前的内容。由于R可以是8个值中的任意一个,因此此类指令有8个操作码,如上表所示。它只占用内存中的1个字节。

让我们以**SUB E**作为此类指令的示例。由于它是一条1字节指令,因此它将占用内存中的单个字节空间。该指令执行的结果如下面的示例所示。

示例1

假设累加器和E寄存器初始值分别为ABH和CDH。那么,执行**SUB E**指令后,寄存器的内容将变为:


之前
之后
(A)
ABH
DEH
(E)
CDH
CDH
(F)
任意值
Cy=1,AC=0,S=1,P=1,Z=0


地址
十六进制代码
助记符
注释
2004
93
SUB E
累加器 = 累加器 + E的二进制补码

这里Cy=1表示结果为负。实际上A – E = A + E的二进制补码。以下是计算过程:

(A) BH (1010 1011) ---------------> 1010 1011

二进制补码

(E) CDH (1100 1101) ---------------> 0011 0011

---------

1101 1110 (DEH)

以下是**SUB E**指令的时序图:

**总结:**因此,这条指令**SUB E**需要1个字节、1个机器周期(操作码获取)和4个T状态才能执行,如时序图所示。

示例2

假设累加器和E寄存器初始值分别为CDH和ABH。那么,执行**SUB E**指令后,寄存器的内容将变为:


之前
之后
(A)
CDH
22H
(E)
ABH
ABH
(F)
任意值
Cy=0,AC=1,S=0,P=1,Z=0


地址
十六进制代码
助记符
注释
2004
93
SUB E
累加器 = 累加器 + E的二进制补码

这里Cy=0表示结果为正。实际上A – E = A + E的二进制补码。以下是计算过程:

(A) CDH (1100 1101) ---------------> 1100 1101

二进制补码

(E) ABH (1010 1011) ---------------> 0101 0101

---------

0010 0010 (22H)

以下是**SUB E**指令的时序图:

**总结:**因此,这条指令**SUB E**需要1个字节、1个机器周期(操作码获取)和4个T状态才能执行,如时序图所示。

在8085指令集中,**SUI** 是一个助记符,代表“从累加器中减去立即数”,这里**d8**代表任意8位或1字节数据。这条指令用于从累加器中减去8位立即数。减法的结果将存储到累加器中,覆盖其之前的内容。由于它是一个算术指令,因此标志位将根据结果进行影响。它是一条2字节指令,在内存中占用2个字节。

助记符,操作数 
操作码(十六进制)
字节数
SUI 数据
D6
2

当我们发出**SUI d8**指令时,实际上会将d8的二进制补码与累加器的内容相加。结果将存储回累加器。

示例1

SUI ABH 是此类指令的一个示例。这意味着从累加器的内容中减去ABH的二进制补码。假设累加器的初始内容为CDH。以下是跟踪表:


之前
之后
(A)
CDH
22H
(F)
任意值
Cy=0,AC=1,S=0,P=1,Z=0


地址
十六进制代码
助记符
注释
2002
D6
SUI ABH
累加器 = 累加器 + ABH的二进制补码
2003
AB

操作数 ABH

这里Cy=0表示结果为正。实际上A – ABH = A + ABH的二进制补码。以下是计算过程:

(A) CDH (1100 1101) ---------------> 1100 1101

                             二进制补码

(d8) ABH (1010 1011) ---------------> 0101 0101

                                                        ---------------

                                                       0010 0010 (22H)

以下是**SUI ABH**指令的时序图:

**总结:**因此,这条指令**SUI d8**需要2个字节、2个机器周期(操作码获取、内存读取)和7个T状态才能执行,如时序图所示。

示例1

SUI ABH 是此类指令的一个示例。这意味着从累加器的内容中减去ABH的二进制补码。假设累加器的初始内容为CDH。以下是跟踪表:


之前
之后
(A)
CDH
22H
(F)
任意值
Cy=0,AC=1,S=0,P=1,Z=0


地址
十六进制代码
助记符
注释
2002
D6
SUI ABH
累加器 = 累加器 + ABH的二进制补码
2003
AB

操作数 ABH

这里Cy=0表示结果为正。实际上A – ABH = A + ABH的二进制补码。以下是计算过程:

(A) CDH (1100 1101) ---------------> 1100 1101

二进制补码

(d8) ABH (1010 1011) ---------------> 0101 0101

                                                          --------------

                                                         0010 0010 (22H)

以下是**SUI ABH**指令的时序图:

**总结:**因此,这条指令**SUI d8**需要2个字节、2个机器周期(操作码获取、内存读取)和7个T状态才能执行,如时序图所示。

示例2

SUI CDH 是此类指令的一个示例。这意味着从累加器的内容中减去CDH的二进制补码。假设累加器的初始内容为ABH。以下是跟踪表:


之前
之后
(A)
ABH
DEH
(F)
任意值
Cy=1,AC=0,S=1,P=1,Z=0


地址
十六进制代码
助记符
注释
2002
D6
SUI CDH
累加器 = 累加器 + CDH的二进制补码
2003
CD

操作数 CDH

这里Cy=1表示结果为负。实际上A – CDH = A + CDH的二进制补码。以下是计算过程:

ABH (1010 1011)       ---------------> 1010 1011

                       二进制补码

(d8) CDH (1100 1101) ---------------> 0011 0011

                                                        --------------

                                                         1101 1110 (DEH)

以下是**SUI CDH**指令的时序图:

**总结:**因此,这条指令**SUI d8**需要2个字节、2个机器周期(操作码获取、内存读取)和7个T状态才能执行,如时序图所示。

更新时间: 2019年7月30日

3K+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始学习
广告