模塊2課題三指令系統(tǒng)_第1頁
模塊2課題三指令系統(tǒng)_第2頁
模塊2課題三指令系統(tǒng)_第3頁
模塊2課題三指令系統(tǒng)_第4頁
模塊2課題三指令系統(tǒng)_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、引言引言指令系統(tǒng)是計算機微處理器能直接執(zhí)行的指令集指令系統(tǒng)是計算機微處理器能直接執(zhí)行的指令集合。匯編語言程序就是用指令系統(tǒng)的指令編寫合。匯編語言程序就是用指令系統(tǒng)的指令編寫的,學習指令系統(tǒng)中主要指令的功能、格式以的,學習指令系統(tǒng)中主要指令的功能、格式以及使用的方法是學習匯編語言的基礎(chǔ)。本章主及使用的方法是學習匯編語言的基礎(chǔ)。本章主要介紹要介紹8086的尋址方式,的尋址方式,8086CPU指令系統(tǒng)指令系統(tǒng)中主要指令及其使用方法,以使進一步學習匯中主要指令及其使用方法,以使進一步學習匯編語言程序設(shè)計。編語言程序設(shè)計。 教學目標:(1)理解計算機的指令格式(2)掌握數(shù)據(jù)操作數(shù)的尋址方式任務(wù)引入指令系

2、統(tǒng)是微處理器所能執(zhí)行的指令的集合。指令通常由操作碼和操作數(shù)組成,其一般格式如下:操作碼:指令的操作碼指出微機所要執(zhí)行的操作操作數(shù):操作數(shù)就是在指令執(zhí)行操作的過程中所需要操作的對象操作碼指定指令做何種操作;操作數(shù)用于指明參加操作的數(shù)據(jù)的來源和去向,根據(jù)指令的不同,操作數(shù)的個數(shù)可以有03個不等。在80868088微處理器的指令系統(tǒng)和,操作數(shù)最多可以有兩個(稱二地址指令);在80486微處理器的指令系統(tǒng)中,操作數(shù)最多可以有三個(稱三地址指令),其形式也可以多種多樣,可為操作數(shù)或操作數(shù)地址。我們稱在指令中獲得操作數(shù)的方式為尋址方式。任務(wù)分析存儲器既可以用來存放數(shù)據(jù),又可以用來存放指令。因此,當某個操作

3、數(shù)或某條指令存放在某個存儲單元時,其存儲單元的編號,就是操作數(shù)或指令在存儲器中的地址。形成操作數(shù)或指令地址的方式,稱為尋址方式。8086 CPU的尋址分為兩類,即數(shù)據(jù)尋址方式和指令尋址方式。在80868088指令系統(tǒng)中,操作數(shù)可分為數(shù)據(jù)操作數(shù)和轉(zhuǎn)移地址操作數(shù)兩大類:1數(shù)據(jù)操作數(shù):立即數(shù);寄存器操作數(shù);存儲器操作數(shù);I/O操作數(shù)2轉(zhuǎn)移地址操作數(shù)按目標地址存放的場所不同,它也可以分為立即數(shù)、寄存器和存儲器操作數(shù),即要轉(zhuǎn)移的目標地址包含在指令、寄存器或存儲單元之中,前者為互接方式,后者為間接方式。尋址方式則指出用什么方式和方法尋找到操作數(shù)的地址,如何尋找到操作數(shù)的地址是一個至關(guān)重要的問題。8086最

4、基本的尋址方式有以下七種:(1)立即尋址;(2)寄存器尋址方式;(3)直接尋址方式;(4)寄存器間接尋址方式;(5)寄存器相對尋址方式;(6)基址變址尋址方式;(7)相對基址變址尋址方式;1.立即尋址這種尋址方式所提供的操作數(shù)直接出現(xiàn)在操作碼的后面,作為指令的一部分與操作碼一起存放在代碼段區(qū)域中,這種操作數(shù)稱為立即數(shù)。立即尋址方式主要是用來給寄存器或存儲單元賦值,并且只能用于源操作數(shù),不能用于目的操作數(shù)。立即數(shù)可以用二進制數(shù)、八進制數(shù)、十進制數(shù)和十六進制數(shù)來表示。在非十進制的立即數(shù)末尾需要使用字母加以標識。例5.1 說明指令“MOV AX,5476H”的尋址方式。指令執(zhí)行結(jié)果是5476H的值送

5、人寄存器AX,如圖5.1所示2.寄存器尋址方式這種尋址方式,操作數(shù)在CPU內(nèi)部的寄存器中,在指令中直接指定寄存器名。對16位操作數(shù)來說,寄存器可以為AX,BX,CX,DX,SI,DI,SP或BP,而對于8位操作數(shù)來說,寄存器可為AH,AL,BH,BL,CH,CL,DH,DL。例5.2說明指令“MOV DI,AX”的尋址方式。指令執(zhí)行結(jié)果是將寄存器AX中的內(nèi)容送人寄存器DI中,而寄存器AX中的內(nèi)容不變。如圖5.2所示3.直接尋址方式這種尋址方式把操作數(shù)地址的16位偏移量直接放在指令中,它與操作碼一起存放在代碼段。操作數(shù)一般在數(shù)據(jù)段,而數(shù)據(jù)段的段地址存放在寄存器DS中,操作數(shù)的物理地址是以DS的內(nèi)

