版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、返回主目錄返回主目錄 4.1 Intel x86的尋址方式的尋址方式 4.2 Intel x86指令系統(tǒng)指令系統(tǒng) 小結(jié)小結(jié)第第4 4章章 80 x8680 x86微處理器的指令系統(tǒng)微處理器的指令系統(tǒng)4.1 Intel x864.1 Intel x86的尋址方式的尋址方式 指令的一般格式指令的一般格式: 計(jì)算機(jī)中的指令由操作碼字段和操作數(shù)字段組成計(jì)算機(jī)中的指令由操作碼字段和操作數(shù)字段組成。 操作碼操作碼:指計(jì)算機(jī)所要執(zhí)行的操作指計(jì)算機(jī)所要執(zhí)行的操作,是一種助記符是一種助記符。 操作數(shù)操作數(shù):指在指令執(zhí)行操作的過(guò)程中所需要的操作在指令執(zhí)行操作的過(guò)程中所需要的操作數(shù)數(shù)。 分目標(biāo)操作數(shù)分目標(biāo)操作數(shù)、源
2、操作數(shù)源操作數(shù)。該字段除可以是操作該字段除可以是操作數(shù)本身外數(shù)本身外,也可以是操作數(shù)地址或是地址的一部分也可以是操作數(shù)地址或是地址的一部分,還還可以是指向操作數(shù)地址的指針或其它有關(guān)操作數(shù)的信息可以是指向操作數(shù)地址的指針或其它有關(guān)操作數(shù)的信息。操作碼操作碼操作數(shù)操作數(shù) 指令舉例:指令舉例: 尋址方式就是指令中用于說(shuō)明操作數(shù)所在地址的方尋址方式就是指令中用于說(shuō)明操作數(shù)所在地址的方法法,或者說(shuō)是尋找操作數(shù)有效地址的方法或者說(shuō)是尋找操作數(shù)有效地址的方法。尋址方式一尋址方式一般是針對(duì)源操作數(shù)而言的般是針對(duì)源操作數(shù)而言的。在在8086/8088系統(tǒng)中系統(tǒng)中,一般一般將尋址方式分為兩種不同的類(lèi)型將尋址方式分
3、為兩種不同的類(lèi)型,一類(lèi)是尋找操作數(shù)的一類(lèi)是尋找操作數(shù)的地址地址,另一類(lèi)是尋找要執(zhí)行的下一條指令的地址另一類(lèi)是尋找要執(zhí)行的下一條指令的地址,即程即程序的地址序的地址。 80868088的基本尋址方式有六種的基本尋址方式有六種,下面我們來(lái)面我們來(lái)討論這六種尋址方式討論這六種尋址方式。ADD CL,BH ; CLCLBH 所提供的操作數(shù)直接包含在指令中所提供的操作數(shù)直接包含在指令中,這種尋址方式這種尋址方式就叫立即尋址就叫立即尋址,這個(gè)操作數(shù)叫立即數(shù)這個(gè)操作數(shù)叫立即數(shù)。所謂立即數(shù)是指所謂立即數(shù)是指具有固定數(shù)值的操作數(shù)具有固定數(shù)值的操作數(shù),即常數(shù)即常數(shù)。它緊跟在操作碼的后它緊跟在操作碼的后面面,與操作
4、碼一起放在代碼段區(qū)域中與操作碼一起放在代碼段區(qū)域中。如圖如圖4-1所示所示。 例如例如:4.1.1 立即尋址立即尋址MOV AX,2345H ; AX2345H 立即數(shù)若是立即數(shù)若是8位的位的,可以是無(wú)符號(hào)數(shù)可以是無(wú)符號(hào)數(shù),取值范圍是取值范圍是00H-0FFH,也可以是帶符號(hào)數(shù)也可以是帶符號(hào)數(shù),取值范圍是取值范圍是80H-7FH。立即數(shù)若是立即數(shù)若是16位的位的,可以是無(wú)符號(hào)數(shù)可以是無(wú)符號(hào)數(shù),取值范圍是取值范圍是0000H-0FFFFH,也可以是帶符號(hào)數(shù)也可以是帶符號(hào)數(shù),取值范圍是取值范圍是8000H-7FFFFH。若是若是16位的位的,則存儲(chǔ)時(shí)低位在前則存儲(chǔ)時(shí)低位在前,高高位在后位在后。在指
5、令中在指令中,立即數(shù)操作數(shù)只能作源操作數(shù)立即數(shù)操作數(shù)只能作源操作數(shù),而而不能作目的操作數(shù)不能作目的操作數(shù)。 立即尋址主要用來(lái)給寄存器或存儲(chǔ)單元賦初值立即尋址主要用來(lái)給寄存器或存儲(chǔ)單元賦初值。 操作數(shù)地址的操作數(shù)地址的16位偏移量直接包含在指令中位偏移量直接包含在指令中,所以所以這種尋址方式叫直接尋址這種尋址方式叫直接尋址。16位偏移量與操作碼一起存位偏移量與操作碼一起存放在代碼段區(qū)域放在代碼段區(qū)域,操作數(shù)一般在數(shù)據(jù)段區(qū)域中操作數(shù)一般在數(shù)據(jù)段區(qū)域中,它的地它的地址為數(shù)據(jù)段寄存器址為數(shù)據(jù)段寄存器DS加上這加上這16位地址偏移量位地址偏移量。如圖如圖4-2所示所示。 例如例如: MOV AX,DS:
6、 3000H ;AX(DS:3000H) 4.1.2 直接尋址直接尋址 設(shè)設(shè)DS = 1000H。直接尋址方式如圖所示直接尋址方式如圖所示。 (對(duì)對(duì)DS來(lái)講可以省略成來(lái)講可以省略成 MOV AX,3000H,系統(tǒng)系統(tǒng)默認(rèn)為數(shù)據(jù)段默認(rèn)為數(shù)據(jù)段) 這種尋址方式是以數(shù)據(jù)段的地址為基礎(chǔ)這種尋址方式是以數(shù)據(jù)段的地址為基礎(chǔ),可在多達(dá)可在多達(dá)64KB的范圍內(nèi)尋找操作數(shù)的范圍內(nèi)尋找操作數(shù)。 這種尋址方式允許段超越這種尋址方式允許段超越,即還允許操作數(shù)在以代碼即還允許操作數(shù)在以代碼段段、堆棧段或附加段為基準(zhǔn)的區(qū)域中堆棧段或附加段為基準(zhǔn)的區(qū)域中。此時(shí)只要在指令中此時(shí)只要在指令中指明是段超越的指明是段超越的,則則1
7、6位地址偏移量可以與位地址偏移量可以與CS或或SS或或ES相加相加,作為操作數(shù)的地址作為操作數(shù)的地址。 MOV AX,2000H ;數(shù)據(jù)段數(shù)據(jù)段 MOV BX,ES:3000H ;段超越段超越,操作數(shù)在附加段操作數(shù)在附加段 即絕對(duì)地址即絕對(duì)地址(ES) 163000H 操作數(shù)包含在操作數(shù)包含在CPU的內(nèi)部寄存器中,所以這種尋址方的內(nèi)部寄存器中,所以這種尋址方式叫寄存器尋址。它們可以是數(shù)據(jù)寄存器(式叫寄存器尋址。它們可以是數(shù)據(jù)寄存器(8位或位或16位),位),也可以是地址指針寄存器、變址寄存器或段寄存器,如寄也可以是地址指針寄存器、變址寄存器或段寄存器,如寄存器存器AX、BX、CX、DX、SI等
8、。如圖等。如圖4-3所示。所示。 例如:例如:4.1.3寄存器尋址寄存器尋址MOV BX,AX ;BXAXMOV AL,BH ;ALBH 操作數(shù)是在存儲(chǔ)器中,但是,操作數(shù)地址的操作數(shù)是在存儲(chǔ)器中,但是,操作數(shù)地址的16位偏移位偏移量包含在以下四個(gè)寄存器量包含在以下四個(gè)寄存器SI、DI、BP、BX之一中,所以之一中,所以這種尋址方式叫寄存器間接尋址。可以分成兩種情況:這種尋址方式叫寄存器間接尋址。可以分成兩種情況: 1) 以以SI、DI、BX間接尋址,則通常操作數(shù)在現(xiàn)行數(shù)間接尋址,則通常操作數(shù)在現(xiàn)行數(shù)據(jù)段區(qū)域中,即數(shù)據(jù)段寄存器據(jù)段區(qū)域中,即數(shù)據(jù)段寄存器(DS)16(或或10H)加上加上SI、DI
9、、BX中的中的16位偏移量,為操作數(shù)的地址,如圖位偏移量,為操作數(shù)的地址,如圖4-4所示。所示。4.1.4寄存器間接尋址寄存器間接尋址例如例如: MOV AX,SI ; 操作數(shù)地址是:操作數(shù)地址是:(DSDS)1616(SISI) 2) 以寄存器以寄存器BP間接尋址,則操作數(shù)在堆棧段區(qū)域中。即間接尋址,則操作數(shù)在堆棧段區(qū)域中。即堆棧段寄存器堆棧段寄存器(SS)16與與BP的內(nèi)容相加作為操作數(shù)的地址。的內(nèi)容相加作為操作數(shù)的地址。例如:例如: MOV AX,BP ; 操作數(shù)地址是:操作數(shù)地址是:(SSSS)1616(BPBP) 若在指令中規(guī)定是段超越的,則若在指令中規(guī)定是段超越的,則BP的內(nèi)容也可
10、以與其它的內(nèi)容也可以與其它的段寄存器相加,形成操作數(shù)地址。的段寄存器相加,形成操作數(shù)地址。例如:例如: MOV AX,DS:BP ;操作數(shù)地址是:操作數(shù)地址是:(DSDS)1616(BPBP) 由指定的寄存器內(nèi)容,加上指令中給出由指定的寄存器內(nèi)容,加上指令中給出8位或位或16位的位的偏移量(當(dāng)然要由一個(gè)段寄存器作為基地址)作為操作數(shù)偏移量(當(dāng)然要由一個(gè)段寄存器作為基地址)作為操作數(shù)的偏移地址,稱(chēng)為變址尋址。(操作數(shù)在存儲(chǔ)器中)的偏移地址,稱(chēng)為變址尋址。(操作數(shù)在存儲(chǔ)器中)可以作為變址尋址的四個(gè)寄存器是可以作為變址尋址的四個(gè)寄存器是SI、DI、BX、BP。 1) 若用若用SI、DI和和BX作為變
11、址,則與數(shù)據(jù)段寄存器相作為變址,則與數(shù)據(jù)段寄存器相加,形成操作數(shù)的地址默認(rèn)在數(shù)據(jù)段。加,形成操作數(shù)的地址默認(rèn)在數(shù)據(jù)段。 2) 若用若用BPBP變址,則與堆棧段寄存器相加,形成操作變址,則與堆棧段寄存器相加,形成操作數(shù)的地址默認(rèn)在堆棧段。數(shù)的地址默認(rèn)在堆棧段。例如:例如: MOV AXMOV AX,DATABX DATABX ;指令的執(zhí)行過(guò)程如圖指令的執(zhí)行過(guò)程如圖4-54-5所示所示 操作數(shù)地址是:操作數(shù)地址是:(DSDS) 16 16(BXBX)DATADATA 假設(shè)(假設(shè)(DSDS)= 4000H= 4000H,(,(BXBX)= 2000H= 2000H, DATA= 0020HDATA=
12、 0020H 則物理地址則物理地址= = 4000H4000H10H10H2000H2000H0020H= 42020H0020H= 42020H4.1.5變址尋址變址尋址( (又稱(chēng)為寄存器相對(duì)尋址又稱(chēng)為寄存器相對(duì)尋址) ) 但是,只要在指令中指定是段超越的,則可以用別但是,只要在指令中指定是段超越的,則可以用別的段寄存器作為基地址。的段寄存器作為基地址。 在匯編語(yǔ)言中,變址尋址指令的書(shū)寫(xiě)格式允許有幾在匯編語(yǔ)言中,變址尋址指令的書(shū)寫(xiě)格式允許有幾種不同的形式。以下幾種寫(xiě)法實(shí)質(zhì)上是完全等價(jià)的:種不同的形式。以下幾種寫(xiě)法實(shí)質(zhì)上是完全等價(jià)的: MOV AH , DATABXMOV AH , DATAB
13、X MOV AH , BXDATA MOV AH , BXDATA MOV AH , DATA+BX MOV AH , DATA+BX MOV AH , BX+DATA MOV AH , BX+DATA MOV AH , DATA+BX MOV AH , DATA+BX MOV AH , BX+DATA MOV AH , BX+DATA 另外,在有的教科書(shū)中,若指定的寄存器是另外,在有的教科書(shū)中,若指定的寄存器是BX,BP又稱(chēng)為基址尋址方式。又稱(chēng)為基址尋址方式。 把把BX(數(shù)據(jù)段)和(數(shù)據(jù)段)和BP(堆棧段)看成是基址寄存器,(堆棧段)看成是基址寄存器,把把SI、DI看著是變址寄存器,看著是變
14、址寄存器,把一個(gè)基址寄存器(把一個(gè)基址寄存器(BX或或BP)的內(nèi)容加上一個(gè)變址寄存器(的內(nèi)容加上一個(gè)變址寄存器(SI或或DI)的內(nèi)容,再加上指)的內(nèi)容,再加上指令中指定的令中指定的8位或位或16位偏移量(當(dāng)然要以一個(gè)段寄存器作為位偏移量(當(dāng)然要以一個(gè)段寄存器作為地址基準(zhǔn))作為操作數(shù)的偏移地址,稱(chēng)為基址加變址尋址。地址基準(zhǔn))作為操作數(shù)的偏移地址,稱(chēng)為基址加變址尋址。4.1.6 基址加變址尋基址加變址尋址址 操作數(shù)在存貯器中,其偏移地址由操作數(shù)在存貯器中,其偏移地址由(基址寄存器)(基址寄存器)(變址寄存器)相對(duì)偏移量(變址寄存器)相對(duì)偏移量形成。形成。 例如:例如: MOV AXMOV AX,B
15、XSIDATA BXSIDATA 或或 MOV AXMOV AX,BXBXSIDATASIDATA 操作數(shù)地址是:操作數(shù)地址是:(DSDS)1616(BXBX)()(SISI)DATADATA 假設(shè)(假設(shè)(DSDS)= 4000H= 4000H,(,(BXBX)= 2000H= 2000H,(,(SISI)= = 2000H2000H,DATA=0100HDATA=0100H 則物理地址則物理地址=4000H=4000H10H10H2000H2000H2000H2000H0100H = 0100H = 44100H44100H 指令的執(zhí)行過(guò)程如圖指令的執(zhí)行過(guò)程如圖4-6所示所示 與變址尋址方式
16、類(lèi)似,基址加變址尋址指令同樣也與變址尋址方式類(lèi)似,基址加變址尋址指令同樣也可以表示成多種形式,例如,以下幾種寫(xiě)法實(shí)質(zhì)上是完可以表示成多種形式,例如,以下幾種寫(xiě)法實(shí)質(zhì)上是完全等價(jià)的:全等價(jià)的: MOV AX , DATABXSIMOV AX , DATABXSI MOV AX , BX+DATASI MOV AX , BX+DATASI MOV AX , DATA+BX+SI MOV AX , DATA+BX+SI MOV AX , BX DATASI MOV AX , BX DATASI MOV AX , DATASI+BX MOV AX , DATASI+BX MOV AX , BXSI+D
17、ATA MOV AX , BXSI+DATA 使用基址加變址尋址時(shí)要注意,指令中不允許同時(shí)使用基址加變址尋址時(shí)要注意,指令中不允許同時(shí)出現(xiàn)兩個(gè)基址寄存器或兩個(gè)變址寄存器,例如,以下指出現(xiàn)兩個(gè)基址寄存器或兩個(gè)變址寄存器,例如,以下指令是非法的:令是非法的: MOV AX , DATASIDIMOV AX , DATASIDI MOV AX , BX+DATABP MOV AX , BX+DATABP 另外,在有的教科書(shū)中,另外,在有的教科書(shū)中,若若DATA為為0,則稱(chēng)為基址,則稱(chēng)為基址變址尋址方式變址尋址方式;若若DATA不為不為0,則稱(chēng)為基址變址相對(duì)尋,則稱(chēng)為基址變址相對(duì)尋址方式址方式?;纷?/p>
18、址相對(duì)尋址方式實(shí)為基址變址尋址方式?;纷冎废鄬?duì)尋址方式實(shí)為基址變址尋址方式的擴(kuò)充。的擴(kuò)充。 若用若用BX作為基地址,則操作數(shù)在數(shù)據(jù)段區(qū)域。作為基地址,則操作數(shù)在數(shù)據(jù)段區(qū)域。 若用若用BP作為基地址,則操作數(shù)在堆棧段區(qū)域。作為基地址,則操作數(shù)在堆棧段區(qū)域。 但若在指令中規(guī)定是段超越的,則可用其它段寄存但若在指令中規(guī)定是段超越的,則可用其它段寄存器作為基地址。表器作為基地址。表4-14-1是段寄存器使用的基本約定。是段寄存器使用的基本約定。訪問(wèn)存儲(chǔ)器類(lèi)型訪問(wèn)存儲(chǔ)器類(lèi)型默認(rèn)默認(rèn)段寄存器段寄存器可指定可指定段寄存器段寄存器段內(nèi)段內(nèi)偏移地址來(lái)源偏移地址來(lái)源取指令碼取指令碼CS無(wú)無(wú)IP堆棧操作堆棧操作S
19、S無(wú)無(wú)SP串操作源地址串操作源地址DSCS、ES、SSSI串操作目的地址串操作目的地址ES無(wú)無(wú)DIBP用作基址寄存器用作基址寄存器SSCS、DS、ES 根據(jù)尋址方式求得有根據(jù)尋址方式求得有效地址效地址一般數(shù)據(jù)存取一般數(shù)據(jù)存取DSCS、ES、SS 根據(jù)尋址方式求得有根據(jù)尋址方式求得有效地址效地址表表4 - 1 段寄存器使用的基本約定段寄存器使用的基本約定 圖圖4 7 不同字長(zhǎng)的指令格式不同字長(zhǎng)的指令格式4.1.74.1.7指令格式及指令執(zhí)行時(shí)間指令格式及指令執(zhí)行時(shí)間1、指令格式指令格式 不同字長(zhǎng)的指令格式如圖不同字長(zhǎng)的指令格式如圖4-7所示所示 取指令,取操作數(shù),執(zhí)行指令及傳送結(jié)果所需時(shí)間取指令
20、,取操作數(shù),執(zhí)行指令及傳送結(jié)果所需時(shí)間的總和。的總和。2、指令執(zhí)行時(shí)間指令執(zhí)行時(shí)間返回本章目錄返回本章目錄 控制計(jì)算機(jī)完成指定操作的命令稱(chēng)為指令。不同的控制計(jì)算機(jī)完成指定操作的命令稱(chēng)為指令。不同的計(jì)算機(jī)具有各自不同的指令,其所有指令的集合,就稱(chēng)計(jì)算機(jī)具有各自不同的指令,其所有指令的集合,就稱(chēng)為該計(jì)算機(jī)的為該計(jì)算機(jī)的指令系統(tǒng)指令系統(tǒng)。指令系統(tǒng)不僅定義了計(jì)算機(jī)所。指令系統(tǒng)不僅定義了計(jì)算機(jī)所能執(zhí)行的指令的集合,還定義了使用這些指令的規(guī)則。能執(zhí)行的指令的集合,還定義了使用這些指令的規(guī)則。因此在使用匯編語(yǔ)言編寫(xiě)程序時(shí),必須要對(duì)機(jī)器的指令因此在使用匯編語(yǔ)言編寫(xiě)程序時(shí),必須要對(duì)機(jī)器的指令系統(tǒng)非常了解。系統(tǒng)非
21、常了解。 對(duì)指令系統(tǒng)來(lái)說(shuō),對(duì)指令系統(tǒng)來(lái)說(shuō),8086和和8088是完全相同的,因是完全相同的,因此,本章將這兩種此,本章將這兩種CPU統(tǒng)稱(chēng)為統(tǒng)稱(chēng)為8086。4.2 Intel 80 x864.2 Intel 80 x86指令系統(tǒng)指令系統(tǒng) 在介紹各種指令之前,先介紹一下本節(jié)中要用到的在介紹各種指令之前,先介紹一下本節(jié)中要用到的一些符號(hào)。一些符號(hào)。 OPRD指各種類(lèi)型的操作數(shù)指各種類(lèi)型的操作數(shù) DATA8位或位或16位操作數(shù)位操作數(shù) PROC過(guò)程或子程序的符號(hào)地址過(guò)程或子程序的符號(hào)地址 LABLE符號(hào)地址符號(hào)地址 n 輸入輸入/輸出端口地址輸出端口地址 mem存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù) ( )表示寄存
22、器的內(nèi)容表示寄存器的內(nèi)容 表示存儲(chǔ)單元的內(nèi)容表示存儲(chǔ)單元的內(nèi)容 8086/8088 CPU的指令系統(tǒng)共包含的指令系統(tǒng)共包含92種基本指令,種基本指令,按照功能可以分為以下六個(gè)功能組。按照功能可以分為以下六個(gè)功能組。 1) 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 (Data Transter) 2) 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 (Arithmetic) 3) 邏輯運(yùn)算指令邏輯運(yùn)算指令 (Logic) 4) 串操作指令串操作指令 (String Menipulation) 5) 程序控制指令程序控制指令 (Program Control) 6) 處理器控制指令處理器控制指令 (Processor Control)
23、 傳送類(lèi)指令的最大特點(diǎn)是:傳送類(lèi)指令的最大特點(diǎn)是:絕大多數(shù)指令執(zhí)行后不絕大多數(shù)指令執(zhí)行后不影響標(biāo)志寄存器影響標(biāo)志寄存器FLAGS(除標(biāo)志寄存器傳送指令外)。(除標(biāo)志寄存器傳送指令外)。傳送類(lèi)指令按功能分為傳送類(lèi)指令按功能分為4小類(lèi):小類(lèi):通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令、目標(biāo)目標(biāo)地址傳送指令地址傳送指令、標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令和和輸入輸出指令輸入輸出指令。4.2.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 (1)一般傳送指令)一般傳送指令 MOV 一般格式:一般格式:MOV OPRD1,OPRD2 MOV 是操作碼,是操作碼,OPRD1和和OPRD2分別是目的操作分別是目的操作數(shù)和源操作數(shù)。數(shù)
24、和源操作數(shù)。 功能:功能:完成數(shù)據(jù)傳送,即將一個(gè)操作數(shù)從源地址傳完成數(shù)據(jù)傳送,即將一個(gè)操作數(shù)從源地址傳送到目標(biāo)地址,而源地址中的操作數(shù)不變。傳送的操作送到目標(biāo)地址,而源地址中的操作數(shù)不變。傳送的操作數(shù)可以是數(shù)可以是8位也可以是位也可以是16位。位。1通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令 使用使用MOV 指令應(yīng)注意幾個(gè)問(wèn)題:指令應(yīng)注意幾個(gè)問(wèn)題: 1)一般一般CS和和IP的內(nèi)容不通過(guò)的內(nèi)容不通過(guò)MOV指令進(jìn)行修改,它指令進(jìn)行修改,它們只能作為源操作數(shù)。們只能作為源操作數(shù)。 2)兩個(gè)存儲(chǔ)器操作數(shù)之間不允許直接進(jìn)行信息傳送,兩個(gè)存儲(chǔ)器操作數(shù)之間不允許直接進(jìn)行信息傳送,但可以用但可以用CPU內(nèi)部寄存器為橋梁
25、來(lái)完成這樣的傳送。內(nèi)部寄存器為橋梁來(lái)完成這樣的傳送。如:如:MOV AX,SI; MOV BX,AX;借助借助AX完成傳送完成傳送 3)兩個(gè)段寄存器之間不能直接傳送信息。兩個(gè)段寄存器之間不能直接傳送信息。如:如:MOVAX,DS; MOVES,AX;借助借助AX完成傳送完成傳送 4)目的操作數(shù),不能用立即尋址方式。目的操作數(shù),不能用立即尋址方式。 5)不允許用立即尋址方式為段寄存器賦初值。不允許用立即尋址方式為段寄存器賦初值。如:如:MOVAX,DATA; MOVDS,AX ;借助借助AX完成傳送完成傳送具體來(lái)說(shuō),傳送指令可以實(shí)現(xiàn)以下各種傳送:具體來(lái)說(shuō),傳送指令可以實(shí)現(xiàn)以下各種傳送:寄存器之間
26、的傳送寄存器之間的傳送MOV BL,AL;字節(jié)傳送字節(jié)傳送MOV AX,BX;字傳送字傳送MOV DS,BX;字傳送字傳送MOV AX,CS;字傳送字傳送寄存器與存儲(chǔ)器之間的傳送寄存器與存儲(chǔ)器之間的傳送MOV AL,BUFMOV AX,SIMOV SI,DATABPMOV DS,DATASI+BXMOV DI,CXMOV DATABP+DI,ES立即數(shù)到寄存器的傳送立即數(shù)到寄存器的傳送MOV CL, 0FFH ; 將立即數(shù)將立即數(shù)0FFH送送CLMOV AX,0345H; 將立即數(shù)將立即數(shù)0345H送送AX,即即(AH)= 03H,(AL)= 45H。立即數(shù)到存儲(chǔ)器的傳送立即數(shù)到存儲(chǔ)器的傳送M
27、OV 2000H,1122H; 將立即數(shù)將立即數(shù)1122H送偏移地址為送偏移地址為 2000H和和2001H兩個(gè)存儲(chǔ)單元,兩個(gè)存儲(chǔ)單元, 低低8位送低地址單元,高位送低地址單元,高8位送高位送高 地址單元。地址單元。MOV SI,33H ; 將立即數(shù)將立即數(shù)33H送偏移地址為送偏移地址為 (SI)的存儲(chǔ)單元。的存儲(chǔ)單元。 (2)堆棧指令)堆棧指令 堆棧是人為定義的一塊連續(xù)的存儲(chǔ)堆棧是人為定義的一塊連續(xù)的存儲(chǔ)空間,用來(lái)暫存數(shù)據(jù),這些數(shù)據(jù)是按空間,用來(lái)暫存數(shù)據(jù),這些數(shù)據(jù)是按“先進(jìn)后出,后進(jìn)先進(jìn)后出,后進(jìn)先出先出”的原則存取的。堆棧指針的原則存取的。堆棧指針SP存放棧頂?shù)挠行У刂?。存放棧頂?shù)挠行У刂?/p>
28、。8086的堆棧是棧頂為低地址,棧底為高地址。的堆棧是棧頂為低地址,棧底為高地址。 堆棧指令包括堆棧指令包括進(jìn)棧進(jìn)棧(PUSH)和和出棧出棧(POP)指令指令兩類(lèi),且僅能進(jìn)行字運(yùn)算。(操作數(shù)不能是立即數(shù))兩類(lèi),且僅能進(jìn)行字運(yùn)算。(操作數(shù)不能是立即數(shù)) 1)進(jìn)棧指令進(jìn)棧指令PUSH 一般格式:一般格式:PUSH OPRD 源操作數(shù)可以是源操作數(shù)可以是CPU內(nèi)部的內(nèi)部的16位通用寄存器、段寄存位通用寄存器、段寄存器(器(CS除外)和內(nèi)存操作數(shù)(所有尋址方式)。進(jìn)棧的除外)和內(nèi)存操作數(shù)(所有尋址方式)。進(jìn)棧的操作對(duì)象必須是操作對(duì)象必須是16位數(shù)。位數(shù)。 功能:功能:將數(shù)據(jù)壓入堆棧將數(shù)據(jù)壓入堆棧 執(zhí)行
29、過(guò)程為:執(zhí)行過(guò)程為:操作數(shù)高操作數(shù)高8位位(SP)-1; 操作數(shù)低操作數(shù)低8位位(SP)-2; (SP)-2 (SP); 例如:例如:PUSH AX;設(shè)設(shè)(AX)=2233H 執(zhí)行過(guò)程為執(zhí)行過(guò)程為:(SP)-1(SP), (AH)SP,(SP)-1(SP), (AL)SP,PUSH AX指令執(zhí)指令執(zhí)行前后堆棧區(qū)的情況如圖行前后堆棧區(qū)的情況如圖4-8所示。所示。 圖圖4 - 9 POP BX 指令執(zhí)行指令執(zhí)行示意圖示意圖行示意圖行示意圖圖圖4 - 8 PUSH AX 指令執(zhí)指令執(zhí) 2)出棧指令出棧指令POP 一般格式:一般格式:POP OPRD 功能:功能:將數(shù)據(jù)彈出堆棧將數(shù)據(jù)彈出堆棧 執(zhí)行過(guò)程
30、為執(zhí)行過(guò)程為:SP 操作數(shù)低操作數(shù)低8位;位; (SP)+1 操作數(shù)高操作數(shù)高8位;位; (SP)+2 (SP); 例如:例如:POP BX;(BX)=2211H,則則POP BX指令指令執(zhí)行前后堆棧區(qū)的情況如圖執(zhí)行前后堆棧區(qū)的情況如圖4-9所示。所示。 在程序中,在程序中,PUSH和和POP指令一般是成對(duì)出現(xiàn),且執(zhí)指令一般是成對(duì)出現(xiàn),且執(zhí)行順序相反。行順序相反。 一般堆棧是在響應(yīng)中斷或子程序調(diào)用時(shí)保護(hù)斷點(diǎn)地址一般堆棧是在響應(yīng)中斷或子程序調(diào)用時(shí)保護(hù)斷點(diǎn)地址和現(xiàn)場(chǎng),還可以在需要時(shí)保存一些寄存器的內(nèi)容。和現(xiàn)場(chǎng),還可以在需要時(shí)保存一些寄存器的內(nèi)容。 例如:例如:PUSH AX;保護(hù)寄存器的內(nèi)容保護(hù)寄
31、存器的內(nèi)容 PUSH DX;保護(hù)寄存器的內(nèi)容保護(hù)寄存器的內(nèi)容 POP DX;恢復(fù)寄存器的內(nèi)容恢復(fù)寄存器的內(nèi)容 POP AX;恢復(fù)寄存器的內(nèi)容恢復(fù)寄存器的內(nèi)容 (3)交換指令交換指令XCHG 一般格式:一般格式:XCHG OPRD1,OPRD2 功能:功能:完成數(shù)據(jù)交換,把一個(gè)字節(jié)或一個(gè)字的源操作完成數(shù)據(jù)交換,把一個(gè)字節(jié)或一個(gè)字的源操作數(shù)與目的操作數(shù)相交換。數(shù)與目的操作數(shù)相交換。 交換指令對(duì)操作數(shù)有如下要求:交換指令對(duì)操作數(shù)有如下要求: 源操作數(shù)和目的操作數(shù)可以是寄存器或存儲(chǔ)器,但不源操作數(shù)和目的操作數(shù)可以是寄存器或存儲(chǔ)器,但不能同時(shí)為存儲(chǔ)器??梢栽诩拇嫫髦g、寄存器與存儲(chǔ)器之能同時(shí)為存儲(chǔ)器。可
32、以在寄存器之間、寄存器與存儲(chǔ)器之間進(jìn)行交換,但段寄存器和立即數(shù)不能作為一個(gè)操作數(shù),間進(jìn)行交換,但段寄存器和立即數(shù)不能作為一個(gè)操作數(shù),不能在累加器之間進(jìn)行交換。兩個(gè)操作數(shù)字長(zhǎng)必須相同。不能在累加器之間進(jìn)行交換。兩個(gè)操作數(shù)字長(zhǎng)必須相同。 例如:例如: XCHG AL,CL;(AL)(CL),字節(jié)交換字節(jié)交換 XCHG AX,BX;(AX)(BX),字交換字交換 XCHG AX,SI;(AX)SI,字交換,字交換 (4)查表指令查表指令 一般格式一般格式:XLAT TABLE;TABLE是要查找的表首是要查找的表首地址。地址。 或或 XLAT;(AL)(DX)16(BX)+(AL) 功能:功能:完成
33、一個(gè)字節(jié)的查表轉(zhuǎn)換。完成一個(gè)字節(jié)的查表轉(zhuǎn)換。 說(shuō)明:說(shuō)明:該指令只查找字節(jié)表,表的首地址的偏移地該指令只查找字節(jié)表,表的首地址的偏移地址送址送BX,要查找的字節(jié)相對(duì)于表首地址的位移量送寄存要查找的字節(jié)相對(duì)于表首地址的位移量送寄存器器AL(AL內(nèi)容即為要查找字節(jié)在表中的序號(hào),因此表的內(nèi)容即為要查找字節(jié)在表中的序號(hào),因此表的長(zhǎng)度為長(zhǎng)度為256),指令執(zhí)行后的結(jié)果存放在指令執(zhí)行后的結(jié)果存放在AL中。中。 本指令可用在數(shù)制轉(zhuǎn)換、函數(shù)表查表、代碼轉(zhuǎn)換等本指令可用在數(shù)制轉(zhuǎn)換、函數(shù)表查表、代碼轉(zhuǎn)換等場(chǎng)合。場(chǎng)合。 例如:例如:MOV BX,OFFSET TABLE ;取表首地址;取表首地址 MOV AL,5
34、;偏移量;偏移量 XLAT ;查表;查表 ,ALBX+AL 所用表如圖所用表如圖4-10所示。所示。 輸入輸出輸入輸出(I/O)指令是專(zhuān)門(mén)針對(duì)輸入輸出端口進(jìn)行讀寫(xiě)指令是專(zhuān)門(mén)針對(duì)輸入輸出端口進(jìn)行讀寫(xiě)的指令,共有兩條的指令,共有兩條IN和和OUT。輸入指令用于從。輸入指令用于從I/O端口讀數(shù)端口讀數(shù)據(jù)到據(jù)到AX或或AL中,輸出指令用于把中,輸出指令用于把AX或或AL的內(nèi)容寫(xiě)到的內(nèi)容寫(xiě)到I/O端端口中??谥?。 (1)輸入指令輸入指令I(lǐng)N 一般格式:一般格式: IN AL,port ;輸入一個(gè)字節(jié),;輸入一個(gè)字節(jié),port為為8位端口地址。位端口地址。 IN AX,port ;輸入一個(gè)字,;輸入一個(gè)字
35、,port為為8位端口地址。位端口地址。 IN AL,DX ;輸入一個(gè)字節(jié),;輸入一個(gè)字節(jié),DX的內(nèi)容為的內(nèi)容為16位端口地址。位端口地址。 IN AX,DX ;輸入一個(gè)字,;輸入一個(gè)字,DX的內(nèi)容為的內(nèi)容為16位端口地址。位端口地址。2輸入輸出輸入輸出(I/O)指令指令 功能:功能:從從I/O端口輸入數(shù)據(jù)至端口輸入數(shù)據(jù)至AL或或AX。 輸入指令允許把一個(gè)字節(jié)或一個(gè)字由一個(gè)輸入端口傳輸入指令允許把一個(gè)字節(jié)或一個(gè)字由一個(gè)輸入端口傳送到送到AL或或AX中。若端口地址不超過(guò)中。若端口地址不超過(guò)255時(shí),為直接尋址方時(shí),為直接尋址方式;若端口地址超過(guò)式;若端口地址超過(guò)255時(shí),則必須用時(shí),則必須用DX
36、保存端口地址,保存端口地址,為間接尋址方式,這樣用為間接尋址方式,這樣用DX作端口尋址最多可尋找作端口尋址最多可尋找64K個(gè)個(gè)端口。端口。 例如:例如: MOV DX ,0A40H ;將;將16位端口地址送位端口地址送DX IN AL,DX ;從地址;從地址0A40H的端口輸入一個(gè)字節(jié)到的端口輸入一個(gè)字節(jié)到AL (2)輸出指令輸出指令OUT 一般格式:一般格式: OUT port,AL ;輸出一個(gè)字節(jié),;輸出一個(gè)字節(jié),port為為8位端口地址。位端口地址。 OUT port,AX ;輸出一個(gè)字,;輸出一個(gè)字,port為為8位端口地址。位端口地址。 OUT DX,AL ;輸出一個(gè)字節(jié),;輸出一個(gè)
37、字節(jié),DX的內(nèi)容為的內(nèi)容為16位端口位端口地址。地址。OUT DX,AX ;輸出一個(gè)字,;輸出一個(gè)字,DX的內(nèi)容為的內(nèi)容為16位端口地位端口地址。址。 功能:功能:將將AL或或AX的內(nèi)容輸出至的內(nèi)容輸出至I/O端口。端口。該指令將該指令將AL或或AX中的內(nèi)容傳送到一個(gè)輸出端口。端口中的內(nèi)容傳送到一個(gè)輸出端口。端口尋址方式與尋址方式與IN指令相同。指令相同。 例如:例如: MOV DX ,0A40H ;將;將16位端口地址送位端口地址送DX OUT DX ,AX ;把;把AX的內(nèi)容從地址的內(nèi)容從地址0A40H的端口輸出的端口輸出 8086/8088提供了三條把地址指針寫(xiě)入寄存器或寄存提供了三條把
38、地址指針寫(xiě)入寄存器或寄存器對(duì)的指令。器對(duì)的指令。 (1)取偏移地址指令取偏移地址指令LEA 一般格式:一般格式: LEA OPRD1,OPRD2 功能:功能:把源操作數(shù)把源操作數(shù)OPRD2的地址偏移量傳送至目的的地址偏移量傳送至目的操作數(shù)操作數(shù)OPRD1。3地址傳送指令地址傳送指令 源操作數(shù)必須是一個(gè)存儲(chǔ)器操作數(shù),目的操作數(shù)必須源操作數(shù)必須是一個(gè)存儲(chǔ)器操作數(shù),目的操作數(shù)必須是一個(gè)是一個(gè)16位的寄存器。這條指令通常用來(lái)建立串操作指位的寄存器。這條指令通常用來(lái)建立串操作指令所需的地址指針。令所需的地址指針。 例:例: LEA BX,BUFFER ;把;把BUFFER的偏移地址送的偏移地址送BX M
39、OV BX,BUFFER ;把存儲(chǔ)器;把存儲(chǔ)器BUFFER的內(nèi)容送的內(nèi)容送BX 下面兩條指令完全等價(jià):下面兩條指令完全等價(jià): LEA BX,BUFFER MOV BX,OFFSET BUFFER; 其中其中OFFSET BUFFER表示存儲(chǔ)器表示存儲(chǔ)器BUFFER的偏移的偏移地址。地址。 (2)地址指針裝入指令指令地址指針裝入指令指令LDS 一般格式:一般格式:LDS OPRD1,OPRD2 功能:功能:完成一個(gè)完成一個(gè)32位地址的傳送。地址指針包括段基位地址的傳送。地址指針包括段基址部分和偏移地址部分。指令將段基址送入址部分和偏移地址部分。指令將段基址送入DS,偏移地,偏移地址部分送入一個(gè)址
40、部分送入一個(gè)16位的指針寄存器或變址寄存器。位的指針寄存器或變址寄存器。 源操作數(shù)是一個(gè)存儲(chǔ)器操作數(shù),目的操作數(shù)是一個(gè)指源操作數(shù)是一個(gè)存儲(chǔ)器操作數(shù),目的操作數(shù)是一個(gè)指針寄存器或變址寄存器。針寄存器或變址寄存器。 例如:例如:LDS SI,100H ;將把偏移地址;將把偏移地址100H到到103H所指向的所指向的4個(gè)存儲(chǔ)單元的前兩個(gè)單元的內(nèi)容送個(gè)存儲(chǔ)單元的前兩個(gè)單元的內(nèi)容送SI,后兩個(gè)單元的內(nèi)容送后兩個(gè)單元的內(nèi)容送DS。 設(shè)設(shè)(DS)= 0B000H,(0B0100H)=10H,(0B0101H)=20H,(0B0102H)=30H,(0B0103H)=40H,則執(zhí)行上述指令后則執(zhí)行上述指令后(
41、SI)= 2010H,(DS)= 4030H。 (3)LES指令指令 一般格式:一般格式: LES OPRD1,OPRD2 這條指令除將地址指針的段基址部分送入這條指令除將地址指針的段基址部分送入ES外,其外,其它與它與LDS類(lèi)似。類(lèi)似。 例如:例如: LES DI,BX+DATA 標(biāo)志傳送指令共標(biāo)志傳送指令共4條,指令的操作數(shù)以隱含形式規(guī)定條,指令的操作數(shù)以隱含形式規(guī)定(隱含的操作數(shù)是(隱含的操作數(shù)是AH)。)。 (1)取標(biāo)志指令取標(biāo)志指令LAHF 一般格式:一般格式:LAHF 功能:功能:將標(biāo)志寄存器中的將標(biāo)志寄存器中的SF、ZF、AF、PF和和CF(即低(即低8位)分別傳送至位)分別傳送
42、至AH寄存器的指定位,寄存器的指定位,LAHF指令指令對(duì)狀態(tài)標(biāo)志位無(wú)影響。如圖對(duì)狀態(tài)標(biāo)志位無(wú)影響。如圖4-11所示。所示。4標(biāo)志傳送指令標(biāo)志傳送指令 (2)置標(biāo)志指令置標(biāo)志指令SAHF 一般格式:一般格式:SAHF 功能:功能:將寄存器將寄存器AH的指定位,分別送至標(biāo)志寄存器的的指定位,分別送至標(biāo)志寄存器的SF、ZF、AF、PF和和CF位(即低位(即低8位)。根據(jù)位)。根據(jù)AH的內(nèi)容,的內(nèi)容,影響上述標(biāo)志位,對(duì)影響上述標(biāo)志位,對(duì)OF、DF、IF和和TF無(wú)影響。無(wú)影響。 (3)標(biāo)志壓入堆棧指令標(biāo)志壓入堆棧指令 一般格式:一般格式:PUSHF 功能:功能:先將堆棧指針減先將堆棧指針減2,同時(shí)將標(biāo)志
43、寄存器,同時(shí)將標(biāo)志寄存器FLAGS的內(nèi)容(的內(nèi)容(16位)壓入堆棧,不影響標(biāo)志位。位)壓入堆棧,不影響標(biāo)志位。 (4)標(biāo)志彈出堆棧指令標(biāo)志彈出堆棧指令 一般格式:一般格式:POPF 功能:功能:將堆棧頂部的一個(gè)字,傳送到標(biāo)志寄存器將堆棧頂部的一個(gè)字,傳送到標(biāo)志寄存器FLAGS,同時(shí)堆棧指針加,同時(shí)堆棧指針加2,影響標(biāo)志位。,影響標(biāo)志位。 表表4-2列出了數(shù)據(jù)傳送類(lèi)指令列出了數(shù)據(jù)傳送類(lèi)指令 的功能與格式。的功能與格式。表表4-2 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令 8088提供了二進(jìn)制的加、減、乘、除四種基本算術(shù)運(yùn)提供了二進(jìn)制的加、減、乘、除四種基本算術(shù)運(yùn)算指令。這些操作都可用于字節(jié)或字的運(yùn)算,也可以
44、用于算指令。這些操作都可用于字節(jié)或字的運(yùn)算,也可以用于帶符號(hào)數(shù)(帶符號(hào)數(shù)用補(bǔ)碼表示)與無(wú)符號(hào)數(shù)的運(yùn)算。同帶符號(hào)數(shù)(帶符號(hào)數(shù)用補(bǔ)碼表示)與無(wú)符號(hào)數(shù)的運(yùn)算。同時(shí)時(shí)8088還提供了與之對(duì)應(yīng)的四類(lèi)十進(jìn)制調(diào)整指令,故可還提供了與之對(duì)應(yīng)的四類(lèi)十進(jìn)制調(diào)整指令,故可以進(jìn)行十進(jìn)制的算術(shù)運(yùn)算。以進(jìn)行十進(jìn)制的算術(shù)運(yùn)算。 說(shuō)明:說(shuō)明:算術(shù)運(yùn)算指令有單操作數(shù)和雙操作數(shù)兩種,其算術(shù)運(yùn)算指令有單操作數(shù)和雙操作數(shù)兩種,其中單操作數(shù)不能是立即數(shù),而雙操作數(shù)指令中,立即數(shù)只中單操作數(shù)不能是立即數(shù),而雙操作數(shù)指令中,立即數(shù)只能作為源操作數(shù),另外,源操作數(shù)和目的操作數(shù)不能同時(shí)能作為源操作數(shù),另外,源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器
45、。為存儲(chǔ)器。 算術(shù)運(yùn)算指令大多會(huì)對(duì)標(biāo)志位產(chǎn)生影響。下面分別介算術(shù)運(yùn)算指令大多會(huì)對(duì)標(biāo)志位產(chǎn)生影響。下面分別介紹這四種指令。紹這四種指令。4.2.2算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 (1)不帶進(jìn)位的加法指令不帶進(jìn)位的加法指令A(yù)DD 一般形式:一般形式:ADD OPRD1,OPRD2 功能:功能:OPRD1OPRD1+OPRD2 完成兩個(gè)字節(jié)或字操作數(shù)相加,結(jié)果送至目的操作數(shù)完成兩個(gè)字節(jié)或字操作數(shù)相加,結(jié)果送至目的操作數(shù)OPRD1。1加法運(yùn)算指令加法運(yùn)算指令 源操作數(shù)和目的操作數(shù)可以是寄存器以及存儲(chǔ)器操作源操作數(shù)和目的操作數(shù)可以是寄存器以及存儲(chǔ)器操作數(shù),源操作數(shù)還可以是立即數(shù);可以是無(wú)符號(hào)數(shù),也可以數(shù),源操
46、作數(shù)還可以是立即數(shù);可以是無(wú)符號(hào)數(shù),也可以是帶符號(hào)數(shù)。但源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器是帶符號(hào)數(shù)。但源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù),也不能對(duì)段寄存器進(jìn)行運(yùn)算。操作數(shù),也不能對(duì)段寄存器進(jìn)行運(yùn)算。 這條指令對(duì)標(biāo)志位這條指令對(duì)標(biāo)志位SF、ZF、AF、PF、CF和和OF有影有影響。響。 例如:例如: ADD AL,20 ;累加器;累加器AL與立即數(shù)相加與立即數(shù)相加 ADD BX,3000H ;寄存器與存儲(chǔ)單元內(nèi)容相加;寄存器與存儲(chǔ)單元內(nèi)容相加 ADD AX,SI ;寄存器之間相加;寄存器之間相加 ADD DATABX+SI,DX ;16位存儲(chǔ)器操作數(shù)與寄存器位存儲(chǔ)器操作數(shù)與寄存器 內(nèi)
47、容相加內(nèi)容相加 ADD DATASI,AL ;8位存儲(chǔ)器操作數(shù)與寄存器位存儲(chǔ)器操作數(shù)與寄存器 相加相加 (2)帶進(jìn)位的加法指令帶進(jìn)位的加法指令A(yù)DC 一般形式:一般形式:ADC OPRD1,OPRD2 ;帶進(jìn)位的加法;帶進(jìn)位的加法 功能:功能:OPRD1OPRD1+OPRD2 +CF 這條指令與上這條指令與上條指令類(lèi)似,只是在兩個(gè)操作數(shù)相加時(shí)條指令類(lèi)似,只是在兩個(gè)操作數(shù)相加時(shí),要把進(jìn)位標(biāo)志,要把進(jìn)位標(biāo)志CFCF的現(xiàn)行值加上去,結(jié)果送至目的操作數(shù)。的現(xiàn)行值加上去,結(jié)果送至目的操作數(shù)。 ADC指令主要用于多字節(jié)運(yùn)算中。若有兩個(gè)四字節(jié)的數(shù),指令主要用于多字節(jié)運(yùn)算中。若有兩個(gè)四字節(jié)的數(shù),已分別放在自已
48、分別放在自FIRST和SECOND開(kāi)始的存儲(chǔ)區(qū)中,每個(gè)數(shù)占開(kāi)始的存儲(chǔ)區(qū)中,每個(gè)數(shù)占四個(gè)存儲(chǔ)單元。存放時(shí),最低字節(jié)在低地址單元,則可四個(gè)存儲(chǔ)單元。存放時(shí),最低字節(jié)在低地址單元,則可 用以下程序段實(shí)現(xiàn)相加。用以下程序段實(shí)現(xiàn)相加。 MOV AX,F(xiàn)IRST ADD AX,SECOND ;進(jìn)行字運(yùn)算;進(jìn)行字運(yùn)算 MOV THIRD,AX MOV AX,F(xiàn)IRST+2 ADC AX,SECOND+2 MOV THIRD+2,AX 這條指令對(duì)標(biāo)志位這條指令對(duì)標(biāo)志位SFSF、ZFZF、AFAF、PFPF、CFCF和和OFOF有影響。有影響。 (3)加加1指令指令I(lǐng)NC 一般形式:一般形式:INC OPRD
49、功能:功能:OPRDOPRD+1 完成對(duì)指定的操作數(shù)完成對(duì)指定的操作數(shù)OPRD加加1,然后返回此操作數(shù)。,然后返回此操作數(shù)。 操作數(shù)操作數(shù)OPRD可以是寄存器和存儲(chǔ)器操作數(shù);可以是可以是寄存器和存儲(chǔ)器操作數(shù);可以是8位數(shù),也可以是位數(shù),也可以是16位數(shù);但不能是立即數(shù),也不能是段寄位數(shù);但不能是立即數(shù),也不能是段寄存器。此指令主要用于在循環(huán)程序中修改地址指針和循環(huán)存器。此指令主要用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)等。次數(shù)等。 這條指令執(zhí)行的結(jié)果影響標(biāo)志位這條指令執(zhí)行的結(jié)果影響標(biāo)志位AF、OF、PF、SF和和ZF,而對(duì)進(jìn)位標(biāo)志,而對(duì)進(jìn)位標(biāo)志CF沒(méi)有影響。沒(méi)有影響。 如:如:INC AL ;字
50、節(jié)加;字節(jié)加1 INC CX ;字加;字加1 INC BYTE PTRBX ;字節(jié)加;字節(jié)加1 INC WORD PTRSI ;字加;字加1 (1)不帶借位的減法指令不帶借位的減法指令SUB 一般形式:一般形式:SUB OPRD1,OPRD2 ; 功能:功能:OPRD1OPRD1-OPRD2 完成兩個(gè)操作數(shù)相減,也即從完成兩個(gè)操作數(shù)相減,也即從OPRD1中減去中減去OPRD2,結(jié)果放在結(jié)果放在OPRD1中。中。 源操作數(shù)和目的操作數(shù)可以是寄存器以及存儲(chǔ)器操作源操作數(shù)和目的操作數(shù)可以是寄存器以及存儲(chǔ)器操作數(shù),源操作數(shù)還可以是立即數(shù);可以是無(wú)符號(hào)數(shù),也可以數(shù),源操作數(shù)還可以是立即數(shù);可以是無(wú)符號(hào)數(shù)
51、,也可以是帶符號(hào)數(shù)。但源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器是帶符號(hào)數(shù)。但源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù),也不能對(duì)段寄存器進(jìn)行運(yùn)算。操作數(shù),也不能對(duì)段寄存器進(jìn)行運(yùn)算。 這條指令對(duì)標(biāo)志位這條指令對(duì)標(biāo)志位SFSF、ZFZF、AFAF、PFPF、CFCF和和OFOF有影響。有影響。 例如:例如:SUB AL,20H SUB AX,BX SUB BP,CL2減法指令減法指令 (2)帶借位的減法指令帶借位的減法指令SBB 一般形式:一般形式:SBB OPRD1,OPRD2 功能:功能:OPRD1OPRD1-OPRD2-CF 這條指令與這條指令與SUB類(lèi)似,只是在兩個(gè)操作數(shù)相減時(shí),還類(lèi)似,只是在
52、兩個(gè)操作數(shù)相減時(shí),還要減去借位標(biāo)志要減去借位標(biāo)志CF的現(xiàn)行值。同的現(xiàn)行值。同ADC指令一樣,本指令指令一樣,本指令主要用于多字節(jié)操作數(shù)相減。主要用于多字節(jié)操作數(shù)相減。 (3)減減1指令指令DEC 一般形式:一般形式:DEC OPRD ; 功能:功能:OPRDOPRD-1 對(duì)指令的操作數(shù)減對(duì)指令的操作數(shù)減1,然后送回此操作數(shù)。,然后送回此操作數(shù)。 在相減時(shí),把操作數(shù)作為一個(gè)無(wú)符號(hào)二進(jìn)制數(shù)來(lái)對(duì)待。在相減時(shí),把操作數(shù)作為一個(gè)無(wú)符號(hào)二進(jìn)制數(shù)來(lái)對(duì)待。對(duì)操作數(shù)的要求和對(duì)標(biāo)志位的影響和對(duì)操作數(shù)的要求和對(duì)標(biāo)志位的影響和INC指令一樣。指令一樣。 例如:例如: DEC CX DEC BYTE PTRBX ;字節(jié)
53、減;字節(jié)減1 DEC WORD PTRSI ;字減;字減1 (4)求補(bǔ)指令求補(bǔ)指令NEG 一般形式:一般形式:NEG OPRD 功能:功能:OPRD0 - OPRD 對(duì)操作數(shù)取補(bǔ),即用零減去操作數(shù),再把結(jié)果送回操對(duì)操作數(shù)取補(bǔ),即用零減去操作數(shù),再把結(jié)果送回操作數(shù)。作數(shù)。 操作數(shù)可以是寄存器以及存儲(chǔ)器操作數(shù)。指令把操作操作數(shù)可以是寄存器以及存儲(chǔ)器操作數(shù)。指令把操作數(shù)視為補(bǔ)碼表示的帶符號(hào)數(shù)。之所以把數(shù)視為補(bǔ)碼表示的帶符號(hào)數(shù)。之所以把NEG指令稱(chēng)為求補(bǔ)指令稱(chēng)為求補(bǔ)指令,是因?yàn)橐粋€(gè)操作數(shù)取補(bǔ)碼就相當(dāng)于用零減去此操作指令,是因?yàn)橐粋€(gè)操作數(shù)取補(bǔ)碼就相當(dāng)于用零減去此操作數(shù)。數(shù)。 例如:例如: NEG AL
54、設(shè)設(shè)(AL)00111010B則取補(bǔ)后為則取補(bǔ)后為11000110B 若操作數(shù)為若操作數(shù)為80H(-128)或?yàn)榛驗(yàn)?000H(-32768)取補(bǔ),取補(bǔ),則操作數(shù)不變,但標(biāo)志則操作數(shù)不變,但標(biāo)志OF置置1,其它情況,其它情況OF置置0。 此指令影響標(biāo)志此指令影響標(biāo)志AF、CF、OF、PF、SF和和ZF。指令。指令的結(jié)果一般總是使標(biāo)志的結(jié)果一般總是使標(biāo)志CF=1。除非在操作數(shù)為零時(shí),才使。除非在操作數(shù)為零時(shí),才使CF=0。 (5)比較指令比較指令CMP 一般形式:一般形式:CMP OPRD1,OPRD2 功能:功能: OPRD1- OPRD2 比較指令完成兩個(gè)操作數(shù)相減,使結(jié)果反映在標(biāo)志位比較指
55、令完成兩個(gè)操作數(shù)相減,使結(jié)果反映在標(biāo)志位上,但并不送回結(jié)果上,但并不送回結(jié)果(即不帶回送的減法即不帶回送的減法)。指令對(duì)操作數(shù)的要求及對(duì)標(biāo)志位的影響與指令對(duì)操作數(shù)的要求及對(duì)標(biāo)志位的影響與SUB指令完全相指令完全相同。同。 例如:例如:CMP AL,100 CMP DX,DI CMP CX,DATABP CMP DATASI,AX 比較指令主要用于比較兩個(gè)數(shù)的大小關(guān)系。在比較指比較指令主要用于比較兩個(gè)數(shù)的大小關(guān)系。在比較指令之后,根據(jù)標(biāo)志位的狀態(tài)來(lái)判斷兩個(gè)操作數(shù)誰(shuí)大誰(shuí)小,令之后,根據(jù)標(biāo)志位的狀態(tài)來(lái)判斷兩個(gè)操作數(shù)誰(shuí)大誰(shuí)小,或是否相等?;蚴欠裣嗟?。 1)若兩者相等,相減以后結(jié)果為零,若兩者相等,相減
56、以后結(jié)果為零,ZF標(biāo)志為標(biāo)志為1,否,否則為則為ZF標(biāo)志為標(biāo)志為0。 2)如果是兩個(gè)無(wú)符號(hào)數(shù)如果是兩個(gè)無(wú)符號(hào)數(shù)(如如CMP OPRD1,OPRD2)進(jìn)行比較,則可以根據(jù)進(jìn)行比較,則可以根據(jù)CF標(biāo)志的狀態(tài)判斷兩數(shù)大小。若結(jié)標(biāo)志的狀態(tài)判斷兩數(shù)大小。若結(jié)果沒(méi)有產(chǎn)生借位果沒(méi)有產(chǎn)生借位(CF=0),顯然,顯然OPRD1OPRD2;若產(chǎn)生了;若產(chǎn)生了借位借位(即即CF1),則則OPRD1OPRD2。 如果是兩個(gè)帶符號(hào)數(shù)進(jìn)行比較如果是兩個(gè)帶符號(hào)數(shù)進(jìn)行比較,則,則 當(dāng)當(dāng)OF SF=0時(shí),被減數(shù)大于減數(shù);時(shí),被減數(shù)大于減數(shù); 當(dāng)當(dāng)OF SF=1時(shí),被減數(shù)小于減數(shù);時(shí),被減數(shù)小于減數(shù); 一般在比較指令之后都緊跟一
57、個(gè)條件轉(zhuǎn)移指令,可根一般在比較指令之后都緊跟一個(gè)條件轉(zhuǎn)移指令,可根據(jù)比較結(jié)果決定程序的走向。據(jù)比較結(jié)果決定程序的走向。 乘法指令分為無(wú)符號(hào)乘法指令和帶符號(hào)乘法指令兩種乘法指令分為無(wú)符號(hào)乘法指令和帶符號(hào)乘法指令兩種,隱含的目的操作數(shù)為隱含的目的操作數(shù)為AX與與DX,而源操作數(shù)由指令給出。,而源操作數(shù)由指令給出。指令可完成字節(jié)與字節(jié)相乘,結(jié)果為指令可完成字節(jié)與字節(jié)相乘,結(jié)果為16位數(shù),存放在位數(shù),存放在AX中;還可以完成字與字相乘,結(jié)果為中;還可以完成字與字相乘,結(jié)果為32位數(shù),高位數(shù),高16位存放位存放在在DX中,低中,低16位存放在位存放在AX中。中。 (1) 無(wú)符號(hào)乘法指令無(wú)符號(hào)乘法指令MU
58、L 一般格式:一般格式:MUL OPRD 功能:功能:完成字節(jié)與字節(jié)相乘、字與字相乘,且默認(rèn)的完成字節(jié)與字節(jié)相乘、字與字相乘,且默認(rèn)的操作數(shù)放在操作數(shù)放在AL或或AX中。中。 字節(jié)相乘,字節(jié)相乘,(AX)(OPRD)X(AL) 字相乘,字相乘,(DX:AX)(OPRD)X(AX)3乘法指令乘法指令 乘法法指令要求兩個(gè)操作數(shù)的字長(zhǎng)一樣,源操作數(shù)可以乘法法指令要求兩個(gè)操作數(shù)的字長(zhǎng)一樣,源操作數(shù)可以是寄存器和存儲(chǔ)器操作數(shù),但不能為立即數(shù)。是寄存器和存儲(chǔ)器操作數(shù),但不能為立即數(shù)。 當(dāng)乘積的高當(dāng)乘積的高8位或位或16位不為位不為0時(shí),則時(shí),則CF=OF=1,代表,代表AH或或DX中包含乘積的有效數(shù)字;否
59、則中包含乘積的有效數(shù)字;否則CF=OF=0。對(duì)其它標(biāo)志。對(duì)其它標(biāo)志位無(wú)影響。位無(wú)影響。 例如:例如: MOV AL,F(xiàn)IRST ;字節(jié)相乘;字節(jié)相乘 MUL SECOND ;結(jié)果為;結(jié)果為(AX)(FIRST)X(SECOND) MOV AX,THIRD ;字相乘;字相乘 MUL AX ;結(jié)果;結(jié)果(DX:AX)(THIRD)X(THIRD) MOV AL,90H CBW ;字?jǐn)U展;字?jǐn)U展AX=30H MOV CX,1000H MUL CX (2) 帶符號(hào)數(shù)乘法指令帶符號(hào)數(shù)乘法指令I(lǐng)MUL 一般格式:一般格式:IMUL OPRD 這是一條帶符號(hào)數(shù)的乘法指令,在功能上和這是一條帶符號(hào)數(shù)的乘法指令
60、,在功能上和MUL類(lèi)似。類(lèi)似。區(qū)別為當(dāng)結(jié)果的高半部分不是低半部分的符號(hào)位擴(kuò)展時(shí),區(qū)別為當(dāng)結(jié)果的高半部分不是低半部分的符號(hào)位擴(kuò)展時(shí),則則CF=OF=1,否則,否則CF=OF=0。 除法指令分為無(wú)符號(hào)除法指令和帶符號(hào)除法指令兩除法指令分為無(wú)符號(hào)除法指令和帶符號(hào)除法指令兩種,隱含了被除數(shù)種,隱含了被除數(shù)AX與與DX,而除數(shù)由指令給出。在除法,而除數(shù)由指令給出。在除法指令中,字節(jié)運(yùn)算時(shí)被除數(shù)在指令中,字節(jié)運(yùn)算時(shí)被除數(shù)在AX中;運(yùn)算結(jié)果商在中;運(yùn)算結(jié)果商在AL中,中,余數(shù)在余數(shù)在AH中。字運(yùn)算時(shí)被除數(shù)為中。字運(yùn)算時(shí)被除數(shù)為DX:AX構(gòu)成的構(gòu)成的32位數(shù),位數(shù),運(yùn)算結(jié)果商在運(yùn)算結(jié)果商在AX中,余數(shù)在中,余
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版商業(yè)地產(chǎn)抵押貸款登記服務(wù)合同3篇
- 二零二五年度酒店式物業(yè)前期托管服務(wù)合同3篇
- 二零二五年裝卸搬運(yùn)服務(wù)人員勞動(dòng)合同示范文本2篇
- 2025年水泥行業(yè)信用擔(dān)保購(gòu)銷(xiāo)補(bǔ)充協(xié)議3篇
- 2025年度水土保持生態(tài)修復(fù)規(guī)劃編制合同3篇
- 2025年物流公司正式員工離職補(bǔ)償及競(jìng)業(yè)限制合同3篇
- 2025年倉(cāng)儲(chǔ)積壓費(fèi)用合同
- 二零二五年度??谑新糜蚊袼拮赓U合同模板3篇
- 二零二五年股東股權(quán)買(mǎi)賣(mài)合同范本3篇
- 2025年度退休人員健康管理與康復(fù)服務(wù)合同3篇
- 圖書(shū)館前臺(tái)接待工作總結(jié)
- 衛(wèi)生院藥品管理制度
- 神經(jīng)外科進(jìn)修匯報(bào)課件
- 2024老年人靜脈血栓栓塞癥防治中國(guó)專(zhuān)家共識(shí)(完整版)
- 騰訊營(yíng)銷(xiāo)師認(rèn)證考試題庫(kù)(附答案)
- 鄰近鐵路營(yíng)業(yè)線施工安全監(jiān)測(cè)技術(shù)規(guī)程 (TB 10314-2021)
- 四年級(jí)上冊(cè)脫式計(jì)算100題及答案
- 資本市場(chǎng)與財(cái)務(wù)管理
- 河南近10年中考真題數(shù)學(xué)含答案(2023-2014)
- 八年級(jí)上學(xué)期期末家長(zhǎng)會(huì)課件
- 2024年大學(xué)試題(宗教學(xué))-佛教文化歷年考試高頻考點(diǎn)試題附帶答案
評(píng)論
0/150
提交評(píng)論