




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、YCF正版可修改PPT(中職)計算機原理模塊三教學課件模塊3 指令系統(tǒng)任務1 指令格式3.1.1 指令前綴3.1.2 指令中各字段的意義任務2 8086尋址方式3.2.1 數(shù)據(jù)類型3.2.2 尋址方式任務3 8086指令系統(tǒng)3.3.1 數(shù)據(jù)傳送類指令下一頁模塊3 指令系統(tǒng)3.3.2 地址傳送指令3.3.3 算術運算類指令3.3.4 控制轉(zhuǎn)移類指令3.3.5 處理器控制類指令3.3.6 邏輯運算與移位類指令任務4 匯編語言簡述3.4.1 匯編語言及語句格式3.4.2 匯編語言程序結(jié)構下一頁上一頁模塊3 指令系統(tǒng)3.4.3 常用偽指令3.4.4 宏指令3.4.5 條件匯編3.4.6 保護方式編程指
2、令3.4.7 與保護方式程序接口3.4.8 匯編語言程序上機過程3.4.9 順序程序3.4.10 循環(huán)程序3.4.11 分支程序設計下一頁上一頁模塊3 指令系統(tǒng)3.4.12 子程序設計3.4.13 DOS調(diào)用程序設計上一頁模塊3 指令系統(tǒng)從科學發(fā)展的角度,對Intel新增加的指令也進行了介紹。從每一條指令的功能和操作,可以進一步領會微機硬件的操作過程。模塊3將以Intel指令系統(tǒng)為背景對指令格式、指令功能進行描述,對從8086到Pentium的指令系統(tǒng)中的常用的一些指令有選擇地、分門別類地進行了說明。本模塊的重點是指令格式和指令的操作。返回任務1 指令格式指令由許多部分組成。在構成指令的這幾部
3、分中,只有操作碼部分是必須存在的,其余各部分則要根據(jù)指令操作所涉及的操作數(shù)類型以及操作數(shù)存放在何處等因素來決定取舍。任何一條機器指令都是由一組二進制代碼構成的,通常又被進一步分成操作碼部分和地址碼部分,一般的指令格式如圖3-1所示。Intel從8086到Pentium系列微處理器的指令都是由多字節(jié)組成的,一條指令可以由多個字節(jié)構成。指令的操作碼表示指令所執(zhí)行的操作,通常用指令的第一個字節(jié)表示。但由于一個字節(jié)所能表示的指令的條數(shù)有限,因此還會在指令的第二個字節(jié)中占用3位用作操作碼。在一條指令中,除操作碼之外的那些字節(jié)則被用來表示操作數(shù)的地址碼。從8086到80286都是16位的微處理器,所以,它
4、們的指令格式是16位的,如圖3-2所示。下一頁返回任務1 指令格式Intel從80386以后的各高檔微處理器都是32位的微處理器,它們所用的指令格式為如圖3-3所示的32位的指令格式。初看起來,從8086到Pentium的指令格式不盡相同,且比較復雜。但這些指令卻是很有規(guī)律的,而且16位的指令格式與32位的指令格式在80386以上的高檔微處理器上是兼容的。如果Intel的32位微處理器運行的是16位程序,則像32位的指令格式那樣,必須帶有指令前綴,且在實模式下進行操作,在32位的微處理器上按16位的指令格式運行。Pentium微處理器指令的一般格式如圖3-3所示,Pentium微處理器的所有指
5、令都是如圖3-3所示的指令格式的子集。由圖3-3可知,一條指令由可任選的指令前綴(可以是任何的次序),一個或兩個原操作碼字節(jié),有可能要用的地址說明符(由Mod R/M字節(jié)和按比例變址基地址SIB字節(jié)構成),一個偏移量(根據(jù)需要)和一個立即操作數(shù)數(shù)據(jù)字段(如果需要)等元素組成。下一頁返回上一頁任務1 指令格式3.1.1指令前綴指令前綴是置于指令前面的一個或多個字節(jié),它的作用是用來修改指令的操作。下面所列出的這4個指令前綴就是供應用程序使用的。1.指令前綴指令前綴并不經(jīng)常出現(xiàn),若出現(xiàn),則由鎖定前綴(LOCK)或一個重復前綴組成。2.段的超前前綴段的超前前綴用于顯式地指定本條指令將使用CS,SS,D
6、S,ES,FS,GS這6個段寄存器中的哪一個。用于代替Pentium微處理器為本指令生成默認的段寄存器。3.操作數(shù)大小前綴指令默認的操作數(shù)大小是16位或32位的,操作數(shù)大小前綴用來在32位和16位操作數(shù)之間進行切換。下一頁返回上一頁任務1 指令格式4.地址大小前綴在對存儲器進行尋址操作時,微處理器既可以使用16位地址,也可以使用犯位的地址。地址的大小決定了指令格式中偏移量的大小以及在計算有效地址時生成的偏移量的大小。3.1.2指令中各字段的意義1.操作碼字段操作碼字段占用1個或2個字節(jié)。由操作碼字段規(guī)定指令的操作性質(zhì),如操作數(shù)的類型(是字節(jié)、字、還是雙字)、操作數(shù)的傳送方向(是取自存儲器,還是
7、存入存儲器)以及寄存器編碼或符號擴展等。下一頁返回上一頁任務1 指令格式2. Mod R/M字段Mod R/M字段和SIB字段是尋址方式說明字段。Mod R/M是主尋址字節(jié),由這個字節(jié)指定操作數(shù)是寄存器操作數(shù)還是存儲器操作數(shù)。若是存儲器操作數(shù),則用這個字節(jié)中的一個字段來說明將要采用的尋址方式。其實,ModR/M字節(jié)由Mod字段(2位)、Reg/OPcode字段(3位)和R/ M字段(3位)這樣3個字段組成。Mod字段(2位)和R/M字段(3位)這5位可以構造成32個不同的值。具體地,它們可分別用于指示8個寄存器和24種變址方式;Reg/OPcode字段(3位)用來指定8個寄存器中的一個,或者用
8、來作為操作碼信息的3個補充位;R/M字段(3位)用來指定一個寄存器,指示出操作數(shù)的位置,或者用來作為尋址方式的一個組成部分,與Mod字段組合起來進行編碼。下一頁返回上一頁任務1 指令格式3.SIB字段SIB字段又被進一步分成3個字段,分別是SS字段(2位),Index字段(3位)和Base字段(3位)。SS字段在進行按比例變址操作時用來當比例因子,Index字段用來指示使用的是哪一個變址寄存器,而用Base字段則指示基地址寄存器。4.偏移量尋址方式一經(jīng)確定,偏移量也就隨之確定了,一個用8位、16位或32位的帶符號的整數(shù)表示的偏移量也就被放入了指令之中。5.立即數(shù)立即數(shù)就是包括在指令中的一個8位
9、、16位或32位的操作數(shù)。返回上一頁任務2 8086尋址方式在指令中,操作數(shù)或操作數(shù)的地址可用多種方式來表示,統(tǒng)稱為尋址方式。同一條指令可有不同的尋址方式,以說明不同的操作對象。3.2.1數(shù)據(jù)類型在計算機中,數(shù)據(jù)有多種類型。一種是指令處理的對象,稱為操作數(shù);另一種表示指令,稱為指令字;第三種是存儲器單元的序號,稱為地址。其中,操作數(shù)又分為兩種,一種是參加運算或由計算機處理的對象,稱為數(shù)據(jù)操作數(shù),簡稱為數(shù)據(jù);另一種用來表示轉(zhuǎn)移指令的目標地址,稱為轉(zhuǎn)移地址操作數(shù),簡稱為轉(zhuǎn)移地址。下一頁返回任務2 8086尋址方式1.數(shù)據(jù)操作數(shù)根據(jù)操作數(shù)存放的位置或者存放方式,常見的數(shù)據(jù)操作數(shù)有3種,一種是在指令中
10、直接給出,稱為立即數(shù);另一種存放在寄存器中,稱為寄存器數(shù)據(jù);第三種存放在存儲器中,稱為存儲器數(shù)據(jù)。2.轉(zhuǎn)移地址操作數(shù)轉(zhuǎn)移地址操作數(shù)用來表示轉(zhuǎn)移指令的目標地址。其表示方式可以在轉(zhuǎn)移指令中直接給出,也可以根據(jù)某一尋址方式經(jīng)計算后求得。3.2.2尋址方式根據(jù)操作數(shù)的兩大類型,8086微處理器的尋址方式也可分為兩大類型,即數(shù)據(jù)尋址方式和轉(zhuǎn)移地址尋址方式。下一頁返回上一頁任務2 8086尋址方式1.數(shù)據(jù)尋址方式數(shù)據(jù)尋址方式有以下7種類型。1)立即數(shù)尋址立即數(shù)是指令操作數(shù)域直接給出參加運算或者進行某種操作的數(shù)據(jù),又稱即時數(shù)。它跟在操作碼之后作為指令的一部分直接存放在代碼段中,有8位、16位等形式。對于16
11、位數(shù)據(jù),低字節(jié)在先,高字節(jié)在后。舉例如下。MOV AL,5執(zhí)行后(AL) =O5H,其示意如圖3-4(a)所示。又如,指令MOV AX,2790H執(zhí)行后(AX) =2790H,其示意如圖3-4(b)所示。下一頁返回上一頁任務2 8086尋址方式立即數(shù)只能是源操作數(shù),不能是目的操作數(shù)。這種尋址方式執(zhí)行速度快,但是靈活性差,主要用來對寄存器或存儲器賦值。2)寄存器尋址寄存器尋址是指令操作數(shù)域給出存放操作數(shù)的寄存器。對于8位操作數(shù),寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH;對于16位操作數(shù),寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP。舉例如下。MOV BX,AX其示
12、意如圖3-5所示。由于操作數(shù)在寄存器中,因此與存儲器尋址相比,執(zhí)行速度快。下一頁返回上一頁任務2 8086尋址方式3)直接尋址直接尋址是指令操作數(shù)域給出存放操作數(shù)地址的偏移量,也稱為有效地址,常用EA表示。如果操作數(shù)存放在數(shù)據(jù)段以外的其他段中,應在指令中指定段寄存器。直接尋址示意如圖3-6所示。舉例如下。MOV BX,2000 H設執(zhí)行前(DS) = 4000 H , EA = 2000 H , ( 42000 H ) = 1 FH , ( 42001 H ) = 75 H,則執(zhí)行后(BX)=751FH,其示意如圖3-7所示。在匯編語言中,也可以使用符號地址代替數(shù)值地址。舉例如下。MOV AX
13、,VALUE其中,VALUE表示存放操作數(shù)單元的符號地址。符號地址出現(xiàn)在指令中時,可省略方括號,例如,MOV AX,DATA。下一頁返回上一頁任務2 8086尋址方式4)寄存器間接尋址寄存器間接尋址是指令操作數(shù)域給出存放操作數(shù)地址偏移量的寄存器。其寄存器主要有BX ,BP,SI和DI。如果沒有特別說明,使用寄存器BX ,SI ,DI尋址時默認操作數(shù)在數(shù)據(jù)段中,即段寄存器DS。使用BP尋址時,默認操作數(shù)在堆棧段中,即段寄存器SS。物理地址的生成如圖3-8所示。舉例如下。MOV AX,BX設執(zhí)行前(DS)=3000H, ( BX)=3000H,則執(zhí)行后(AX) =2C7DH,其示意如圖3-9所示。
14、又如,指令MOV AX,ES : SI,其段寄存器為ES,表示數(shù)據(jù)在附加段中。下一頁返回上一頁任務2 8086尋址方式5)寄存器相對尋址寄存器相對尋址是指令操作數(shù)域給出存放基地址的基址寄存器和一個偏移量,基地址與偏移量相加,作為操作數(shù)地址的偏移地址,即有效地址EA。段地址左移4位,與有效地址相加,生成20位的物理地址,如圖3-10所示。舉例如下。MOV AX,DATADI設執(zhí)行前(DS)=3000H, (DI) =2000H, DATA =300H,則執(zhí)行后(AX) =201AH,其意如圖3-11所示。6)基址加變址尋址基址加變址尋址是指令操作數(shù)域給出一個存放基地址的基址寄存器和一個存放變址基
15、值的變址寄存器,兩個寄存器中的數(shù)據(jù)相加,作為操作數(shù)的偏移地址,即有效地址EA?;芳拇嫫髦饕蠦X ,BP,變址寄存器主要有SI和DI。其中,基址寄存器BX默認段寄存器DS基址寄存器BP默認段寄存器SS,允許使用段跨越,其示意如圖3-12所示。下一頁返回上一頁任務2 8086尋址方式舉例如下。MOV AX,BXDI或MOV AX,BX+DI設執(zhí)行前(DS) = 2100H, ( BX) = 0158H, ( DI) =10A5H,則執(zhí)行后(AX) =1234H,其示意如圖3-13所示。7)相對基址加變址尋址相對基址加變址尋址是指令操作數(shù)域給出的是一個存放基地址的基址寄存器、一個存放變址基值的變
16、址寄存器和一個偏移量,兩個寄存器中的數(shù)據(jù)及偏移量相加,作為操作數(shù)的偏移地址,即有效地址EA?;芳拇嫫髦饕蠦X , BP,變址寄存器主要有SI和DI。其中,基址寄存器BX默認段寄存器DS,基址寄存器BP默認段寄存器SS。舉例如下。下一頁返回上一頁任務2 8086尋址方式MOV AX,MASKBXDIMOV AX,MASKBX+DIMOV AX,MASK+BX+DI設執(zhí)行前(DS) =3000H, ( BX) =2000H, ( DI) =1000H, MASK= 0250H,則執(zhí)行后(AX)= 4675 H,其示意如圖3-14所示。這種尋址方式為數(shù)組、表格及堆棧的訪問提供了很大的方便。2.轉(zhuǎn)
17、移地址尋址方式這種尋址方式主要用來確定轉(zhuǎn)移指令和子程序調(diào)用指令CALL的目標地址,其目標地址可能在當前代碼段內(nèi),也可能在當前代碼段外,故有4種方式。下一頁返回上一頁任務2 8086尋址方式1)段內(nèi)相對尋址段內(nèi)相對尋址是指程序的轉(zhuǎn)移地址由指令指針I(yè)P的當前值與指令中給出的8位或16位偏移量相加而生成。偏移量是一個帶符號的數(shù),用補碼表示。其中8位偏移量稱為段內(nèi)短轉(zhuǎn)移SHORT,轉(zhuǎn)移范圍為-128+127 ;16位偏移量稱為段內(nèi)近轉(zhuǎn)移NEAR,轉(zhuǎn)移范圍為-32768+32767。其示意如圖3-15所示。段內(nèi)相對尋址的特點是代碼段寄存器CS的值保持不變,偏移量可以是8位或者16位。指令格式如下。JMP
18、 SHORT OPR ;IP (IP)+8位偏移量JMP NEAR PTR OPR ;IP (IP)+16位偏移量下一頁返回上一頁任務2 8086尋址方式2)段內(nèi)間接尋址段內(nèi)間接尋址是指轉(zhuǎn)移指令的偏移地址存放在一個16位的寄存器或存儲器單元中,用來取代IP中的當前值。這個寄存器或存儲器單元可由數(shù)據(jù)尋址方式中除立即數(shù)之外的任何一種方式得到。其示意如圖3-16所示。段內(nèi)間接尋址的特點仍是CS的值不變,IP的值由一個16位寄存器或存儲器單元提供的數(shù)所取代。舉例如下。JMP BX ;把寄存器BX中的數(shù)送入指令指針I(yè)P中JMP WORD PTRBXSI ;按照基址加變址的方式獲取操作數(shù),送入IP中下一頁
19、返回上一頁任務2 8086尋址方式3)段間直接尋址段間直接尋址是在指令中直接給出轉(zhuǎn)移的16位段地址和16位偏移地址,分別送入代碼段寄存器CS和指令指針寄存器IP中。舉例如下。JMP FAR PTR NEXTSUB段間尋址由FAR來說明,其中NEXTSUB是符號地址,在指令中直接給出,包括轉(zhuǎn)移目標的偏移地址和段地址。4)段間間接尋址在段間間接尋址方式中,轉(zhuǎn)移地址存放在存儲器中的兩個連續(xù)字單元中,其中第一個字是偏移地址,第二個字是段地址。存儲器單元地址可用數(shù)據(jù)尋址方式中除立即數(shù)和寄存器直接尋址以外的任何一種尋址方式來確定,如圖3-17所示。舉例如下。下一頁返回上一頁任務2 8086尋址方式JMP
20、DWORD PTRBX ;由寄存器BX確定連續(xù)兩個存儲器單元,取出其中的數(shù)據(jù)分別送入IP和CS中JMP DWORD PTRBP+SI+100 H;由BP+SI+100H確定連續(xù)兩個存儲器單元,取出其中的數(shù)據(jù)分別送入IP和CS中返回上一頁任務3 8086指令系統(tǒng)8086指令系統(tǒng)是80X86/Pentium的基本指令集。指令的操作數(shù)可以是8位或16位操作數(shù),偏移地址是16位地址。8086指令系統(tǒng)按功能可分為如下6大類指令。(1)數(shù)據(jù)傳送類指令。(2)算術運算類指令。(3)邏輯運算與移位類指令。(4)串操作類指令。(5)控制轉(zhuǎn)移類指令。(6)處理器控制類指令。學習指令時要注意掌握各類指令的書寫格式、
21、指令功能、尋址方式、指令對標志位的影響等方面。全面準確地理解每條指令的功能和用法是編寫程序的關鍵。下一頁返回任務3 8086指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令是計算機中最基本、最重要,也是最常用的一種指令,其功能是把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲單元。此類指令除了SAHF和POPF外均不影響標志寄存器的內(nèi)容。按照傳送的內(nèi)容和功能的不同,可將數(shù)據(jù)傳送指令分為3組,如表3-1所示。其中dst表示目的操作數(shù),src表示源操作數(shù)。1.MOV指令MOV指令的源操作數(shù)可以是存儲器、通用寄存器、段寄存器以及立即數(shù),目的操作數(shù)可以是存儲器、通用寄存器與段寄存器。圖3-18描繪了MOV指令可以
22、傳送的路徑。下一頁返回上一頁任務3 8086指令系統(tǒng)表3-2列出了常用的MOV指令類型。表中使用了以下含義的通用符號。(1)imm表示立即數(shù)。(2)reg表示通用寄存器。(3)r/m表示寄存器或者存儲器。(4)sreg表示段寄存器。以上符號也適用于IA通用指令集中的其他指令。由圖3-18和表3-2中可以看出必須注意以下幾點問題。存儲器之間不能互相傳送,即源與目的兩個操作數(shù)不能同時為存儲器。段寄存器之間不能互相傳送,即源與目的兩個操作數(shù)不能同時為段寄存器。下一頁返回上一頁任務3 8086指令系統(tǒng)立即數(shù)不能直接傳送給段寄存器,必須借助通用寄存器實現(xiàn)。例如,將55 H裝入DS段寄存器就應使用以下2條
23、指令。MOV AX,55HMOV DS,AX在匯編語言編程的基本規(guī)則中必須保持源與目的兩個操作數(shù)的類型一致,即兩者都是16位,或者都是32位。由于常數(shù)是不帶類型的,因而當CPU已知目的操作數(shù)的類型時就會自動擴展常數(shù)的長度。例如,MOV AX,68是合法的,此時AH中裝0。但當CPU不能確定目的操作數(shù)類型時就無法處理常數(shù),例如,MOV BX , 68是非法的。此時的目的操作數(shù)只知是由BX指定了首地址的存儲器數(shù)據(jù),然而是字節(jié)還是字或者其他數(shù)據(jù)類型都未確定,因此必須在指令的目的操作數(shù)前加入類型前綴。舉例如下。下一頁返回上一頁任務3 8086指令系統(tǒng)MOV WORD PTRBX,68 ;(BX) 68
24、,(BX+1) 00MOV DWORD PTRBX,68 ;(BX) 68,(BX+1/2/3) 00表3-2中的3條串操作指令:MOVSB是字節(jié)類型串操作;MOVSIV是字類型串操作;MOVSD是雙字類型串操作。它們均是專門針對數(shù)據(jù)塊的傳送而設計的,執(zhí)行該指令時CPU將自動發(fā)生以下一系列操作。將由DS:SI指定的源存儲器數(shù)據(jù)傳送到由ES;DI指定的目的存儲器中。源地址指向下一個單元,對于MOVSB是SI 1SI,對于MOVSW是SI 2 SI,對于MOVSD是SI 4 SI,具體為加法還是減法則取決于標志寄存器中的方向標志位D。D =0時做加法,地址遞增;D=1時做減法,地址遞減。下一頁返回
25、上一頁任務3 8086指令系統(tǒng)目的地址指向下一個單元,對于MOVSB是DI 1 DI,對于MOVSW是DI 2 DI,對于MOVSD是DI 4 DI,具體為加法還是減法同上述源地址的方向同步。為了達到對數(shù)據(jù)塊重復操作的目的,應在該指令前加上重復前綴指令REP : REPMOVSB;字節(jié)類型重復串操作的指令如下。REP MOVSW ;字類型重復串操作RFP MOVSD ;雙字類型重復串操作執(zhí)行該指令除發(fā)生上面已經(jīng)介紹的3個自動操作外,還會使計數(shù)寄存器CX或ECX自動減1,并判斷它的內(nèi)容是否減到了零,若未到0則會重復執(zhí)行該條指令,直到減為0時才退出重復轉(zhuǎn)入下條指令。下一頁返回上一頁任務3 8086
26、指令系統(tǒng)例3-1假設LISTA與LISTB為兩個字節(jié)類型數(shù)據(jù)存儲器緩沖區(qū),各有100個字節(jié)的空間,試編寫將LISTA緩沖區(qū)數(shù)據(jù)復制到LISTB緩沖區(qū)的程序段。CLD ;設D =0,選擇地址遞增方向MOV SI , OFFSET LISTA;指向源塊的首地址MOV DI , OFFSET LISTB;指向目的塊的首地址MOV CX ,100;循環(huán)計數(shù)指針,100個字節(jié)REP MOVSB;循環(huán)傳送,直至CX =0第2條指令在變量前加了前綴OFFSET,它表示將緩沖區(qū)LISTA的偏移量首地址傳送到SI寄存器。同理,第3條指令表示將緩沖區(qū)LISTB的偏移量首地址傳送到DI寄存器。從而使得CPU可順利執(zhí)
27、行MOV SB指令,由DS ; SI指定的源地址向由ES;DI指定的目的地址傳送數(shù)據(jù)。下一頁返回上一頁任務3 8086指令系統(tǒng)3.3.2地址傳送指令地址傳送指令有LDS , LES , LFS , LGS , LSS與LEA 6條指令,前5條用于裝載一個邏輯地址,通用格式如下。LDS reg,r/ mLES reg,r/ mLFS reg,r/ mLGS reg,r/ mLSS reg,r/ m其中指令助記符中已經(jīng)隱含了裝載的段地址分別為DS ,ES ,FS,GS和SS寄存器,而目的操作數(shù)reg就是裝載偏移量地址的寄存器,源操作數(shù)r/m則指定被裝載地址存放位置的首地址。下一頁返回上一頁任務3
28、8086指令系統(tǒng)表3 -3中列舉了它們的指令例句,可見這5條指令都是將存儲器中4個字節(jié)數(shù)據(jù)的低位字裝入通用寄存器作地址偏移量,高位字裝入相應的段寄存器。這是IA指令體系中的一個通用規(guī)則,即當存儲器中的內(nèi)容表示地址時則有以下規(guī)定。(1)當存儲器變量為2個字節(jié)時,僅表示地址偏移量。(2)當存儲器變量為4個字節(jié)時,則表示段地址和地址偏移量。(3)存放的格式遵循數(shù)據(jù)存放的普遍規(guī)定,即高端地址放高位字節(jié),低端地址放低位字節(jié)。設存儲器變量的首地址為N,則可具體描述如下。下一頁返回上一頁任務3 8086指令系統(tǒng)N+3單元放段地址高8位。N+2單元放段地址低8位。N+1單元放偏移量高8位。N+0單元放偏移量低
29、8位。除了以上5條裝載指令外,LEA也是一條裝載地址指針的指令,通用格式為LEA reg ,mem。注意:它與以上5條指令不同,這里不是裝載指定存儲器中的內(nèi)容,而是直接將源操作數(shù)mem的偏移量地址裝至reg寄存器,見表3-3中的指令舉例與說明。下一頁返回上一頁任務3 8086指令系統(tǒng)3.3.3算術運算類指令8086的算術運算類指令包括加、減、乘、除4種基本運算指令,以及進行BCD碼十進制數(shù)運算的指令。算術運算指令涉及無符號數(shù)和帶符號數(shù)兩種類型的數(shù)據(jù)。加減運算采取同一套指令,乘除運算有各自不同的指令。加減法運算在執(zhí)行過程中有可能產(chǎn)生溢出,對于無符號數(shù),如果加法運算最高位向前產(chǎn)生進位,減法運算最高
30、位向前有借位,則表示出現(xiàn)溢出,用CF標志位可檢測無符號數(shù)是否溢出。對于帶符號數(shù),采用補碼運算,符號位參加運算,溢出則表示運算結(jié)果發(fā)生錯誤,用OF標志位可檢測帶符號數(shù)是否溢出。下一頁返回上一頁任務3 8086指令系統(tǒng)算術運算指令會影響標志位,其規(guī)則如下。運算結(jié)果向前產(chǎn)生進位或借位時,CF=1最高位向前進位和次高位向前進位不同時,0F=1若運算結(jié)果為0,ZF =1若運算結(jié)果最高位為1,SF=1若運算結(jié)果中有偶數(shù)個1,PF=1算術運算指令有20條,分為5種類型,可對4種類型的數(shù)據(jù)進行運算,即無符號二進制數(shù)、帶符號二進制數(shù)、無符號壓縮型BCD碼和無符號非壓縮型BCD碼。二進制數(shù)可以是8位或16位,十進
31、制數(shù)以字節(jié)為單位參加運算。對于單操作數(shù)指令不允許使用立即數(shù);對于雙操作數(shù)指令至少有一個操作數(shù)在寄存器中,另一個操作數(shù)可以使用任意尋址方式;立即數(shù)不能作為目的操作數(shù)。運算結(jié)果影響狀態(tài)標志位。下一頁返回上一頁任務3 8086指令系統(tǒng)加法指令1)加法指令ADD格式:ADD DST, SRC功能:DST (DST)+(SRC)。說明:源/目的操作數(shù)地址如圖3-19所示,其中目的操作數(shù)不能使用立即數(shù),兩存儲器單元之間不能直接進行加法運算,允許段跨越;源/目的操作數(shù)位數(shù)必須相同,可以是8位或者16位。 ADD指令不區(qū)分兩個加數(shù)是無符號數(shù)還是帶符號數(shù),運算結(jié)果的二進制形式相同,影響狀態(tài)標志位。舉例如下。下一
32、頁返回上一頁任務3 8086指令系統(tǒng)ADD AL,25H ;AL寄存器指明操作是字節(jié)操作ADD AL, BX ;AL寄存器指明操作是字節(jié)操作ADD WORD PTR BX ,12H ;WORD PTR指明內(nèi)存操作數(shù)為字操作數(shù)又如指令ADD AX,BX,設執(zhí)行前(AX) = 1234H, ( BX)=0F7C9H,則執(zhí)行后(AX)=09FDH,OF=0,SF=0,ZF=0,AF=0,PF=0,CF=1。2)帶進位加法指令ADC格式:ADC DST,SRC功能: DST (DST)+(SRC)。說明:進位位CF的值加到兩數(shù)和的最低位,其他與ADD指令相同。 下一頁返回上一頁任務3 8086指令系統(tǒng)
33、例3-2試編寫程序,計算雙字4A750000H +78912365H之和。解:雙字操作,由寄存器DX和AX組成32位累加器,先用ADD指令進行低字運算,再用ADC指令進行高字運算。其程序如下。MOV AX,OOOOHMOV DX,4A75HADD AX ,2365 HADC DX,7891H3)加1指令INC格式:INC DST功能:DST (DST)+1。下一頁返回上一頁任務3 8086指令系統(tǒng)說明:操作數(shù)可以是除立即數(shù)之外的其他尋址方式,可以是字節(jié),也可以是字,不區(qū)分無符號數(shù)還是帶符號數(shù)允許段跨越;影響除CF之外的其他狀態(tài)標志位。2.減法指令1)減法指令SUB格式:SUB DST,SRC功
34、能:DST (DST)-(SRC)。說明:源/目的操作數(shù)地址如圖3-19所示,目的操作數(shù)不能使用立即數(shù),兩存儲器單元不能直接進行減法運算,允許段跨越;源/目的操作數(shù)位數(shù)必須相同,可以是8位,也可以是16位。下一頁返回上一頁任務3 8086指令系統(tǒng) SUB指令不區(qū)分操作數(shù)是無符號數(shù)還是帶符號數(shù),運算結(jié)果的二進制形式相同,影響狀態(tài)標志位。舉例如下。SUB AX,BX設執(zhí)行前(AX) =578FH, ( DS) = 1000H, ( BX) -2000H, ( 12000H) -7890H,則執(zhí)行后(AX)=ODEFFH,OF=0,SF=1,ZF=0,AF=0,PF=1,CF=1。2)帶借位減法指令
35、SBB格式:SBB DST,SRC功能:DST (DST)-(SRC)-CF。說明:被減數(shù)減去減數(shù),再減進位位CF的值,其他與減法指令SUB相同。下一頁返回上一頁任務3 8086指令系統(tǒng)3)減1指令DEC格式:DEC DST功能:DST (DST)-1。說明:同INC指令。例如,指令DEC CX。4)求補指令NEG格式:NEG DST功能:DSTO-(DST)。說明:操作數(shù)同INC指令,影響所有狀態(tài)標志位,操作數(shù)為零時CF=1,其他情況下CF=0。例如,指令NEG AX,設執(zhí)行前(AX) = OFFFFH,則執(zhí)行后(AX) =OOOIH,OF=O,SF=0,ZF=0,AF=1,PF=0,CF=
36、1。下一頁返回上一頁任務3 8086指令系統(tǒng)5)比較指令CMP格式:CMP DST, SRC功能:(DST)-(SRC)置狀態(tài)標志位。說明:進行減法運算,不送結(jié)果,僅置狀態(tài)標志位。3.乘法指令1)無符號數(shù)乘法指令MUL格式:MUL SRC功能:AX (AL) x (SRC) ;字節(jié)操作 DX,AX (AX)x(SRC) ;字操作下一頁返回上一頁任務3 8086指令系統(tǒng)說明:源/目的操作數(shù)均為無符號數(shù)。目的操作數(shù)必須是累加器AX或AL;源操作數(shù)可以是除立即數(shù)之外的其他尋址方式,允許段跨越。除OF和CF之外的狀態(tài)標志無定義;執(zhí)行MUL指令后,若乘積的高字/高字節(jié)為0,則OF=CF=O;否則,OF=
37、CF=1。例3-3將ADDR1和ADDR2兩個字節(jié)單元的無符號數(shù)相乘,乘積存放在ADDR3字單元中。解:使用無符號指令,程序如下。MOV AL,ADDR1MUL ADDR2MOV ADDR3,AX下一頁返回上一頁任務3 8086指令系統(tǒng)2)帶符號數(shù)乘法指令IMUL格式:IMUL SRC功能:操作數(shù)為帶符號數(shù),其他與MUL相同。說明:源/目的操作數(shù)均為帶符號數(shù)。同MUL指令。除OF和CF之外的標志無定義;執(zhí)行IMUL指令后,若乘積的高字/高字節(jié)是符號擴展位時,則OF=CF=O;否則,OF=CF=1。4.除法指令1)無符號數(shù)除法指令DIV格式:DIV SRC功能:AL (AX) /(SRC)的商A
38、H 余數(shù); AX (DX,AX)/(SRC)的商DX 余數(shù)。下一頁返回上一頁任務3 8086指令系統(tǒng)說明:進行字節(jié)運算時,16位的被除數(shù)存放在AX中,進行字運算時32位的被除數(shù)存放在DX,AX中;若被除數(shù)的長度不是除數(shù)的2倍,被除數(shù)高位補0;除數(shù)可以是除立即數(shù)之外的其他尋址方式,允許段跨越。所有狀態(tài)標志位無定義。2)帶符號數(shù)除法指令IDIV格式:IDIV SRC功能:操作數(shù)是帶符號數(shù),其他與DIV相同。說明:被除數(shù)的長度不是除數(shù)的2倍時,被除數(shù)高位符號擴展,其他與DIV指令相同。下一頁返回上一頁任務3 8086指令系統(tǒng)例3一4設(AX) =0400H, ( BL) =OB4H,執(zhí)行指令DIV
39、BL和IDIV BL。解:執(zhí)行指令DIV BL。由于(AX)和(BL)為無符號數(shù),因此指令DIV BL執(zhí)行后,結(jié)果如下。(AL)=OS H AL商(AH)=7CH AH 余數(shù)執(zhí)行指令IDIV BL。由于(AX)和(BL)為帶符號的補碼數(shù),因此指令IDIV BL執(zhí)行后,結(jié)果如下。(AL)=0 F3 H=-13D AL 商(AH)=24H =36D AH 余數(shù)在進行除法運算時,若商溢出,直接轉(zhuǎn)入0型中斷處理。3 ) CBW符號位擴展指令下一頁返回上一頁任務3 8086指令系統(tǒng)格式:CBW字節(jié)轉(zhuǎn)換為字;CWD字轉(zhuǎn)換為雙字。功能:字節(jié)擴展AH(AL)的符號位; 字擴展DX(AX)的符號位。說明:源/目
40、操作數(shù)地址隱含為AH與AL,DX與AX,不影響狀態(tài)標志位。5.十進制調(diào)整指令BCD碼數(shù)據(jù)按一般算術運算指令操作后,必須用調(diào)整指令對其進行修正,該類指令共有6條。1)非壓縮BCD碼加法調(diào)整指令AAA格式:AAA功能:AL把AL中的和調(diào)整成非壓縮BCD碼格式AH (AH)+調(diào)整產(chǎn)生的進位值。下一頁返回上一頁任務3 8086指令系統(tǒng)說明:兩加數(shù)為非壓縮BCD碼,在執(zhí)行指令ADD ,ADC ,INC之后結(jié)果在寄存器AL中;影響狀態(tài)標志CF和AF,其余標志位無定義。舉例如下。ADD AL,BLAAA2)壓縮BCD碼加法調(diào)整指令DAA格式:DAA功能:AL把AL中的和調(diào)整成壓縮BCD碼格式。說明:兩加數(shù)為
41、壓縮BCD碼,在執(zhí)行指令ADD ,ADC , INC之后結(jié)果在寄存器AL中;狀態(tài)標志OF無定義,影響其余狀態(tài)標志位。舉例如下。ADD AL,BLDAA下一頁返回上一頁任務3 8086指令系統(tǒng)3)非壓縮BCD碼減法調(diào)整指令AAS格式:AAS功能:AL把AL中的差調(diào)整成非壓縮BCD碼格式; AH (AH)調(diào)整產(chǎn)生的借位。說明:兩操作數(shù)為非壓縮BCD碼,執(zhí)行指令SUB,SBB,DEC之后結(jié)果在寄存器AL中;影響狀態(tài)標志CF和AF,其余標志位無定義。4)壓縮BCD碼減法調(diào)整指令DAS格式:DAS功能:(AL) 把AL中的差調(diào)整成壓縮BCD碼格式。說明:兩操作數(shù)為壓縮BCD碼,執(zhí)行指令SUB,SBB,D
42、EC之后結(jié)果在寄存器AL中;狀態(tài)標志OF無定義,影響其余標志位。下一頁返回上一頁任務3 8086指令系統(tǒng)5)非壓縮BCD碼乘法調(diào)整指令AAM格式:AAM功能:AX把AL中的乘積調(diào)整成非壓縮BCD碼格式。說明:兩乘數(shù)為非壓縮BCD碼,執(zhí)行指令MUL之后結(jié)果在寄存器AL中;調(diào)整后十位數(shù)在AH中,個位數(shù)在AL中;影響狀態(tài)標志SF,ZF和PF,其余標志位無定義。舉例如下。MUL AL,BLAAM6)非壓縮BCD碼除法調(diào)整指令AAD格式:AAD功能:AL 10 x (AHD+(AL) AH 0說明:下一頁返回上一頁任務3 8086指令系統(tǒng)在指令DIV之前使用,被除數(shù)是兩位非壓縮BCD碼,存放在AX中,A
43、H中存放十位數(shù)字,AL中存放個位數(shù)字,且高4位均為0;除數(shù)是一位非壓縮的BCD碼,高4位為。;調(diào)整結(jié)果在AL中,AH中清0;執(zhí)行其后的DIV指令后,AL中為一位非壓縮BCD碼的商,AH中為一位BCD碼的余數(shù)。影響狀態(tài)標志SF,ZF和PF,其余OF,CF和AF標志位無定義。3.3.4控制轉(zhuǎn)移類指令一般情況下,程序是按指令順序地逐條執(zhí)行的,但實際上經(jīng)常需要改變程序的執(zhí)行流程。控制轉(zhuǎn)移類指令用來改變程序執(zhí)行的方向,即修改IP和CS的值。下一頁返回上一頁任務3 8086指令系統(tǒng)按轉(zhuǎn)移位置可將轉(zhuǎn)移指令分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。若指令給出改變IP中內(nèi)容的信息,轉(zhuǎn)移的目標位置和轉(zhuǎn)移指令在同一個代碼段,則稱為段
44、內(nèi)轉(zhuǎn)移;若指令給出改變IP中內(nèi)容的信息,又給出改變CS中內(nèi)容的信息,轉(zhuǎn)移的目標位置和轉(zhuǎn)移指令不在同一個代碼段,則稱為段間轉(zhuǎn)移。根據(jù)轉(zhuǎn)移指令的功能,可分為無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)控制指令、子程序調(diào)用和返回指令等。1.無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移(JMP)指令中作為轉(zhuǎn)移目的地址的操作數(shù),在匯編語言格式中可直接使用符號地址。在匯編之后可得到相應的段地址及偏移量。JMP指令控制處理機轉(zhuǎn)移到指定的位置去執(zhí)行程序,指令中必須給出轉(zhuǎn)移位置的目標地址,通常有如下5種形式。下一頁返回上一頁任務3 8086指令系統(tǒng)(1) JMP SHORT opr表示段內(nèi)直接短轉(zhuǎn)移指令。(2) JMP NEAR PTR o
45、pr表示段內(nèi)直接近轉(zhuǎn)移指令。(3) JMP WORD PTR opr表示段內(nèi)間接轉(zhuǎn)移指令。(4) JMP FAR PTR opr表示段間直接轉(zhuǎn)移指令。(5) JMP DWORD PTR opr表示段間間接轉(zhuǎn)移指令。opr為轉(zhuǎn)移目標地址,可直接使用符號地址(標號)。屬性運算符SHORT指示匯編程序?qū)⒎柕刂穮R編成8位偏移量,指令執(zhí)行時,轉(zhuǎn)移的目標地址為當前的IP值與指令中給定的8位偏移量之和。屬性運算符NEAR PTR指示匯編程序?qū)⒎柕刂穮R編成16位偏移量,指令執(zhí)行時,轉(zhuǎn)移的目標地址為當前的IP值與指令中給定的16位偏移量之和。下一頁返回上一頁任務3 8086指令系統(tǒng)偏移地址緊跟在指令操作碼之
46、后,由匯編程序計算得出。有效地址EA的值是由叩:的尋址方式來決定的。若是寄存器尋址,指令中直接給出寄存器號,寄存器中的內(nèi)容送到IP中;若是存儲器尋址,按存儲器尋址方式計算出有效地址和物理地址,用這個物理地址去讀取內(nèi)存中的數(shù)據(jù)送給IP指針。例3-5執(zhí)行段內(nèi)間接轉(zhuǎn)移指令:JMP WORD PTR BX .分析:若給定(IP)=0012H, ( BX) -O100H, ( DS) =2000H, (20100H) -80H, (20101H)=OOH,目標地址為存儲器尋址。有效地址計算:EA=(BX) -O100H。物理地址計算:PA = DS x lOH + EA = 20100H。所以,指令執(zhí)行
47、后(IP) -0080Ho如果是段間直接轉(zhuǎn)移,則執(zhí)行操作:IPopr的偏移地址;CS opr所在段的段地址。下一頁返回上一頁任務3 8086指令系統(tǒng)如果是段間間接轉(zhuǎn)移,則執(zhí)行操作:IP (EA) ;CS (EA +2) . EA的值是由opr的尋址方式來決定的,按尋址方式計算出有效地址和物理地址,用物理地址去讀取內(nèi)存中連續(xù)的兩個字數(shù)據(jù),其中低位字數(shù)據(jù)送給IP,高位字數(shù)據(jù)送給CS.例3-6執(zhí)行段I司I司接轉(zhuǎn)移指令:JMP DWORD PTRBX+20H。分析:若給定(CS) =3000H, ( IP) =0012H, ( BX)=O100H, ( DS) =2000H, (20120H)=A0
48、H,(20121 H)=00 H,(20122 H)=00 H,(20123 H)=50H。有效地址計算:EA=(BX) +20H =0120H。物理地址計算:PA = DS x lOH + EA=20120 H。指令執(zhí)行后:(IP)=00A0H, (CS)=5000H.2.條件轉(zhuǎn)移指令8086指令系統(tǒng)的條件轉(zhuǎn)移指令以某些標志位的狀態(tài)或有關標志位的邏輯運算結(jié)果作為下一頁返回上一頁任務3 8086指令系統(tǒng)依據(jù),以此決定是否轉(zhuǎn)移。這些標志位通常由條件轉(zhuǎn)移指令的上一條指令所設置。條件轉(zhuǎn)移指令將根據(jù)這些標志位的狀態(tài),判斷是否滿足對應的測試條件。若滿足條件,則轉(zhuǎn)移到指令指定的地方,否則繼續(xù)執(zhí)行條件轉(zhuǎn)移指
49、令之后的指令。此外還有無符號數(shù)比較轉(zhuǎn)移指令和帶符號數(shù)比較轉(zhuǎn)移指令兩類,這兩類指令一般在CMP指令后使用。條件轉(zhuǎn)移指令的助記符、指令名稱、轉(zhuǎn)移條件如表3-4所示。下一頁返回上一頁任務3 8086指令系統(tǒng)例3-7已知在內(nèi)存中有兩個無符號字節(jié)數(shù)據(jù)X1和X2,比較兩個數(shù)是否相等,若相等,則將RESULT單元置1,否則置0。其程序段如下。MOV AL,X1 ;將第1個數(shù)取出送至AL中CMP AL,X2 ;和第2個數(shù)進行比較JZ NEXT ;相等則轉(zhuǎn)到NEXT位置執(zhí)行MOV RESULT,0 ;否則,將RESULT單元置。JMP EXIT ;然后轉(zhuǎn)到EXIT位置NEXT:MOV RESULT,1 ;將RE
50、SULT單元置1EXIT:HLT下一頁返回上一頁任務3 8086指令系統(tǒng)例3-8已知在內(nèi)存中有兩個無符號字節(jié)數(shù)據(jù)NUM1和NUM2,找出其中的最大數(shù)送到MAX單元。其程序段如下。MOV AL,NUM1 ;將第1個數(shù)取出送到AL中CMP AL,NUM2 ;和第2個數(shù)進行比較JA NEXT ;第1個數(shù)大于第2個數(shù)則轉(zhuǎn)到NEXT位置MOV AL,NUM2 ;否則將第2個數(shù)取出送到AL中NEXT:MOV MAX,AL ;AL中為最大數(shù)送到MAX單元本題若改為帶符號數(shù),則程序段如下。MOV AL,NUM1;將第1個數(shù)取出送到AL中下一頁返回上一頁任務3 8086指令系統(tǒng)CMP AL,NUM2 ;和第2個
51、數(shù)進行比較JG NEXT ;第1個數(shù)大于第2個數(shù)則轉(zhuǎn)到NEXT位置MOV AL,NUM2 ;否則將第2個數(shù)取出送到AL中NEXT:MOV MAX,AL ;AL中為最大數(shù),送到MAX單元3.循環(huán)控制指令循環(huán)程序是一種常用的程序結(jié)構,為了加快對循環(huán)程序的控制,8086系統(tǒng)專門設置了一組循環(huán)控制指令,如表3-5所示,循環(huán)計數(shù)值在CX中。下一頁返回上一頁任務3 8086指令系統(tǒng)循環(huán)控制指令只是根據(jù)結(jié)果的標志位狀態(tài)進行控制操作,指令本身不影響標志位。循環(huán)控制指令用于控制程序的循環(huán),其控制轉(zhuǎn)向的目的地址是在以當前指令指針I(yè)P內(nèi)容為中心的-128+127的范圍內(nèi),指令采用CX作為計數(shù)器,每執(zhí)行一次循環(huán),CX
52、內(nèi)容減1,直到為0,循環(huán)結(jié)束。LOOP指令是以寄存器CX的內(nèi)容作為計數(shù)控制,做(CX) (CX)-1的操作,并判斷CX;當(CX) 0時,轉(zhuǎn)移到由操作數(shù)指示的目的地址,即(IP) (IP)+位移量,進行循環(huán);當(CX)=0時,結(jié)束循環(huán)。LOOPZ/LOOPE指令可完成當ZF=1且(CX)0條件下的循環(huán)操作。在LOOPZ或LOOPE所做的控制循環(huán)操作過程中,除了進行(CX)(CX)-1的操作,還要判斷(CX)是否為零。此外,還將判斷標志位ZF的值。下一頁返回上一頁任務3 8086指令系統(tǒng)LOOPNZ或LOOPNE指令可完成當ZF=0且(CX)0的條件下的循環(huán)控制操作。其操作過程類似于LOOPZ或
53、LOOPE指令。例3-9在內(nèi)存中有一個具有CN個字節(jié)的數(shù)據(jù)串,首單元地址為DATA-BUF,找出第1個不為0的數(shù)據(jù)的地址并送到ADDR單元中。其程序如下。MOV SI,OFFSET DATA-BUF ;取首單元地址MOV CX,CN;計數(shù)器初值MOV AL,O;AL清零DEC SI;循環(huán)初始化LP:INC SI;指針增1CMP AL,SI ;內(nèi)存中的數(shù)據(jù)和AL中的內(nèi)容比較LOOPZ LP;為0且未比較到末尾轉(zhuǎn)LP位置繼續(xù)JZ EXIT;否則判斷ZF,若為1,轉(zhuǎn)EXITMOV ADDR,SI;ZF為O,SI中的內(nèi)容送ADDR下一頁返回上一頁任務3 8086指令系統(tǒng)EXIT:HLT該程序段中循環(huán)結(jié)
54、束的情況有兩種:一種是找到了不為0的數(shù)據(jù),一種是CN個數(shù)據(jù)比較結(jié)束后未找到。所以,退出循環(huán)后要判斷ZF是否為1,ZF -1說明所有數(shù)據(jù)都為0,否則就是找到了不為0的數(shù)據(jù),并且由SI指示其存儲地址。4.子程序調(diào)用和返回指令在程序設計過程中,通常把功能分解為若干個小的模塊。每一個小功能模塊對應一個過程。在匯編語言中,過程又稱為子程序。程序中可由調(diào)用程序(稱為主程序)調(diào)用這些子程序,子程序執(zhí)行完畢后返回主程序繼續(xù)執(zhí)行。子程序調(diào)用分為段內(nèi)和段間調(diào)用。指令格式如下。下一頁返回上一頁任務3 8086指令系統(tǒng)CALL NEAR PTR opr ;表示段內(nèi)調(diào)用CALL FAR PTR opr ;表示段間調(diào)用R
55、ET;表示子程序返回其中,opr為子程序名(即子程序第1條指令的符號地址)。例3-10在主程序中執(zhí)行一條段內(nèi)調(diào)用語句。程序段如下。MAINPROC FAR;定義主程序MOV AX , DATA ; DS初始化MOV DS,AXCALL DISPLAY;調(diào)用子程序DISPLAYDISPLAYPROC NEAR;定義子程序PUSH AX;保護現(xiàn)場下一頁返回上一頁任務3 8086指令系統(tǒng)PUSH BXRET;子程序返回3.3.5處理器控制類指令這類指令主要用于修改狀態(tài)標志位、控制CPU的功能,如使CPU暫停、等待、空操作等,如表3-6所示。在CPU控制指令中,H LT指令使程序暫停執(zhí)行,這時CPU不
56、進行任何操作,當CPU發(fā)生復位或發(fā)生外部中斷時,CPU脫離暫停狀態(tài),H LT指令可用于程序中等待中斷;WAIT指令在CPU測試引腳為高電平(無效)時,使CPU進入等待狀態(tài)。下一頁返回上一頁任務3 8086指令系統(tǒng)這時,CPU不做任何操作。當CPU測試引腳為低電平(有效)時,CPU脫離等待狀態(tài),繼續(xù)執(zhí)行WAIT指令后面的指令;NOP指令只做空操作,不執(zhí)行其他任何操作,占用1B存儲單元,空耗一個指令執(zhí)行周期,該指令常用于程序調(diào)試,還可以實現(xiàn)軟件延時;LOCK指令是一個前綴,可以加在任何指令之前,CPU執(zhí)行該指令時封鎖總線;ESC指令將處理器的控制權交給協(xié)處理器,如在8086系統(tǒng)中可加入浮點運算協(xié)處
57、理器8087,若8086微處理器發(fā)現(xiàn)是一條浮點指令時,就利用ESC指令將浮點指令交給8087執(zhí)行。下一頁返回上一頁任務3 8086指令系統(tǒng)3.3.6邏輯運算與移位類指令邏輯運算與移位指令共有13條,分為3種類型,即邏輯運算指令、移位指令和循環(huán)移位指令,可對8位/16位寄存器或存儲器中的數(shù)據(jù)進行操作。1.邏輯運算指令邏輯運算指令有5條,其中源/目的操作數(shù)地址同算術運算指令、單操作數(shù)指令不允許使用立即數(shù),雙操作數(shù)指令中至少有一個操作數(shù)在寄存器中,另一個操作數(shù)可以使用任意尋址方式,而立即數(shù)不能作為目的操作數(shù)。下一頁返回上一頁任務3 8086指令系統(tǒng)1)邏輯“與”指令AND格式:AND DST, SR
58、C功能:DST (DST) (SRC)。說明:使狀態(tài)標志CF和OF清。,AF無定義,SF,ZF和PF由運算結(jié)果設置;源操作數(shù)中某些位為0時,可使目的操作數(shù)的相應位清0。舉例如下。AND AX ,1110 1111 0111 1111 B;使AX中第7 ,12位清0,其余位不變2)邏輯“或”指令OR格式:OR DST,SRC功能:DST (DST) (SRC)。說明:對狀態(tài)標志位的影響同AND指令;若源操作數(shù)中某些位為1,可使目的操作數(shù)的相應位置1。舉例如下。OR BX , 0001 0000 1000 0000 B;使BX中第7位、12位置1,其余位不變下一頁返回上一頁任務3 8086指令系統(tǒng)
59、3)邏輯“異或”指令XOR格式:XOR DST, SRC功能:DST (DST) (SRC)。說明:對狀態(tài)標志位的影響同AND指令;若操作數(shù)與自身“異或”,結(jié)果清。;某位與“異或”,該位“取反”。舉例如下。XOR AL,1010 0000B;使AL的第5 ,7位取反,其余位不變例3-11將AX和CF清零。解:實現(xiàn)方法有多種。方法1;AND AX,0方法2 ; XOR AX , AX4)邏輯“非”指令NO下格式:NOT DST功能:DST (DST)。下一頁返回上一頁任務3 8086指令系統(tǒng)說明:不影響標志位。5)TEST測試指令格式:TEST DST,SRC功能:(DST) (SRC)置狀態(tài)標
60、志,不送結(jié)果。說明:用來測試目的操作數(shù)中某位是否為1;執(zhí)行過程與AND指令相同,設置狀態(tài)標志,但是不送結(jié)果;對狀態(tài)標志位的影響同AND指令。舉例如下。TEST AX,0040H;測試AX中第6位是否為12.移位指令移位指令有4條,包括算術/邏輯左移與右移,其作用如圖3-20所示。下一頁返回上一頁任務3 8086指令系統(tǒng)1)算術左移指令SAL格式:SAL DST,CNT功能:左移,如圖3-20(a)所示,相當于操作數(shù)乘以20說明:其中DST可以是除立即數(shù)之外的任一種尋址方式,移位次數(shù)由CNT決定,可以是1或寄存器CL。若移位次數(shù)大于1,應事先存入CL中;DST可以是字節(jié),也可以是字。影響狀態(tài)標志
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年重慶西南證券股份有限公司招聘筆試真題
- 考慮配電網(wǎng)不平衡條件的SOP低電壓穿越策略研究
- 睡衣套裝企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 折扣店企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 皮包、袋企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 黑色啤酒企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 特種運輸企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 紅茶飲料企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 藥物臨床試驗AE判斷
- 木材批發(fā)企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 初中歷史興趣小組活動方案
- 【班會課件】時代先鋒雷鋒精神 高中主題班會課件
- 西南交通大學工程測量
- 南寧市存量房買賣合同范本
- 好書介紹愛德華的奇妙之旅PPT課件
- 電梯基本結(jié)構
- 壓力容器涂敷工藝規(guī)程指導書
- 概率論與數(shù)理統(tǒng)計 第八章假設檢驗
- 生物醫(yī)用材料進展及安全性評價PPT課件
- 交通標線設計圖(與對應cad為一套圖紙)
- 扭王字塊預制專項施工方案
評論
0/150
提交評論