6、容左移4位為基址再加上這16位的地址偏移量(也叫有效地址EA)。例5.3說明指令“MOV AX,2050H”的尋址方式。設(shè)(DS)2000H,執(zhí)行情況如圖5.3所示。故執(zhí)行結(jié)果為:(AX)3528H在8088中允許進行段超越,即允許數(shù)據(jù)存放在數(shù)據(jù)段以外的其他段中,這時應在指令中指明段超越前綴,則16位地址偏移量將與CS或SS或ES的基址相加,形成操作數(shù)的物理地址。例如:MOV AX,ES:2000H4.寄存器間接尋址方式在這種尋址方式中,操作數(shù)存放在存儲器中,而操作數(shù)的有效地址在基址寄存器BX,BP或變址寄存器SI,DI之一中??梢苑殖蓛煞N情況:(1)若指令中指定寄存器DX,SI,DI進行間接

7、尋址,則操作數(shù)通常存放在現(xiàn)行數(shù)據(jù)段中。此時,數(shù)據(jù)段寄存器DS的內(nèi)容加上BX,SI,DI中的16位段內(nèi)偏移地址,即得操作數(shù)地址。(2)若以BP間接尋址,則操作數(shù)存放在堆棧段中。此時,堆棧段寄存器SS的內(nèi)容加上BP中的16位段內(nèi)偏移地址,即得操作數(shù)的地址。例5.4說明指令“MOV AX,SI”的尋址方式。假如(DS)=3000H,(DI)=1500H,則執(zhí)行結(jié)果(AX)435BH,執(zhí)行情況如圖5.4所示。5寄存器相對尋址方式在這種尋址方式中,操作數(shù)存放在存儲區(qū)中,而操作數(shù)的有效地址由基址寄存器BX,BP或變址寄存器SI,DI之一中的內(nèi)容再加上指令中指定的8位或16位的偏移量之和組成。這里分兩種情況

8、: (1)若指令中指定寄存器BX,SI,DI相對尋址,則操作數(shù)在數(shù)據(jù)段中,這時用DS寄存器中的段地址作為基地址。 (2)如果以寄存器BP相對尋址,則操作數(shù)在堆棧段中,這時用堆棧段寄存器器中的段地址作為基地址。例5.5 說明指令“MOV AX,COUNTSI”的尋址方式。(其中COUNT為16位偏移量的符號地址)。設(shè)(DS)3000H,(SI)1000H,COUNT2000H,則物理地址3000H H H=33000H,指令執(zhí)行的結(jié)果是將35A2H的值送人AX,即:(AX)35A2H,執(zhí)行情況如圖5.5所示6基址變址尋址方式這種尋址方式中,操作數(shù)的有效地址是指令中指定一個基址寄存器(BX或BP)

9、和一個變址寄存器(SI或DI)的內(nèi)容之和。這里也分兩種情況;(1)如果使用基址寄存器DX,則段寄存器使用DS;(2)如果使用基址寄存器BP,則段寄存器使用SS。例5.6說明指令“MOV AX,BXSI”的尋址方式。若(DS)2000H,(BX)0235H,(SI)12C5H,則EA0235H+12C5H14FAH,物理地址2000H+14FAH=214FAH,則指令執(zhí)行結(jié)果是將354AH的值送人AX.執(zhí)行過程如圖5.6所示。7相對基址變址尋址方式在這種尋址方式中,操作數(shù)的有效地址是一個基址寄存器(BX或BP)一個變址寄存器(SI或DI)與一個8位或16位的偏移量相加之和。同理,如果使用基址寄存

10、器BX,則段寄存器使用DS;如果使用基址寄存器BP,則段寄存器使用SS。例5.7說明指令“MOV AX,MASKBXDI”的尋址方式。若(DS)2000H,(BX)=1500H,(DI)=1000H,MASK=0340H,則實際物理地址=2000H H H H22840H,指令執(zhí)行的結(jié)果是將475BH的值送入AX。執(zhí)行過程如圖5.7所示。20000214FAAX存儲器AHAL圖5.6 基址變址尋址4A35DS2000SI214FA數(shù)據(jù)段12C5BX0235教學目標:(1)熟練掌握數(shù)據(jù)傳送指令、算術(shù)運算指令、邏輯運算指令、移位控制指令和CPU控制命令的功能和用法。(2)掌握串操作、控制轉(zhuǎn)移指令的

11、使用任務(wù)引入程序是由完成一個完整任務(wù)的一系列有序指令組成的有序集合。指令是指示計算機進行某種操作的命令,通常一條指令對應著一種基本操作。指令是根據(jù)CPU硬件特點開發(fā)出來的,不同的CPU,能夠執(zhí)行的指令種類、數(shù)量都不同。計算機所能執(zhí)行的全部指令的集合,稱為處理器的指令系統(tǒng)。每種計算機都有自己固有的指令系統(tǒng),但同一系列的計算機其指令系統(tǒng)是向上兼容的。機器指令用一組二進制編碼來表示,它是機器所能直接理解和執(zhí)行的指令。例如:Intel 8086 CPU中有一條指令,其二進制代碼形式為01001011,十六進制代碼為4BH,指令功能是將寄存器BX的內(nèi)容減1。由于二進制代碼不易理解,也不便于記憶和書寫,因

12、此,人們就用助記符來代替這種二進制表示的指令,這就形成了匯編指令。任務(wù)分析Intel 8086 CPU提供133條基本指令,按功能又可分為以下9類數(shù)據(jù)傳送指令。算術(shù)運算指令。邏輯運算指令移位指令轉(zhuǎn)移指令字符串操作指令。處理器控制指令。輸入輸出指令中斷指令1.最基本的數(shù)據(jù)傳送指令例如:M0V AL,BL ;BL中的8位數(shù)據(jù)送ALMOV ES,DX ;DX中16位數(shù)據(jù)送ESMOV AX BX ;BX和BX+1所指的兩個內(nèi)存單元的內(nèi)容送AXMOV DI,AX ;累加器的內(nèi)容送DI和DI+1所指的兩個單元MOV CX,1000H ;將1000H和1001H兩單元中的內(nèi)容送CXMOV BL,40H ;立

