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+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告