




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章指令系統(tǒng)
3.180X86/Pentium指令格式和尋址
方式
3.28086/8088指令系統(tǒng)
3.3匯編語言程序設(shè)計
返回主目錄
第3章指令系統(tǒng)
3.1.1指令格式
每臺計算機都有一套反映該計算機全部功能的指令,
它構(gòu)成了該計算機的指令系統(tǒng)。通常指令以二進制編碼的
形式存放在存儲器中,用二進制編碼形式表示的指令稱為
機器指令。CPU可以直接識別機器指令。對于使用者來
說,機器指令記憶、閱讀比較困難,為此將每一條指令都
用統(tǒng)一規(guī)定的符號和格式來表示。用符號表示的指令稱為
符號指令。符號指令具有直觀、易理解、可幫助記憶的
特點。匯編語言程序中的指令就是符號指令。在計算機
中,符號指令與機器指令具有一一對應(yīng)的關(guān)系。
每條符號指令都由操作碼和操作數(shù)兩部分組成,操作碼
表示計算機執(zhí)行某種指令功能,操作數(shù)表示操作中所需要的
數(shù)據(jù)或者所需數(shù)據(jù)與輸出數(shù)據(jù)的存放位置(又稱地址碼)。
80X86/Pentium系列CPU采用變字節(jié)指令格式,由1?16個
字節(jié)組成一條指令,指令的一般格式如圖3-1所示。
字段1字段2字段3字幽字段5字段6
PrefixOPcodemodr/ms-i-bdispdata
1?41?20」,2,停0,1,2,4^
1字節(jié)
字節(jié)子13節(jié)節(jié)
圖3-1指令格式
一條指令的6個字段中,字段1是附加字段,字段2到
字段6是基本字段。各字段的含義如下:
(1)操作碼字段OPcodeo
操作碼字段規(guī)定指令的操作類型,說明指令所要完成
的操作。同時還指出操作數(shù)類型、操作數(shù)傳送方向、寄存
器編碼或符號擴展等。
(2)尋址方式字段modr/m和s-1-b。尋址方式字段規(guī)定
寄存器/存儲器操作數(shù)的尋址方式。modr/m為主尋址字
節(jié),它規(guī)定操作數(shù)存放的位置(r/m)以存儲器操作數(shù)有效
地址EA的計算方法。s-1-b為比例-變址-基址尋址字節(jié)。一
般所有訪問存儲器指令中都有主尋址字節(jié),是否需翼H例-
?變址-基址字節(jié)由主尋址字節(jié)的編碼決定。
(3)位移量字段disp。
位移量是存儲器操作數(shù)段內(nèi)偏移地址的一部分。disp字
段指出位移量的大小,其長度為0、1、2或4個字節(jié)。
(4)立即數(shù)字段data。
立即數(shù)字段指明立即操作數(shù)的大小,其長度也是0、1、
2或4個字節(jié)。8位立即數(shù)與16或32位操作數(shù)一起使用時,
CPU自動將它擴展為符號相同的16或32位數(shù),也可以將16
位擴展為32位。
(5)前綴字段Prefix。
前綴字段用于修改指令操作的某些性質(zhì)。常用前翠有
五種:工?
①段超越前綴:將前綴中指明的段寄存器取代指令中
默認的段寄存器。
②操作數(shù)寬度前綴:改變當前操作數(shù)寬度的默認值。
③地址寬度前綴:改變當前地址寬度的默認值。
④重復前綴:重復串的基本操作,以提高CPU處理
串數(shù)據(jù)的速度。
⑤總線鎖存前綴:產(chǎn)生鎖存信號,以防止其他總線主
控設(shè)備中斷CPU在總線上的傳輸操作。
每個前綴的編碼為一個字節(jié)。在一條指令前可同時使
用多個指令前綴,不同前綴的前后順序無關(guān)緊要。
上述指令格式的6個字段中,操作碼字段是必要的,
其他字段均可有可無,這取決于特定的操作功能。
3.1.2尋址方式
尋址方式是尋找操作數(shù)或操作數(shù)地址的方式。根據(jù)尋址
方式,可以方便地訪問各類操作數(shù)。
80X86/Pentium指令中的操作數(shù)有三種可能的存放位置:
①操作數(shù)在指令中,即指令的操作數(shù)部分就是操作數(shù)
本身,這種操作數(shù)叫立即操作數(shù)。
②操作數(shù)包含在CPU的某個內(nèi)部寄存器中,這時指令
的操作數(shù)部分是CPU內(nèi)部寄存器的一個編碼。
③操作數(shù)在內(nèi)存的數(shù)據(jù)區(qū)中,這時指令的操作數(shù)部分
包含此操作數(shù)所在的內(nèi)存地址。
80X86/Pentium系列CPU中,任何內(nèi)存單元的實際地址
都由兩部分組成:段基地址和段內(nèi)偏移地址。例如,內(nèi)存
中某一單元的邏輯地址用ES:TABLE來表示。'卜
其中ES是段基地址,TABLE為段內(nèi)偏移地址。段內(nèi)偏
移地址有16位或32位地址,段基地址和段內(nèi)偏移地址相加
形成線性地址。選用頁功能時,線性地址由管理部件換算
為32位物理地址;不用頁功能時,線性地址就是物理地址。
在存儲器尋址時,指令的操作數(shù)部分給出的地址是段內(nèi)偏
移地址。為了適應(yīng)處理各種數(shù)據(jù)結(jié)構(gòu)的需要,段內(nèi)偏移量
由幾個基本部分組合而成,所以也稱為有效地址EA。
組成有效地址EA的基本部分包括:基址寄存器內(nèi)容、
變址寄存器內(nèi)容、位移量、比例因子等。其中,基址、變
址寄存器中通常為某局部存儲區(qū)的起點,位移量是指令中
的disp字段,比例因子是32位尋址方式中特有的一種地址分
量。有效地址EA的計算公式如下:
EA[基址寄存器]+([變址寄存器]X比例因子)+
位移量
對于基址、變址寄存器和比例因子、位移量的取值規(guī)定
有所不同。表3-1給出了這兩種尋址方式的四個分量的規(guī)
定,由此可組合出多種存儲器尋址方式。
表3-116位尋址和32位尋址方式的四個分量
有效地址分量16位尋址方式32位尋址方式
基址寄存器BX、BP任何32位通用寄存器
變址寄存器SI、DI除ESP外的任何32位通用寄存器
比例因子11、2、4、8
位移量0、8、160、8、32
8086/8088提供了八種尋址方式,它們是立即尋址方式、
寄存器尋址方式、直接尋址方式、寄存器間接尋址方式、
變址尋址方式、基址尋址方式、基址加變址尋址方式和帶有
位移量的基址加變址尋址方式。80X86/Pentium有11種尋址
方式。與8086/8088相比增加的三種尋址方式是比例變址尋
址方式、基址加比例變址尋址方式和帶位移量的比例變址
尋址方式。
1.立即尋址方式
在立即尋址方式下,操作數(shù)作為立即數(shù)包含在指令的操
作碼之后,與操作碼一起存放在代碼段區(qū)域。立即數(shù)總是和
操作碼一起被取入CPU的指令隊列,在指令執(zhí)行時,不再需
要訪問存儲器。-一
立即數(shù)可以是8位、16位或32位操作數(shù)。若是16位,
低位字節(jié)存放在相鄰兩個字節(jié)存儲單元的低地址單元中;
若是32位,則低位字存放在相鄰兩個字存儲單元的低地址
單元中。
立即數(shù)可以用二進制數(shù)、八進制數(shù)、十進制數(shù)以及十
六進制數(shù)來表示。在非十進制的立即數(shù)末尾需要使用字母
加以標識。必要情況下,十進制數(shù)用字母D加以標識,通
常情況下不需要標識。如:
MOVAL,10;十進制數(shù)(D)
MOVAL,00100101B;二進制數(shù)(B)
MOVAL,OAH;十六進制(H)黑:,
2.寄存器尋址方式
在寄存器尋址方式下,操作數(shù)存在于指令規(guī)定的8位、
16位或32位寄存器中。寄存器可用來存放源操作數(shù),也可
用來存放目的操作數(shù)。寄存器尋址方式是CPU內(nèi)部的操
作,不需要使用訪問總線周期,因此指令的執(zhí)行速度比較
快。以上兩種尋址方式中,操作數(shù)是從指令或寄存
器中獲得的。而在實際的程序運行中,大多數(shù)操作數(shù)需從
內(nèi)存中獲得。對于內(nèi)存的尋址方式有多種,不管哪一種尋
址方式,最終都將得到存放操作數(shù)的物理地址。指令的操
作數(shù)部分是此操作數(shù)的有效地址EA。
3.直接尋址方式
直接尋址方式是存儲器直接尋址方式的簡稱,是一種
針對內(nèi)存的尋址方式。在這種尋址方式下,指令代碼中給
出操作數(shù)的偏移地址,即有效地址(EA)。它是一個16位或
32位的位移量數(shù)據(jù),與操作碼一起放在代碼段中。在默認
方式下,操作數(shù)存放在數(shù)據(jù)段(DS)。如果要對除DS段
之外的其他段(CS、ES、SS、FS、GS)中的數(shù)據(jù)尋址,
應(yīng)在指令中增加前綴,指出段寄存器名,這就是段跨越。
在實地址方式下,對內(nèi)存進行尋址時,需計算物理地址。
物理地址的計算公式為:;
物理地址16dx段地址(DS)+偏移地址(EA)「
不同的段地址存放在不同段的段寄存器中。如數(shù)據(jù)段
的段地址存放在數(shù)據(jù)段寄存器DS中。有些機器允許將數(shù)據(jù)
存放在非數(shù)據(jù)段中,這時需要在指令中使用段跨越前綴標
識出相應(yīng)的段寄存器。在直接尋址方式的指令中,直接給
出了有效地址EA,那么操作數(shù)的物理地址就是
16dX(DS)+EAo
直接尋址的指令如:MOVAX,[1000H]
當(DS)2000H時,根據(jù)物理地址計算公式,得物理地
址16dx2000H+1000H21000H
j
存儲器
AHAL
圖3-2直接尋址不意圖
指令的執(zhí)行結(jié)果是:(AX)(21000H),即內(nèi)存21000H
單元的內(nèi)容已傳送到寄存器AX中。指令的執(zhí)行情況如圖3
-2所示。
下面的指令表示在附加段獲得操作數(shù)。如:
MOVAX,ES:
指令對應(yīng)的物理地址計算公式為:
16dX(ES)+1000H
在匯編語言中,可以用符號地址代替數(shù)值地址來表示
有效地址。如:
MOVAX,[VALUE]
其中VALUE為存放操作數(shù)單元的有效地址,符號地址的
方括號[]可以省略。飛卜,
4.寄存器間接尋址方式
寄存器間接尋址方式也是對內(nèi)存的尋址方式之一,操
作數(shù)的有效地址EA在指定的寄存器中,即EA[寄存器]。
在16位尋址和32位尋址方式中,寄存器的使用規(guī)定有所
不同。
16位尋址時,EA放在基址寄存器BX、BP或變址寄存
器SI、DI中,所以該方式下的操作數(shù)的物理地址計算公式
有以下幾個:
物理地址16dX(DS)+(BX)
物理地址16dX(DS)+(DI)
物理地址16dx(DS)+(SI)
物理地址16dX(SS)+(BP)
前三個式子表示操作數(shù)在數(shù)據(jù)段,最后一個式子表示操
作數(shù)在堆棧段。
例如:MOVAX,[BX]
當(DS)IOOOH,(BX)2000H時,物理地址為
16dX1000H+2000H12000H
指令的執(zhí)行結(jié)果將
內(nèi)存12000H單元的內(nèi)容傳送到寄存器AX中,指令的執(zhí)行情
況如圖3-3所示。類似于直接尋址方式,在該方式下,當指
令中指定的寄存器為BX、SI、DI時,操作數(shù)存放在數(shù)據(jù)段
中,因此段地址是寄存器DS的內(nèi)容。若指令中指定的寄存器
為BP時,操作數(shù)存放在堆棧段中,段地址是寄存器SS的內(nèi)容。
若指令中指定了跨越前綴,則可以從指定的段中獲得梯作數(shù)。
圖3-3寄存器間接尋址示意圖
例如對于ADDAX,ES:(SI),
物理地址為
16dX(ES)+(SI)
利用寄存器間接尋址方式可以非常方便地通過改變寄
存器的內(nèi)容來改變內(nèi)存地址,比起直接尋址方式,其在使
用時更為靈活,如圖3-3所示。
32位尋址時,八個32位通用寄存器均可用來進行寄存
器間接尋址。這時,EBP、ESP的默認段寄存器為SS,其
余六個寄存器均默認段寄存器為DS。同樣可以采用加段超
越前綴的方法對其他段進行尋址。
當直接尋址時,有效地址EA在指令中,它是一[個常
量。當間接尋址時,有效地址EA在寄存器中,寄存器的內(nèi)
容由它之前的指令確定,因而是一個變量。
5.變址尋址方式
在變址尋址方式中,操作數(shù)的有效地址是變址寄存器
(SI或DI)的內(nèi)容與指令中指定的位移量的和。即有效地址
EA[變址寄存器]+位移量。
當進行16位尋址時,SI和DI作為變址寄存器。這
時,物理地址計算公式為物理地址16dx(DS)+(SI)+8位
(16位)位移量或物理地址16dX(DS)+(DI)+8位(16位)位移量
例如:MOVAX,100H(SI)
當(DS)2000H,(SI)IOOOH時,物理地址為
位移量
16dx(DS)+(SI)+20000H+1000H+100H21100H■
執(zhí)行指令的結(jié)果將內(nèi)存21100H單元和21101H單元的內(nèi)
容傳送到寄存器AX中。在用變址尋址方式進行有效地址
的計算中,位移量可為正數(shù),也可為負數(shù),同樣可以使用
段跨越前綴標識段寄存器的使用情況。
當進行32位尋址時,除ESP外的任何32位通用寄存器
均可作變址寄存器。其中,EBP以SS為默認段寄存器,其
余寄存器以DS為默認寄存器。
6.基址尋址方式
在基址尋址方式中,操作數(shù)的有效地址是基址寄存器
的內(nèi)容與指令中指定的位移量的和。
當進行16位尋址時,BP和BX作為基址寄存器。在缺
省段超越前綴時,BX以DS作為默認段寄存器,BP以SS
作為默認段寄存器,位移量可以是8位或16位。該方式下
物理地址計算公式為
物理地址16dX(DS)+(BX)+8位(或16位)位移量
或物理地址16dX(SS)+(BP)+8位(或16位)位移量
當進行32位尋址時,八個32位通用寄存器均可作為
基址寄存器。其中EBP、ESP以SS為默認段寄存器,其
余六個寄存器以DS作為默認段寄存器。
存儲器
DSBXSI
AX
12150
12151
圖3-4基址變址尋址示意圖
7.基址加變址尋址方式
在基址加變址尋址方式中,有效地址EA基址寄存器+變
址寄存器,即兩個寄存器的內(nèi)容之和為操作數(shù)的有效地址。
它有16位和32位兩種尋址方式。在每種情況下,基址寄存
器、變址寄存器的使用規(guī)定以及段寄存器的默認規(guī)定與基
址尋址方式相同。在尋址方式中,當基址寄存器和變址寄
存器的默認段寄存器不同時,一般由基址寄存器來決定默
認用哪一個段寄存器作為段基址指針。若在指令中規(guī)定了
段跨越,則可以用其他寄存器作為段基地址。基址加變址
尋址方式的物理地址計算公式為:
物理地址16dX(DS)+(BX)+(SI)
或物理地址16dx(SS)+(BP)+(DI)
如:
MOVAX,[BX][SI]或MOVAX,[BX+SI]
若(DS)1200H,(BX)100H,(SI)5OH,則操作數(shù)地址為
16dX(DS)+(BX)+(SI)16dX1200H+100H+50H12150H
指令的執(zhí)行結(jié)果將內(nèi)存12150H單元的內(nèi)容傳送到寄存
器AX中。指令的執(zhí)行情況如圖3-4所示。
基址變址尋址方式中,可以使用段跨越前綴標識操作
數(shù)所在的段。
如:OVAX,ES:[BX+DI]
則物理地址16dX(ES)+(BX)+(DI)"
8.帶有位移量的基址加變址尋址方式
在帶位移量的基址加變址尋址方式中,操作數(shù)的有
效地址是基址寄存器和變址寄存器以及8位(或16位)的
位移量之和,即
EA[基址寄存器]+[變址寄存器]+位移量
它有16位和32位尋址方式。
每種尋址方式下,基址寄存器、變址寄存器的使用
規(guī)定和段寄存器的默認規(guī)定與基址加變址尋址方式相同。
若基址寄存器是BX,則使用DS為段寄存器;若基址寄存
'AV
器是BP,則使用SS為段寄存器。二;
相應(yīng)地,
物理地址16dx(DS)+(BX)+(DI)+8位(或16位)位移
量或物理地址16dX(SS)+(BP)+(SI)+8位(或16位)位移量
例如:MOVAX,100[BX+DI]或MOVAX,
[BX+DI+100H]
^(DS)2000H,(BX)1000H?(DI)1OOH,則
物理地址16dx2000H+1000H+100H+100H21200H
指令的執(zhí)行結(jié)果將內(nèi)存單元21200H和21201H的內(nèi)容
傳送到寄存器AX中。除了上面介紹的八種方式外,坦下
三種尋址方式適合于32位尋址的情況,它們是32位特希的
?尋址方式。
9.比例變址尋址方式
比例變址尋址方式的有效地址為
EA[變址寄存器]X比例因子+位移量
這里,乘比例因子的操作在CPU內(nèi)部由硬件完成。
10.基址加比例變址尋址方式
基址加比例變址尋址方式的有效地址為
EA[基址寄存器]+[變址寄存器]X比例因子
11.帶位移量的基址加比例變址尋址方式
帶位移量的基址加比例變址尋址方式的有效地址為
EA[基址寄存器]+[變址寄存器]X比例因子+位
移量在尋址過程中,變址寄存器內(nèi)容乘以比例因子的拆作在
CPU內(nèi)部由硬件完成。7匕1
3.L3存儲器尋址時的段約定
在進行存儲器操作數(shù)訪問時,除了要計算偏移地址
EA外,還必須確定段寄存器,即操作數(shù)所在的段。一般
情況下,指令中不特別指出段寄存器。因為在
80X86/Pentium中,對于各種不同操作類型的存儲器尋址
的段寄存器有一個基本默認約定。只要在指令中不特別
說明要超越這個約定,則一般情況下就按這個基本約定
來尋找操作數(shù)。這些基本約定如表3-2所示。
表3-2中,除了程序只能在代碼段,堆棧操作數(shù)只
能在堆棧段,目的串操作數(shù)只能在附加數(shù)據(jù)段外,其帙操
作雖然有默認段,但都是允許超越的。1
表3-2存儲器操作時段和偏移地址寄存器的約定
存儲器操作類型默認段寄存器允許超越的段寄存器偏移地址寄存器
取指令代碼CS無(E)IP
堆棧操作SS無(E)SP
源串數(shù)據(jù)訪問DSCS、ES、SS、FS、GS(E)SI
目的串數(shù)據(jù)訪問ES無(E)DI
通用數(shù)據(jù)訪問DSCS、ES、SS、FS、GS偏移地址
以(E)BP、(E)SP間
SSCS、ES、SS、FS、GS偏移地址
接尋址的指令
3.28086/8088指令系統(tǒng)
8086/8088指令系統(tǒng)是80X86/Pentium的基本指令集。指令
的操作數(shù)是8位或16位操作數(shù),偏移地址是16位地址。按功
能可將指令分成六類,即數(shù)據(jù)傳送類、算術(shù)運算類、邏輯運
算與移位類、串操作類、控制轉(zhuǎn)移類和處理器控制類。
為便于理解指令的形式和功能,對指令中操作數(shù)符號的
約定如下:
OPRD:操作數(shù);
OPRD1,OPRD2:多操作數(shù)指令中,OPRD1為目標操
作數(shù),OPRD2為源操作數(shù);
reg:8位或16位的通用寄存器;
sreg:段寄存器;
reg8:8位通用寄存器;
regl6:16位通用寄存器;
mem:8位或16位存儲器;
mem8:8位存儲器;
meml6:16位存儲器;
imm:8位或16位立即數(shù);
imm8:8位立即數(shù);
imml6:16位立即數(shù)。
321數(shù)據(jù)傳送類指令
數(shù)據(jù)傳送類指令是計算機中最基本、最常用、最重要
的一類操作。它用來在寄存器與存儲單元、寄存器與寄存
器、累加器與I/O端口之間傳送數(shù)據(jù)、地址等信息,也可以
將立即數(shù)傳送到寄存器或存儲單元中。為此,指令中必須
指明數(shù)據(jù)起始存放的源地址和數(shù)據(jù)傳送的目標地址。
數(shù)據(jù)傳送類指令共有14條,分成4組。如表3-3所示。
其中,除了SAHF、POPF指令外,其他指令執(zhí)行后對標志
位沒有影響。
表3-3數(shù)據(jù)傳送類指令
指令類型指令功能指令格式
字節(jié)或字傳送MOV目標,源
字壓入堆棧PUSH源
通用數(shù)據(jù)傳送字彈出堆棧POP目標
字節(jié)或字交換?XCHG目標,源
字節(jié)翻譯XLAT
裝入有效地址LEA目標,源
地址傳送裝入DS寄存器LDS目標,源
裝入ES寄存器LES目標,源
將FR低字節(jié)裝入AH寄存器LAHF
將AH內(nèi)容裝入FR低字節(jié)SAHF
標志位傳送
將FR內(nèi)容壓入堆棧PUSHF
從堆棧中彈出FR內(nèi)容POPF
輸入字節(jié)或字IN累加器,端口
I/O數(shù)據(jù)傳送
輸出字節(jié)或字OUT端口,累加器
1.通用數(shù)據(jù)傳送指令
(1)傳送指令MOV。
指令格式:MOVOPRD1,OPRD2
指令功能:將源操作數(shù)傳送給目標操作數(shù),即
OPRD2-OPRDloOPRD1和OPRD2可以是字節(jié)或字,
但是必須等長。
具體指令形式:
MOVreg/sreg,reg;reg/sreg*-reg
MOVreg,sreg;reg-sreg
MOVreg/sreg,mem;reg/sreg^-mem
MOVmem,reg/sreg;mem-reg/sreg
MOVreg,imm;reg-imm
MOVmem,imm;mem-imm[HT5]
源操作數(shù)可以是通用寄存器、段寄存器、存儲器以及
立即操作數(shù),目標操作數(shù)可以是通用寄存器、段寄存器
(CS除外)或存儲器。各種數(shù)據(jù)傳送關(guān)系如圖3-5所示。
使用MOV指令進行數(shù)據(jù)傳送時應(yīng)注意:段寄存器CS及
立即數(shù)不能作為目標操作數(shù);兩個存儲單元之間不允許直
接傳送數(shù)據(jù);立即數(shù)不能直接傳送到段寄存器;兩個段寄
存器之間不能直接傳送數(shù)據(jù)。
通用寄存器
(AX、BX、CX、DX、BP、
SP、SLDI)
111)1
存
立
.
儲
器即
數(shù)
11
段寄存器
(CS、SS、DS、ES)
圖3-5數(shù)據(jù)傳送關(guān)系示意圖
(2)堆棧操作指令PUSH/POP。
堆棧是按照后進先出原則組織的一段內(nèi)存數(shù)據(jù)區(qū)域。
80X86/Pentium規(guī)定堆棧設(shè)置在堆棧段SS內(nèi)。堆棧的棧底是
固定不變的,這塊存儲器只有一個出入口,稱之為棧頂棧指
針SP始終指向堆棧的棧頂。隨著PUSH和POP指令的執(zhí)行,
棧頂?shù)奈恢脤l(fā)生變化,進棧棧頂向低地址方向擴展,退棧
棧頂向高地址(棧底)方向擴展,即SP的內(nèi)容被修改,并始
終指向的是棧頂。在子程序調(diào)用或中斷時,堆棧用于保護當
前的斷點地址和現(xiàn)場數(shù)據(jù),以便子程序執(zhí)行完畢后正確返回
到主程序。斷點地址的保存由子程序調(diào)用指令或中斷晌座來
完成,現(xiàn)場數(shù)據(jù)保存可通過堆棧操作指令來實現(xiàn)。
、"UI\I)匕審
指令格式:PUSHOPRD
POPOPRD
指令功能:進棧指令PUSH使SP-2—SP,然后將16位
的源操作數(shù)壓入堆棧,先高位后低位。源操作數(shù)可以是
通用寄存器、段寄存器和存儲器。
POP退棧指令的執(zhí)行過程與PUSH相反。它從當前棧
頂彈出16位操作數(shù)到目標操作數(shù),同時SP+2—SP,使SP
指向新的棧頂。目標操作數(shù)可以是通用寄存器、段寄存
器(CS除外)或存儲器。
進棧和退棧的操作數(shù)要求以字為單位。PUSH和POP
指令不影響標志位?!?/p>
具體指令形式:
PUSHreg16;SPSP-2,[SP]-regl6
POPreg16;regl6<-[SP],SPSP+2
PUSHSreg;SPSP-2,[SP]<-Sreg16
POPSreg16;Sreg16[SP],SPSP+2
PUSHmem16;SPSP-2,[SP]-meml6
POPmem16;meml6-[SP],SPSP+2
(3)交換指令XCHG。
指令格式:XCHG0PRD1,0PRD2
指令功能:將一個字節(jié)或一個字的源操作數(shù)與目標操
作數(shù)進行交換。
具體指令形式:[HT5〃]
XCHGreg,reg[WB];reg<-->reg
XCHGmem,reg[DW];mem^-->reg
XCHGreg,mem[DW];reg^-->mem[HT5]
XCHG可實現(xiàn)寄存器之間或寄存器與存儲器之間單信息
交換。但是,不能在兩個存儲單元之間直接交換數(shù)據(jù)漆段
寄存器和立即數(shù)不能作為操作數(shù)。一s,
(4)查表轉(zhuǎn)換指令XLAT。
指令格式:XLAT
XLATOPRD;AL-[BX+AL]
指令功能:完成一個字節(jié)的查表轉(zhuǎn)換。它將數(shù)據(jù)段中
偏移地址為BX與AL寄存器之和的存儲單元的內(nèi)容送入AL
寄存器。
在使用該指令時,應(yīng)首先在數(shù)據(jù)段中建立一個長度小
于256B的表格,表的首地址置于BX中,AL中存放查找對
象在表中的下標。指令執(zhí)行后,所查找的對象存于A1中,
BX內(nèi)容保持不變。;
2.地址傳送指令
⑴有效地址傳送指令LEA。
指令格式:LEA0PRD1,0PRD2
指令功能:將源操作數(shù)的有效地址送到目的操作數(shù)。
具體指令形式:
LEAreg16,mem;reg16-Addr(mem)
(2)地址指針傳送指令LDS/LES。
指令格式:LDS0PRD1,0PRD2
LES0PRD1,OPRD2
指令功能:這兩條指令的功能類似,都是將源操作數(shù)
偏移地址決定的雙字單元中的第一個字的內(nèi)容傳送到指令
指定的16位通用寄存器,第二個字的內(nèi)容傳送給段寄存器
DS或ES。
3.標志字傳送指令
標志字傳送指令用于對標志寄存器(FR)的保護和更
新操作。指令的操作數(shù)由隱含方式給出。
(1)標志字讀寫指令LAHF/SAHFo
指令格式:LAHF
SAHF
LAHF指令可將標志寄存器的低字節(jié)(含符號標志SF、
零標志ZF、輔助進位標志AF、奇偶標志PF和進位標志CF)
傳送到AH寄存器中。這條指令不影響標志位。,
SAHF指令的功能與LAHF相反,它將寄存器AH的內(nèi)
容傳送到標志寄存器的低字節(jié)中。
(2)標志進棧/出棧指令PUSHF/POPFo
指令格式:PUSHF
POPF
PUSHF指令把標志寄存器的內(nèi)容壓入堆棧,同時堆棧
指針SP-SP-2。
POPF指令將堆棧指針SP所指的一個字傳送到標聲寄存
器中,同時堆棧指針SP-SP+2。
4.輸入/輸出數(shù)據(jù)傳送指令I(lǐng)N/OUT
在計算機中,輸入/輸出操作是由CPU利用輸入、輸
出指令并通過累加器AL,AX進行的。輸入指令完成由輸入
端口到CPU的信息傳送,輸出指令完成從CPU到輸出端口的
信息傳送。
指令格式:INOPRD1,OPRD2
OUTOPRD1,OPRD2
指令功能:在AL或AX寄存器與I/O端口之間傳送數(shù)據(jù)。
具體指令形式:
INAL,imm8;AL*-(imm8)
OUTimm8,AL;(imm8)—AL
INAX,imm8AX—(imm8+l)(imm8)
OUTimm8,AX(imm8+l)(imm8)—AX
INAL,DXAL-(DX)
OUTDX,AL(DX)-AL
INAX,DXAX-(DX+1)(DX)
OUTDX,AX(DX+1)(DX)-AX
j
3.2.2算術(shù)運算類指令
算術(shù)運算指令可完成加、減、乘、除運算以及在算術(shù)運
算過程中進行進制及編碼調(diào)整操作。在進行這些操作時,可
針對字節(jié)或字運算,也可對帶符號數(shù)和無符號數(shù)進行運算。
算術(shù)運算類指令如表3-4所示。
1.加法指令
(1)加法指令ADD。
指令格式:ADD0PRD1,0PRD2
指令功能:將源操作數(shù)與目的操作數(shù)相加,結(jié)果存放于
目的操作數(shù)。即0PRD1+0PRD2-0PRD1。
類另1」指令名稱指令格式
加法(字節(jié)/字)ADD目標,源
加法帶進位加法(字節(jié)/字)ADC目標,源
加1(字節(jié)/字)INC目標
減法(字節(jié)/字)SUB目標,源
帶借位減法(字節(jié)/字)SBB目標,源
減法減1(字節(jié)/字)DEC目標
取負NEG目標
比較CMP目標,源
不帶符號乘法MUL源
乘法
帶符號整數(shù)乘法IMUL源
不帶符號除法DIV源
帶符號整數(shù)除法IDIV源
除法
字節(jié)轉(zhuǎn)換成字CBW
字轉(zhuǎn)換成雙字CWD
加法的ASCII碼調(diào)整(非壓縮BCD數(shù))AAA
加法的十進制調(diào)整(壓縮BCD數(shù))DAA
減法的ASCII碼調(diào)整(非壓縮BCD數(shù))AAS
十進制調(diào)整
減法的十進制調(diào)整(壓縮BCD數(shù))DAS
乘法的ASCII碼調(diào)整(非壓縮BCD數(shù))AAM
除法的ASCII碼調(diào)整(非壓縮BCD數(shù))AAD
具體指令形式:ADDreg,reg[WB];reg<-reg+reg
ADDreg,mem;reg-reg+mem
ADDreg,imm;reg-reg+imm
ADDmem,reg;mem-mem+reg
ADDmem,imm;mem-mem+imm[HT5]
要求源操作數(shù)和目的操作數(shù)同時為帶符號的數(shù)或無符
號數(shù),且長度相等。
⑵帶進位加法指令ADC。
指令格式:ADC0PRD1,0PRD2
指令功能:將源操作數(shù)與目的操作數(shù)以及進位標志位
CF的值相加,并將結(jié)果存放于目的操作數(shù),即
0PRD1+0PRD2+CF-0PRD1。
具體指令形式:
ADCreg,reg;regreg+reg+CF
ADCreg,mem;regreg+mem+CF
ADCreg,imm;reg-reg+imm+CF
ADCmem,reg9mem—mem+reg+CF
ADCmem,imm9mem-mem+imm+CF
(3)加1指令I(lǐng)NC。
指令格式:INCOPRD
指令功能:將指定操作數(shù)內(nèi)容加1。INC指令不影響進
位標志CF。
具體指令形式:
INCmem;mem-mem+1
INCreg;reg<-reg+l[HT]
2.減法指令
減法指令有SUB減法、SBB帶借位的減法、DEC減1、
NEG求補和CMP比較等指令。:
⑴減法指令SUB。
指令格式:SUB0PRD1,0PRD2
指令功能:將目的操作數(shù)減去源操作數(shù),結(jié)果存放于
目的操作數(shù),即0PRD1-0PRD2-0PRD1。
具體指令形式:
SUBreg,reg;reg-reg-reg
SUBreg,mem;reg—reg-mem
SUBreg,imm;reg-reg-imm
SUBmem,reg;mem*-mem-reg
SUBmem,imm;mem-mem-imm
*
(2)帶借位減法指令SBB。
指令格式:SBB0PRD1,0PRD2
指令功能:將目的操作數(shù)減去源操作數(shù),再減去借
位CF的值,結(jié)果存放于目的操作數(shù)。即0PRD1-0PRD2-
CF-0PRD1。
具體指令形式:
SBBreg,regreg*-reg-reg-CF
SBBreg,memreg-reg-mem-CF
SBBreg,immreg^reg-imm-CF
SBBmem,regmem-mem-reg-CF
SBBmem,immmem-mem-imm-CF
(3)減1指令DEC。
指令格式:DECOPRD
指令功能:對指定操作數(shù)減1。DEC指令不影響進位
志。
具體指令形式:KHT5〃X
DECmem[DW];mem-mem-1
DECreg[DW];reg-reg-1[HT]
(4)求補指令NEG。
指令格式:NEGOPRD
指令功能:對指定操作數(shù)求補運算。在機器內(nèi)部.,
對操作數(shù)的求補操作是對操作數(shù)進行
求反后末位加1。通過求補可使正數(shù)變?yōu)樨摂?shù)或使負
數(shù)變?yōu)檎龜?shù)。這樣使得一個正數(shù)減去一個正數(shù)的減法運
算,轉(zhuǎn)化為一個正數(shù)加上一個負數(shù)的加法運算。
具體指令形式:
NEGmem;mem-O-mem
NEGreg;reg^O-reg[HT]
(5)比較指令CMP。
指令格式:CMPOPRD1,OPRD2
指令功能:將目的操作數(shù)減去源操作數(shù),結(jié)果不予保
存。只是根據(jù)結(jié)果的狀態(tài)設(shè)置條件標志位,設(shè)置狀態(tài)標志
位與SUB指令含義相同?!?/p>
CMPreg,reg;reg-reg
CMPreg,mem;reg-mem
CMPreg,imm;reg-imm
CMPmem,reg;mem-reg
CMPmem,imm;mem-imm
比較指令通常用于比較兩個操作數(shù)的大小。由受影響
的標志位狀態(tài)來判斷兩個操作數(shù)比較的結(jié)果。不論是無符
號數(shù)比較還是有符號數(shù)比較,若在比較指令后,ZF1,則
兩者相等,否則不相等。若兩者不相等,則可在比較兩個
數(shù)之后,利用其他標志位的狀態(tài)來確定兩者中哪個大。
如果是兩個無符號數(shù)比較,則可根據(jù)進位標志CF的狀
態(tài)來判斷:
若CF1,貝I」0PRDK0PRD2;若CFO,貝”
OPRDl>OPRD2o
如果是兩個有符號數(shù)比較,則要根據(jù)SF和OF兩個標志
的關(guān)系來判斷:
若SFOFO,則OPRD1>OPRD2;若SFOF1,貝
OPRDl<OPRD2o
在程序中,比較指令常用于條件轉(zhuǎn)移之前,條件轉(zhuǎn)移指
令根據(jù)CMP操作之后的狀態(tài)標志決定程序轉(zhuǎn)移或不轉(zhuǎn)移。
二7憶
3.乘法指令
乘法指令包括無符號數(shù)乘法、帶符號數(shù)乘法兩種。
(1)無符號數(shù)乘法指令MUL。
指令格式:MULOPRD
指令功能:完成兩個無符號數(shù)的乘法運算。要求被
乘數(shù)放在AL或AX累加器中,用于字節(jié)運算和字運算,另
一乘數(shù)可通過指令中的OPRD(除立即數(shù)方式以外的尋址
方式)獲得。
具體指令形式:
MULreg;AX-ALXreg8或DX,
AX<-AXXregl6
具體指令形式:
IMULreg;AX-ALXreg8或DX,
AX-AXXregl6
IMULmem;AX-ALXmem8或DX,
AX-AXXmem16
乘法指令的執(zhí)行結(jié)果會使標志位發(fā)生變化。只有進位
標志CF、溢出標志OF有意義,其它標志位無定義。CF、
OF定義如下:當進行字節(jié)運算時,其結(jié)果超過字節(jié)長度成
為字(AHW0),
CF和OF置、'1〃;當進行字運算時,其結(jié)果超過字長
度成為雙字(DXWO),CF和OF置這樣就可以用OF及
CF來檢查和判斷字節(jié)或字操作的結(jié)果。對MUL指令,當
進行字節(jié)操作時,乘積結(jié)果的高一半為O(AHO),或當進行
字操作時,乘積結(jié)果高一半為O(DXO),CF和OF均為0。對
于IMUL指令,如果乘積結(jié)果的高一半為低一半的符號位的
擴展,那么CF和OF均置''0〃,否則置、'1〃。
乘法指令為乘積保留了兩倍于原來操作數(shù)的存儲空
間,因而不會出現(xiàn)溢出現(xiàn)象。
1
4.除法指令
除法指令包括無符號數(shù)除法指令DIV,帶符號數(shù)除法指
令I(lǐng)DIV,以及在除法運算中輔助DIV、IDIV指令的字節(jié)轉(zhuǎn)
換為字指令CBW和字轉(zhuǎn)換為雙字指令CWB。
(1)無符號數(shù)除法指令DIV。
指令格式:DIVOPRD
指令功能:完成兩個無符號數(shù)的除法運算,除法操作
可作字節(jié)或字操作。在進行字節(jié)操作時,要求被除數(shù)為16
位、并存放在AX累加器,除數(shù)8位由指令中的源操作數(shù)指
定,結(jié)果的8位商存放于AL中,8位余數(shù)存放于AH中。在
進行字操作時,要求被除數(shù)為32位,存放在DX,AX寄存器
中,16位除數(shù)由指令中源操作數(shù)指定,結(jié)果的16位闔薦放
于AX中,16位余數(shù)存放于DX中.巡,
⑵帶符號數(shù)除法指令I(lǐng)DIV。
指令格式:IDIV源操作數(shù)
指令功能:完成兩個帶符號數(shù)的除法操作。在執(zhí)行該指
令時,要求操作數(shù)為帶符號數(shù),商及余數(shù)也為帶符號數(shù),
余數(shù)與被除數(shù)的符號相同。
除法指令的使用需要說明:
①源操作數(shù)不允許使用立即尋址方式。
②除法指令執(zhí)行后,標志位無定義。
③除數(shù)為零時,則產(chǎn)生一個0類型中斷。
在除法運算中常常使用CBW和CWD對除法所需操作數(shù)
進行長度擴展。.
IT產(chǎn)
(3)字節(jié)轉(zhuǎn)換為字指令CBW。
指令格式:CBW
指令功能:將AL中的符號擴展到AH中。
如:當(AL)04H,執(zhí)行CBW指令后,(AH)OO;
當(AL)FOH,執(zhí)行CBW指令后,(AH)OFFH
(4)字轉(zhuǎn)換為雙字節(jié)指令CWD。
指令格式:CWD
指令功能:將AX中的符號擴展到DX中。它只是增加
了操作數(shù)長度,其操作數(shù)的大小沒有改變。CBW和CWD
指令的執(zhí)行對標志位無影響。.$.
5.十進制調(diào)整指令
在算術(shù)運算中操作數(shù)可以采用BCD碼,但是運算后的
結(jié)果必須經(jīng)過調(diào)整,否則結(jié)果是錯誤的。BCD碼是一種用
二進制編碼表示的十進制數(shù),每個BCD碼都是由4位二進
制代碼來表示的,故稱為壓縮BCD碼。例如,10000101可
看作十進制的85。使用BCD碼進行算術(shù)運算,一方面符
合計算機只能處理二進制數(shù)的要求,另一方面BCD碼也給
編寫和閱讀程序帶來了直觀效果。為此指令系統(tǒng)提供了必
須用在ADD、ADC指令后面的加法十進制調(diào)整指令DAA
和必須用在SUB、SBB指令后面的減法十進制調(diào)整指令
DASo經(jīng)過調(diào)整后的結(jié)果才是正確的BCD碼。
(1)壓縮BCD數(shù)加法調(diào)整指令DAA。
指令格式:DAA
指令功能:將AL寄存器中的和調(diào)整為壓縮的BCD碼。
由于一個字節(jié)可以表示兩位BCD碼,因此該指令的調(diào)整將
根據(jù)標志位CF、AF以及AL寄存器的值自動地進行。
DAA指令的操作依據(jù)以下兩條原則進行:
①當輔助進位標志AF1或者AL寄存器的低4位為A?
FH時,AL寄存器的內(nèi)容加上06H,并將標志AF置''1〃(調(diào)
整低4位)。
②當CF1或者AL寄存器的高4位為A?FH時,A*尚存
器的內(nèi)容加上60H,并將標志CF置''1〃(調(diào)整高4位)。
1
例如,當(AL)26,(CL)26時,執(zhí)行以下指令:
ADDAL,CL;(AL)4C,CFOAFO
DAA;(AL)52,CFOAFI
可以看到DAA指令是將(AL)-(AL)+06,得到(AL)52,
使結(jié)果調(diào)整為正確的BCD碼,并將標志AF置
(2)壓縮BCD數(shù)減法調(diào)整指令DAS。
指令格式:DAS
指令功能:將AL寄存器中的差調(diào)整為壓縮的BCD碼。
DAS指令的使用要求與DAA指令一樣。DAS指令也是根據(jù)
標志位CF、AF以及AL寄存器的值自動進行調(diào)整。
DAS指令的操作依據(jù)以下兩條原則進行:
①當輔助進位標志AF1或者AL寄存器的低4位為A?
FH時,AL寄存器的內(nèi)容減06H,并將AF置、'1〃。
②當CF1或者AL寄存器的高4位為A?FH時,AL寄存
器的內(nèi)容減60H,并將標志CF置
DAA、DAS指令對壓縮BCD碼在運算之后進行自動調(diào)
整。在算術(shù)運算中也可以使用非壓縮的BCD碼。同樣,非
壓縮的BCD碼在運算之后,其結(jié)果也需要進行調(diào)整。非壓
縮的BCD碼用8位二進制代碼表示一個十進制數(shù),即占用一
個字節(jié),其中低4位的含義與壓縮BCD碼相同,而高4位為
“0”。如:十進制數(shù)8表示為非壓縮的BCD碼即為00001000。
(3)非壓縮BCD數(shù)加法調(diào)整指令AAA。
指令格式:AAA
指令功能:將寄存器AL中的和調(diào)整為非壓縮的BCD碼。
AAA指令用在ADD、ADC指令之后。
AAA指令調(diào)整過程如下:
①當(AL)的低4位為0?9H之間,且AF為''0〃,則執(zhí)
行③;
②當(AL)的低4位為A?FH之間,或AF為、'1〃,貝U
(AL)-(AL)+06,(AH)-(AH)+1,AF置''1〃;
③AL寄存器的高4位被清除;
④將AF的值送CF標志位。/工40
例如,當(AX)0008H,(BL)09H時執(zhí)行下列指令:
ADDAL,BL;(AX)0011H,(BL)09H
AAA;(AL)07H,(AH)OIH,或(AX)0107H,CF1
(4)非壓縮BCD數(shù)減法調(diào)整指令AAS。
指令格式:AAS
指令功能:將AL中的差調(diào)整為非壓縮的BCD碼,AAS
指令用在SUB、SBB指令之后。
AAS指令調(diào)整過程如下:
①當(AL)的低4位為0?9H時,且AFO,則執(zhí)行③;
②當(AL)的低4位為A?FH時,,或AF1,貝lJ(AL)-(AL)-
06H,(AH)-(AH)-1,AF置''1〃;
③AL寄存器高4位被清除;
④將AF的值送CF標志位。
AAA指令和AAS指令對AF、CF標志位產(chǎn)生影響,其
它標志位均無定義。
(5)非壓縮BCD數(shù)乘法調(diào)整指令AAM。
指令格式:AAM
指令功能:將存放在寄存器AL中的積調(diào)整為非壓縮的
BCD碼。AAM指令用在MUL指令對兩個非壓縮BCD碼的數(shù)
進行乘法之后。
其調(diào)整方法是將AL寄存器中的內(nèi)容除以O(shè)AH,商放在
AH寄存器中,余數(shù)放在AL寄存器中。
例如,當(AL)08H,(CL)08H時執(zhí)行下列指令:
MULAL,CL;(AL)80H
AMM;(AH)06H(AL)04H
由此可見,調(diào)整后的結(jié)果是非壓縮BCD碼乘積結(jié)果。
由于非壓縮的BCD碼占一個字節(jié),因此結(jié)果被分別存放在
AH、AL中。
(6)非壓縮BCD數(shù)除法調(diào)整指令AAD。
指令格式:AAD
指令功能:將AX寄存器中非壓縮的BCD碼形式的被除
數(shù)調(diào)整為二進制數(shù),并存放在AL寄存器中。AAD指令的使
用要求與加法調(diào)整AAA、減法調(diào)整AAS、乘法調(diào)整AAM不
同,它是放在除法DIV指令的前面來使用的,其調(diào)整方法是
將
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 舞蹈教室合作協(xié)議合同
- 行李箱加工協(xié)議合同書
- 裝修客戶定金合同協(xié)議
- 花卉出租出售合同協(xié)議
- 營業(yè)執(zhí)照代理合同協(xié)議
- 船廠管工承包合同協(xié)議
- 藝人經(jīng)紀解約合同協(xié)議
- 行車制作安裝合同協(xié)議
- 裝修自擬合同協(xié)議書范本
- 衣柜修改協(xié)議書范本
- 【MOOC】3D工程圖學-華中科技大學 中國大學慕課MOOC答案
- 全國青少年數(shù)獨比賽U8
- 2024屆考研199管理類綜合能力真題及解析完整版
- 腸梗阻合并糖尿病護理查房
- DB32T-無錫水蜜桃標準
- 古詩詞誦讀《登岳陽樓》公開課一等獎創(chuàng)新教學設(shè)計統(tǒng)編版高中語文必修下冊
- 2024版工廠并購協(xié)議書范本
- 中職班主任培訓講座
- JJF(魯) 116-2021 石油產(chǎn)品庫侖氯分析儀校準規(guī)范
- 2024年河北省中考化學真題(含解析)
- 2024至2030年中國3C電子產(chǎn)品租賃行業(yè)市場運行現(xiàn)狀及投資戰(zhàn)略研究報告
評論
0/150
提交評論