13、即數(shù)40H送BLMOV DX,5040H ;立即數(shù)5040H送DXMOV WORD PTRSI,6070H ;立即數(shù)6070H送到SI和SI+1所指的兩單元;這里的PTR是一個匯編操作符,與前面的WORD;一起,意思是字操作而不是一個字節(jié)操作2堆棧操作指令PUSH、POP 8086/8088指令系統(tǒng)中提供了專用的堆棧操作指令,其中PUSH是把字壓入堆棧,POP是把字彈出堆棧。在程序中采用堆棧操作指令時,應預置堆棧段寄存器SS、堆棧指示器SP的值,同時,使SP的內(nèi)容作為當前堆棧段的棧頂。在執(zhí)行PUSH指令時,首先,堆棧指示器SP自動減2,然后,將一個字以源操作數(shù)傳送至棧頂。POP指令的執(zhí)行過程正

14、好與PUSH指令相反,它把由SP指出的當前堆線段的棧頂?shù)囊粋€操作數(shù)(一個字),傳送到目的操作數(shù)中,然后,SP自動加2,指向新的線頂。POP指令中的目的操作數(shù)可以是除代碼段寄存器CS之外的其他寄存器和存儲器。在8086/8088指令系統(tǒng)中,不允許CS寄存器作為目的操作數(shù)使用。這是因為,一旦改變了代碼段寄存器CS的內(nèi)容,使程序有了新的當前代碼段,就會導致程序錯誤運行。例如:將16位通用寄存器CX的內(nèi)容壓入堆棧,然后,彈出棧頂至CX中,已知:(SS)0200H,(SP)=0008H,(CX)12FAH,其示意圖如5.8和圖5.9所示。3交換指令XCHG交換指令XCHG可以實現(xiàn)字節(jié)交換,也可以實現(xiàn)字交

15、換。交換過程可以在CPU的內(nèi)部寄存器之間進行,也可以在內(nèi)部寄存器和存儲單元之間進行,但不能在兩個存儲單元之間執(zhí)行數(shù)據(jù)交換。例如:XCHG AL,BL ;AL和BL之間進行字節(jié)交換XCHG BX,CX ;BX和CX之間進行字交換XCHG 2530H,CX ;CX中的內(nèi)容和2530H、2531H兩單元的內(nèi)容交換4換碼指令(也稱查表指令)XLATXLAT是一條換碼指令。使用換碼指令時,要求BX寄存器指向表的首地址,AL中為表中某一項與表格首地址之間的偏移量,指令執(zhí)行時,會將BX和AL中的值相加,把得到的值作為操作數(shù)的地址,然后將此地址所對應的單元中的值取到AL中去。圖5.10表示了換碼指令的功能。X

16、LAT指令是通過查表方式來完成換碼功能的。因此,在執(zhí)行該指令之前,必須建立好一張表,該表的最大容量為256字節(jié)。例如,假設(shè)數(shù)據(jù)表存放在偏移地址為2000H開始的內(nèi)存中,取出數(shù)據(jù)序號“3”所對應的表中某存儲單元中的數(shù)送到AL中去,用如下幾條指令即可完成: MOV BX,2000H ;BX隱含作表首地址 MOV AL,3 ;序號3送AL XLAT ;查表結(jié)果送AL5.目標地址傳送指令這是一類專用于傳送地址碼的指令,可用來傳送操作數(shù)的段地址或偏移地址,共包含以下3條指令。(1)取有效地址指令LEALEA指令的功能是將存儲器單元的偏移地址送到一個寄存器。在LEA格式中,要求源操作數(shù)必須為內(nèi)存單元地址,

17、目的操作數(shù)必須為一個16位的通用寄存器。這條指令常用來使一個寄存器作為地址指針。例如:LEA AX,2728H ;將2728H單元的偏移量送AX,執(zhí)行指令后,AX中為2728HLEA BX,BP+SI ;指令執(zhí)行后,BX中的內(nèi)容為BP+SI的值(偏移地址)LEA SP,0482H ;使堆棧指針SP為0482H(偏移地址)(2).將地址指針裝到DS和另一個寄存器的指令LDSLDS指令的功能是將某操作數(shù)的4個連續(xù)字節(jié)中的地址指針(其中包括一個段地址和一個偏移量)傳送到兩個目的寄存器,其中,地址指針的后兩個字節(jié)(段地址)一定送到DS中。例如,設(shè)2130H2133H這4個單元中存放著一個地址指針,21

18、30H和2131H中的為地址的偏移量,2132H和2333H中的為地址的段值,執(zhí)行如下指令:LDS DI,2130H使2130H和2131H中的偏移量送到DI,2132H和2133H中的段值送到DS。(3).將地址指針裝到ES和另一個寄存器指令LESLES指令與LDS指令的操作基本相同,不同之處僅在于將源操作數(shù)所指向的地址指針中的段基址(后兩個字節(jié))傳送到ES段寄存器,而不是DS段寄存器。6.標志位傳送指令可完成標志位傳送的指令共有4條。(1).讀取標志指令LAHFLAHF指令被執(zhí)行時,將標志寄存器中的低8位傳送到AH中,如圖5.11所示。 (2).設(shè)置標志指令SAHFSAHF指令被執(zhí)行時,將

19、AH寄存器的相應位傳送到標志寄存器的低8位,用圖表示,就是將圖5.9中的5個箭頭方向反過來。(3).對標志寄存器的壓入堆棧指令和彈出堆棧指令PUSHF、POPFPUSHF指令將標志寄存器的值壓入堆棧頂部,同時,棧指針SP的值減2,此指令在執(zhí)行時標志寄存器的值不變。POPF指令的功能正好相反,此指令在執(zhí)行時從堆棧頂中彈出個字送到標志寄存器中,同時堆棧指針SP的值加2。 PUSHF、POPF指令一般用在子程序和中斷處理程序的首尾,起保存主程序標志和恢復主程序標志的作用。表5.1 傳送類指令傳送類指令的格式與功能的匯總表如表5.1所示。 8086指令系統(tǒng)中具有完備的加、減、乘、除運算指令??商幚?位

20、16位不帶符號和帶符號的二進制整數(shù),以及不帶符號數(shù)的組合的(即一字節(jié)存放兩位BCD碼)或非組合的(即一字節(jié)存放一位BCD碼)十進制整數(shù)的算術(shù)運算。8位不帶符號的二進制整數(shù)范圍是0255,16位不帶將號二進制整數(shù)范圍是065535,而8位和16位帶符號的二進制整數(shù)范圍分別是-128+127和-32768 。負數(shù)均用補碼表示。在算術(shù)運算指令中,源操作數(shù)為8位或16位通用寄存器、存儲器和立即數(shù),目的操作數(shù)不允許是立即數(shù),其余同源操作數(shù)。還需要注意的是,雙操作數(shù)指令中兩個操作數(shù)不能同時為存儲器操作數(shù)。這一限制適用于指令系統(tǒng)中所有的雙操作數(shù)指令,以后不再贅述。1加法指令 (1)不帶進位的加法指令例5.2

21、 ADD AL,50H;AL+50HAL ADD DI,SI;DI+SI DI ADD AX,DI ;AX+(DI+1,DI) AX (2)帶進位的加法指令指令格式:ADD OP目,OP源指令功能:將源操作數(shù)、目的操作數(shù)及CF的值相加,結(jié)果保留在目的操作數(shù)中,并根據(jù)結(jié)果設(shè)置標志。例5.3 有兩個4字節(jié)數(shù)分別放在自FIRST和SECOND開始的存儲區(qū)中,低字節(jié)在低地址處,編一程序段將兩數(shù)相加,結(jié)果存放于從FIRST開始的存儲區(qū)中。MOV AX,FIRST ;第一個數(shù)的低16位AXMOV AX,SECOND ;兩數(shù)低16位相加AXMOV FIRST,AX ;低16位相加結(jié)果存入FIRST及FIRS

22、T+1單元MOV AX,FIRST+2 表5.2 算術(shù)運算指令 ;第一個數(shù)的高16AX ADC AX,SECOND+2 ;兩數(shù)的高16位連同地位進位相加AXMOV FIRST+2,AX ;高16位相加的結(jié)果存入FIRST+2及FIRST+3單元(3)加1指令指令格式:INC 0P指令功能:將操作數(shù)加1,再送回該操作數(shù)。這條指令一般用于循環(huán)程序的指針修改操作數(shù)可以是8位16位通用寄存器或存儲器,不能為立即數(shù)。例5.4 INC AL ;AL+1AL INC BYTE PTRBX十DI ;BX+DI+1 BX+DI注意:INC指令影響標志位AF,OF,PF,SF和ZF,但不影響CF位。 本指令將操作

23、數(shù)視為無符號數(shù)。2減法指令(1)不帶借位的減法指令指令格式:SUB OP日,OP源指令功能:將目的操作數(shù)減去源操作數(shù),結(jié)果送回到目的操作數(shù)中,并根據(jù)結(jié)果設(shè)置標志。例5.5 SUB BX,CX ;BX-CXBXSUB AL,SI+2 ;AL-SI+2AL(2)帶借位的減法指令 指令格式:SBB OP目,OP源 指令功能:將目的操作數(shù)減去源操作數(shù)再減去借位標志CF的現(xiàn)行值,結(jié)果送回到目的操作數(shù)中,并根據(jù)結(jié)果設(shè)置標志。該指令常用于多字節(jié)減法運算。例5.6 SBB AX,2030H ;AX-2030H-CFAX SBB WORD PTRDI,1000H ;將DI和DI+l所指的兩個單元的內(nèi)容減去100

24、0H再減去CF結(jié)果送DI和DI+1單元(3)減1指令指令格式:DEC OP指令功能:將操作數(shù)的值減1后送回源操作數(shù)中,根據(jù)結(jié)果置標志位。操作數(shù)可以是8位16位通用寄存器和存儲器操作數(shù),不能為立即數(shù)。例5.7 DEC AX ;AX-1Ax DEC BYTE PTRBX ;BX-1BX注意:本指令不影響CF標志。 本指令將操作數(shù)視為無符號數(shù)。(4)取補指令指令格式:NEG 0P指令功能:將操作數(shù)取補后送回原操作數(shù)。操作數(shù)可以是8位八6位通用寄存器和存儲器操作數(shù),不能為立即數(shù)。例5.8 NEG AL ;將AL中的數(shù)取補 NEC WORD RTRST+1 ;將SI+l、SI+2單元中的內(nèi)容取補注意;因

25、為執(zhí)行NEG指令時,是用0減去操作數(shù),所以指令執(zhí)行時,只有操作數(shù)為0才使CF0,否則總是使CF=1。(5)比較指令指令格式:CMP 0P目,oP源指令功能:將目標操作數(shù)與源操作數(shù)相減,不回送結(jié)果,只根據(jù)結(jié)果置標志位。例5.9 CMP AX,BX ;將AX-BX后,置標志位 CMP AL,20H ;將AL-20H后,置標志位例5.10 有兩組50個字節(jié)的數(shù)據(jù),分別放在自FIRST和SECOND開始的存儲區(qū)中,試比較兩組數(shù)據(jù)是否相同。相同則0AL,否0FFHAL。 MOV SI,0FFSET FIRST ;SI作為第組數(shù)的地址指針 MOV DI,OFFSET SECOND ;DI作為第二組數(shù)的地址

26、指針 M0V CX,50 ;置計數(shù)器初值P: MOV AL,SI ;從第一組數(shù)中取出個數(shù)送AL CMP AL,DI ;與第二組數(shù)中相向位置的數(shù)比較 JZ NEXT ;相等,繼續(xù)比較 MOV AL,0FFH ;不相等,將不等標志0FFH送AL JMP STOP ;跳山循環(huán)NEXT: INC SI ;調(diào)整第一組數(shù)指鈞 INc DI ;調(diào)整第組指針 DEC CX ;計數(shù)值減1 JNZ P ;未完,繼續(xù) MOV AL,0 ;將相等標志送ALSTOP: HLT3乘法指令(1)無符號數(shù)乘法指令指令格式;MUL OP指令功能:完成兩個不帶符號的8位16位二進制數(shù)的乘法運算。指令中給出的操作數(shù)是乘數(shù),它可以是

27、8位/16位通用寄存器及存儲器;另一操作數(shù)被乘數(shù)隱含在ALAX中,乘積存放在AH:AL或DX:AX中,如圖5.12所示。例5.11 MUL BL ;BL*ALAX MUL WORD PTRDI ;DI和DI+1單元的內(nèi)容乘以AX中的內(nèi)容,乘積送DX,AX中例5.12 設(shè)在M1和M2單元中各有一個16位數(shù),求其乘積,將結(jié)果存于從R開始的字單元中。 MOV AX,M1 ;取被乘數(shù) MUL M2 ;兩數(shù)相乘 MOV RAX MOV R+2DX ;存結(jié)果注意:本指令影響標志位CF、OF。對于字節(jié)乘法,當AH0時,CF1,0Fl; 對于字乘法,但DX0時,CF=1,OF=1。(2)帶符號數(shù)乘法指令指令格

28、式:IMUL OP指令功能:完成兩個帶符號的8位/16位二進制數(shù)的乘法運算。有關(guān)IMUL的其他約定與MUL相同。注意:對于字節(jié)乘法,當AH為AL的符號擴展時,CFOF=0,否則CF=OF1;對于字乘法,當DX為AX的符號擴展時,CF=OF=0,否則CFOF1。4除法指令(1)無符號數(shù)除法指令指令格式:DIV OP指令功能:完成構(gòu)個不帶符號的二進制數(shù)的除法運算。指令中給出的操作數(shù)是除數(shù),它可以是8位16位通用寄存器及存儲器;被除數(shù)隱含在AX(字節(jié)除)或DX、AX(字除法)中。操作過程:字節(jié)除法AXOPAL AX MOD OPAH字除法(DX、AX)OPAX (DX、AX)MOD 0PDx例5.1

29、3 DIV CL ;AX中的數(shù)據(jù)除以CL中的數(shù)據(jù),商AL,余數(shù)AH DIV WORD PTRDI ;DX和AX中的32位數(shù)除以DI和DI+1單元; 中的16位數(shù)據(jù),商AX,余數(shù)DX注意:對于本指令,若商超出字或字節(jié)的表述范圍,將產(chǎn)生一個類型0的中斷。(2)帶符號數(shù)除法指令指令格式:IDIV OP指令功能:完成兩個帶符號的二進制數(shù)的除法運算。商的符號根據(jù)代數(shù)規(guī)則確定,余數(shù)的符號與被除數(shù)相同。操作數(shù)的規(guī)定同DIV指令。注意:本指令在完成字節(jié)相除時最大的商為+127(7FH),最小的商為-128(80H)在完成字相除時最大的商為 (7FFFH),最小的商為-32768(80H)。若商超出此范圍,則將

30、產(chǎn)生個類型0的中斷。(3)符號擴展指令在進行帶符號數(shù)除法運算時,若被除數(shù)和除數(shù)具有相同位數(shù)(字節(jié)或字),這時就需要將被除數(shù)擴展為字或雙字,而數(shù)的大小和符號不變。指令CBW和CWD就用于這一目的。字的擴展指令。指令格式:CBW指令功能:將AL中的單字節(jié)數(shù)的符號擴展到AH中。若AL80H,則0AH,AL80H,OFFHAH。例5.14 MOV AL,81H CBW MOV CL,30H IDIV CL字擴展指令。指令格式:CWD指令功能:將AX中的數(shù)的符號擴展到DX中。若AX8000H,則0DX;若AX8000H,則0FFFFHDX。注意:這兩條符號擴展指令常常放在ISIV指令之前,對標志位沒有影

31、響。例5.15 在內(nèi)存中有一個從DATAl開始的存儲區(qū)。此存儲區(qū)的前兩個字節(jié)是一個16位帶符號的被除數(shù),第三、四字節(jié)是一個16位帶符號的除數(shù)其后的四個單元依次存放商和余數(shù)。實現(xiàn)此除法運算的程序為: LEA BX,DATAl ;數(shù)據(jù)區(qū)首址BX MOV AX,BX ;被除數(shù)AX CWD ;被除數(shù)符號擴展至DX中 IDIV WORD PTRBX+2 ;兩數(shù)相除 MOV BX+6,DX ;商BX+4單元 MOVBX+6,DX ;余數(shù)BX+6單元思考:若上例中的兩個數(shù)是無符號數(shù),要完成無符號數(shù)除法,應該如何修改程序邏輯運算指令有5條,見表5.3說明: (1)NOT指令不影響標志位,其他4種指令將使CF和

32、OF為0,AF位無定義,而SF、ZF和PF則根據(jù)運算結(jié)果設(shè)置。 (2)TEST指令中不保存兩個操作數(shù)相與的結(jié)果,只根據(jù)其特征置標志位。邏輯運算指令對處理操作數(shù)的某些位很有用,例如利用AND指令可將某些位置0,利用OR指令可將某些位置1,利用XOR指令可將某些位取反;利用TEST指令可測試某些位等。例5.15AND AL,11111100B ; 將AL中0、1兩位置0,其他各位保持不變OR AL,11111100B; 將AL中高4位置1,其他各位保持不變XOR AL,11000000B; 將AL中最高二位取反,其他各位保持不變TEST AL,0AAH ; 設(shè)置邏輯尺0AAH,測試AL中第1、3、

33、5、7位是否為0JZ AB ;ZF=1,被測位均為0,轉(zhuǎn)到ABAB:移位指令有8條,見表5.4,移位指令功能圖如圖5.13所示說明:(1)表內(nèi)的OPR可以是除立即數(shù)以外的任何尋址方式。(2)COUNT表示移位次數(shù),只能取1或寄存器CL兩種形式。若移位次數(shù)大于1,則需將移位次數(shù)預置于CL中。(3)所有的移位指令都可以對字或字節(jié)進行操作。 (4)所有的移位指令對CF和OF標志位會有影響。OF位當最高有效位發(fā)生變化時(由0變1,或由1變O)置l,否則置0,僅在COUNT=l時有效。4條循環(huán)移位指令不影響其他標志,而其余移位指令則根據(jù)移位后的結(jié)果設(shè)置SF、ZF和PF位,AF位則無定義。例5.16MOV

34、 AF,0AFH ;(AL)=10101111BMOV CL,5SAL AL,1 ; (AL)=01011110B,(CF)=1SHR AL,CL ; (AL)=00000010B, (CF)=1MOV AL,0AFH ; (AL)=10101111BROL AL,1 ; (AL)=01011111B,(CF)=1 ROL AL,1 ; (AL)=10111110B,(CF)=0RCR AL,1 ; (AL)=01011111B,(CF)=0例5.17MOV CX,6MOV BL,0 ;存放移出位AB:SHL AX,1 ;左移移位相當于乘2RCL DX,1RCL BX,1DEC DXJNZ A

35、BHLT控制轉(zhuǎn)移指令共有五類,它們是:無條件和條件轉(zhuǎn)移指令、循環(huán)控制指令、子程序調(diào)用和返回指令、中斷指令和處理器控制轉(zhuǎn)移指令。在論述具體的指令之前,先講述一下與指令地址有關(guān)的尋址方式。1程序轉(zhuǎn)移地址的尋址方式在80868088指令系統(tǒng)中,指令的地址是由CS和IP的內(nèi)容所決定的。在順序執(zhí)行時,當BIU完成一次取指操作后,就自動改變IP的內(nèi)容以指向下一條指令,使程序按指令預先存放在程序存儲器中的次序,由低地址到高地址順序執(zhí)行;如需要改變程序的執(zhí)行順序時,可以在程序中安排一條控制轉(zhuǎn)移指令,實現(xiàn)僅修改IP內(nèi)容(段內(nèi)轉(zhuǎn)移)或同時修改CS的內(nèi)容(段間轉(zhuǎn)移),使程序轉(zhuǎn)移到指令所指定的轉(zhuǎn)移地址。尋求指令地址的

36、方法稱為轉(zhuǎn)移地址尋址方式,共有如下四種方式:1)段內(nèi)直接尋址方式2)段內(nèi)間接尋址方式3)段間直接尋址方式4)段間間接尋址方式2無條件轉(zhuǎn)移和條件轉(zhuǎn)移指令1)無條件轉(zhuǎn)移指令JMP2)條件轉(zhuǎn)移指令(1)簡單條件轉(zhuǎn)移指令(2)無符號數(shù)條件轉(zhuǎn)移指令(3)帶符號數(shù)條件轉(zhuǎn)移指令該類指令的一般格式為: L00P OPRD ;CX=CX-1,CX0,轉(zhuǎn)到OPRD LOOPNE OPRD ;CXCX-1,Cx0且ZFO轉(zhuǎn)到OPRD L00PE OPRD ;CX=CX-1, CX0是ZF1轉(zhuǎn)到OPRD在LOOPE和LOOPNE兩條指令中,只要兩個條件中任一個不滿足,循環(huán)就結(jié)束。例5.19 從首地址為BX所指向的單元

37、到末地址為DI所指向的單元之間尋找第一個非0字符,其程序如下: SUB DI,BX ;取數(shù)據(jù)塊長度給CX INC DI MOV CX,DI DEC BXNEXT: INC BX CMP BYTE PTR BX,0 ;將BX所指向的單元內(nèi)容與0比較 LOOPE NEXT ;相等,則轉(zhuǎn)到NEXT,否則繼續(xù)注意:在上述指令中,由于INC BX影響ZF標志,因此將其放在CMP指令之前,否則ZF標志取決于INC而非CMP從而影響程序的最終結(jié)果。4子程序調(diào)用和返回指令1)子程序調(diào)用指令CALLCALL指令用于實現(xiàn)調(diào)用子程序的功能, CALL dst2)程序返回指令RET RET指令一般放在子程序的尾部,使

38、CPU在子程序執(zhí)行完后,返回到主程序的斷點處繼續(xù)執(zhí)行。3)過程的定義過程定義的偽操作格式為 PROC 子程序體 RET ENDP (1)主程序和子程序在同一代碼段中的子程序近程調(diào)用和定義示例 DATA SEGMENT ARY DW 100 DUP(?) COUNT DW 100SUM DW ?ARYEA DW ARYCOUNTEA DW COUNTSUMEA DW SUMDATA ENDSCODE SEGMENT主程序體 CALL PROAD ;過程PROAD定義PROAD PROC NEARPUSH AXPUSH CXPUSH SILEA SI,ARY ;將ARY的偏移地址SIMOV CX,

39、COUNT ;將重復次數(shù)CXXOR AX,AX ;將AX清零ADD AX,SI ;求和ADD SI,2 ;SI指向下一個字LOOP NEXT ;X自減,CX=0? N,則轉(zhuǎn)NEXT;Y,繼續(xù)向下MOV SUM,AX ;和送給SUM單元POP SI POP CXPOP AXRET PROADD ENDP CODE2 ENDS8086CPU共有五條串操作指令,它們有以下特點:(1)通過加重復前綴來實現(xiàn)串操作,此時將重復次數(shù)送給CX。每次串操作之前,先判終止重復操作的條件:CX=0? (REP前綴)、CX和ZF是否有一個為0(REPZ前綴)?、CX0或ZF=1(REPNZ前綴)?條件滿足,退出循環(huán);

40、否則CXCX-1,執(zhí)行一次串操作,再重復以上步驟。(2)可以對字節(jié)串進行操作,也可以對字串進行操作。(3)所有的串操作指令都用寄存器SI對源操作數(shù)進行間接尋址,并且假定是在DS段中;用寄存器DI對目的操作數(shù)進行間接尋址,并且假定是在ES段中。串操作指令是惟一的一組源操作數(shù)和目的操作數(shù)都在存儲單元內(nèi)的指令。(4)串操作時,地址的修改往往與方向標志有關(guān):DF=l(指令為STD)時,SI和DI做自動減量修改;DF=0(指令為CLD)時,SI和DI自動增量修改。1MOVSB(字節(jié))MOVSW(字)串傳送指令該指令用于將DS段SI尋址的一個字節(jié)或字傳送到ES段DI尋址的單元中,并根據(jù)DF的值修改SI和D

41、I,使其指向下一個元素。若在該指令之前加重復前綴REP,則該指令要執(zhí)行CX次。例5.20將l000個字符的字符串從內(nèi)存的BUFFERl搬移到內(nèi)存的BUFFER2中去。MOV SI,OFFSET BUFFER1 ;BUFFER1偏移地址送SIMOV DI,OFFSET BUFFER2 ;BUFFER2偏移地址送DIMOV CX,1000 ;傳送次數(shù)送CXCLD ;DF=0REP MOVSB ;重復搬移2CMPSBCMPSW串比較指令該指令將DS段SI尋址的一個字節(jié)或字與ES段DI尋址的一個字節(jié)或字做比較,影響標志,并根據(jù)DF的值修改SI和DI,使其指向下一個元素。通過加重復前綴REPZ或REPN

42、Z可以實現(xiàn)在兩個字符串中尋找第一個不相等(或相等)的元素。例5.21比較DEST和SOURCE中的500個字節(jié),找出第一個不相同的字節(jié),如果找到,則將SOURCE中的這個數(shù)送AL中。CLD ;DF=0LEA DI,ES:DEST ;DEST的偏移地址送DILEA SI,SOURCE ;SOURCE偏移地址送SIMOV CX,500 ;重復次數(shù)送CXREPE CMPSB ;相同重復比較,不相同繼續(xù)JZ NEXT ;若永遠相同,則轉(zhuǎn)NEXTMATCH: DEC SIMOV AL,BYTE PTRSI NEXT:3SCASBSCASW串搜索指令該指令把AL(或AX)中的內(nèi)容與ES:DI尋址的字節(jié)(或

43、字)內(nèi)容進行比較,影響標志,并根據(jù)DF的值修改DI,使其指向下一個元素。例5.22在包含100個字符的字符串中尋找第一個回車符CR(其ASCII碼為ODH),找到后將其地址保留在(Ds:DI)中,并在屏幕上顯示字符“Y”。如果字符串中沒有回車符,則在屏幕上顯示“N”。該字符串的首地址為STRING。根據(jù)要求可編程如下: LEA DI,STRING ;將STRING偏移地址送DI MOV AL,0DH ;(AL)=尋址的字符CR的ASCII碼=0DH MOV CX,100 ;重復次數(shù)送CX CLD ;DF=0 REPNE SCASB ;重復掃描 JZ FOUND ;找到,則轉(zhuǎn)FOUND;沒找到,

44、則顯示“N” MOV DL,N JMP DSPYFOUND:DEC DI ;DI指向CR所在單元 MOV DL,Y ;顯示“Y”DSPY: MOV AH,02H INT 21H HLT4LODSBLODSW字串裝入指令該指令是將由DS:SI所指定的一個字節(jié)或字裝入到累加器AL或AX中去,并根據(jù)DF的值修改指針SI,以指向廠一個要裝入的字節(jié)或字。這條指令一般不使用重復前綴。例5.23內(nèi)存中以BUFFER為首址的緩沖區(qū)有10個非壓縮型BCD碼形式存放的十進制數(shù),它們的值可能是09中的任意一個,將這些十進制數(shù)順序顯示在屏幕上。根據(jù)題意可編程如下: LEA SI,BUFFER ;SI緩沖區(qū)首址 MOV

45、 CX,10 ;CX字符串長度 CLD ;DF=0 MOV AH,02H ;AH功能號 GET: LODSB ;用串裝入指令取一個BCD碼到AL OR AL,30H ;BCD碼轉(zhuǎn)換成ASCII碼 MOV DL,AL ;DL字符ASCII碼 INT 21H ;顯示 DEC CX ;CX(CX)-1 JNZ GET ;未完成10個字符則重復 HLT5STOSBSTOSW字串存儲指令 該指令把AL(或AX)中的內(nèi)容傳送到ES:DI尋址的單元中去,并根據(jù)DF的值修改DI,使其指向下一個元素。用STOS指令將字符“#”裝入以AREA為首址的100個字節(jié)中。LEA DI,AREA ;將AREA偏移地址送給

46、DIMOV AX,# ;(AX)=裝入的兩個字符“#”MOV CX,50 ;重復次數(shù)送CXCLD ;DF=0REP STOSW ;重復裝入HLT1標志位處理指令2其他指令輸入輸出數(shù)據(jù)傳送指令I(lǐng)N、OUT輸入/輸出指令用來完成累加器(AXAL)與IO端口之間的數(shù)據(jù)傳送功能。執(zhí)行輸入指令時,CPU可以從一個8位端口讀入一個字節(jié)到AL中,也可以從兩個連續(xù)的8位端口(16位端口)讀一個字到AX中。通常,16位端口地址設(shè)置在偶數(shù)地址號上。若端口地址大于255,則必須用DX寄存器作為間接尋址。執(zhí)行輸出指令時,CPU可以將AL中的一個字節(jié)寫到一個8位端口中,或者將AX中的一個字寫到16位端口中。例如:IN

47、AL,50H ;將50H端口的字節(jié)讀入ALIN AX,70H ;將70H端口的一個字讀到AX。70H中的內(nèi)容讀入AL,;71H中的內(nèi)容讀人AHMOV DX,2500H ;端口地址大于255,必須用DX寄存器作為間接尋址IN AL,DX ;從DX所指的端口(2500H)中讀取一個字節(jié)IN AX,DX ; 從DX和DX+1所指出的瑞口中讀取一個字,較低地址中的值;讀到AL中,較高地址中的值讀到AH中OUT 44H,AL ;將AL中的一個字節(jié)輸出到AH端口OUT 80H,AX ;將AX中的內(nèi)容輸出到80H端口,AL中的內(nèi)容輸出到80H端;口,AH中的內(nèi)容輸出到81H端口MOV DX,3000H ;端

48、口地址大于255,必須用DX寄存器作為間接尋址0UT DX,AL ;將AL中的字節(jié)輸出到DX所指的端口(3000H)中OUT DX,AX ;將AL中的字節(jié)輸出到DX所指的端口中,同時將AH中的字節(jié) ;輸出到DX+1中軟中斷指令及中斷返回指令在80868088的微機系統(tǒng)中,當程序執(zhí)行到中斷指令I(lǐng)NT時, 便中斷當前程序的執(zhí)行,轉(zhuǎn)向由256個中斷向量所提供的中斷入口地址之一去執(zhí)行。80868088系統(tǒng)中,提供了三種中斷控制指令。1.軟中斷指令:INT nnnn為中斷類型碼,可以取00HFFH,該指令執(zhí)行下面的操作:將標志寄存器F入棧,(SP)-2SP,(F) (SP)和(SP)+1所指向的單元。使

49、IF=0、TF=0。將斷點地址CS:IP入棧,(SP)-2SP,(CS) (SP)和(SP)+1所指向的單元;(SP)-2SP,(IP) (SP)和(SP)+1所指向的單元。(nn4) IP,(nn4+2) CS,獲得中斷服務(wù)程序的入口地址,開始執(zhí)行中斷服務(wù)程序。2.INTO指令為溢出中斷指令。若OF=l則引發(fā)中斷類型碼為4的溢出中斷,指令操作同上述,只需將nn換成4即可。若OF=0,則該指令等同于NOP。3.中斷返回指令:IRETIRET指令放在中斷服務(wù)程序的最后,用以退出中斷,返回到主程序的斷點處,繼續(xù)執(zhí)行主程序。其從堆棧中彈出的主程序斷點、標志寄存器的內(nèi)容依次送給CS和IP、F、IP(S

50、P),SP(SP)+2,CS(SP),SP(SP)+2;F(SP),SP(SP)+2。思考與練習1、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,數(shù)據(jù)變量VAL的偏移地址為0050H,請指出下列指令源操作數(shù)是什么尋址方式?其物理地址是多少?(1)MOV AX,0ABH (2)MOV AX,100H(3)MOV AX,VAL (4)MOV BX,SI(5)MOV AL,VALBX (6)MOV CL,BXSI(7)MOV VALSI,BX (8)MOV BPSI,1002、指出下列語句的錯誤:(1)MOV BX,1AH(2)MOV 45H,CL(3)INC 1BH(4)MOV BX,SI3、說明下列指令源操

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論