項目二 微處理器指令系統(tǒng)_第1頁
項目二 微處理器指令系統(tǒng)_第2頁
項目二 微處理器指令系統(tǒng)_第3頁
項目二 微處理器指令系統(tǒng)_第4頁
項目二 微處理器指令系統(tǒng)_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

微處理器指令系統(tǒng)

項目二項目二微處理器指令系統(tǒng)本項目主要講解微處理器指令系統(tǒng)的基本知識,包括8086/80486內部結構、寄存器組;微機系統(tǒng)中常用尋址方式;數據傳送類指令、算術運算指令、邏輯運算與位操作指令、串操作類指令、控制轉移類指令、處理器控制類指令等指令格式和功能。項目導讀第2章微處理器指令系統(tǒng)□了解8086的內部結構,了解它的寄存器組?!跬ㄟ^對比8086,了解80486的內部結構。□掌握微處理器的尋址方式。□掌握微處理器的指令系統(tǒng)及指令功能。

教學內容第2章微處理器指令系統(tǒng)

在了解8086及80486的內部結構基礎上,把重點放在理解微處理器的尋址方式及指令系統(tǒng)的命令格式及功能上。學習建議本項目教學安排20學時,其中理論14學時,動手實踐6學時。

學習進度2.1項目開篇一個簡單的匯編語言程序的編寫例2-1要求編寫一段匯編語言程序,完成求和SUM=X+Y功能。

一個匯編語言源程序是由許多語句組成。2.1項目開篇要求編寫一段匯編語言程序,完成求和SUM=X+Y功能。

注:本程序在MASM5.1中調試,若在6.11中需調整變量。題目要求一個簡單的匯編語言程序的編寫例2-1TITLE EXAMPLE FOR “典型格式” DAT SEGMENT‘DATA’ X DB12H Y DB30H SUM DB0H DAT ENDS STA SEGMENTSTACK‘STACK’ DB 100HDUP(?) STA ENDS CODE SEGMENT‘CODE’ ASSUME CS:CODE, DS:DAT, SS:STA 完整段定義格式例2-1START: MOV AX,DAT MOV DS,AX MOVAL,X ADDAL,Y MOVSUM,AL 代碼段例2-1MOVAH,4CH INT21HCODEENDS ENDSTART

程序結束2.2項目備戰(zhàn)任務2.2.1了解8086/8088的內部結構任務2.2.2了解80486的內部結構任務2.2.3了解匯編語言的尋址方式任務2.2.4掌握匯編指令系統(tǒng)任務2.2.5了解匯編語言程序編寫格式任務2.2.1了解8086/8088的內部結構微型計算機系統(tǒng)的硬件核心是微處理器。微處理器通過執(zhí)行指令序列完成指定的操作,處理器能夠執(zhí)行的全部指令的集合就是該處理器的指令系統(tǒng)。內部數據總線控制總線數據總線地址總線暫存器累加器ALU標志寄存器指令寄存指令譯碼時序和控制邏輯通用寄存器組地址寄存器組地址總線控制數據總線控制任務2.2.1了解8086/8088的內部結構1.算術邏輯單元(運算器)2.寄存器組3.指令處理單元(控制器)1.8088內部功能8088的內部結構從功能分成兩個單元總線接口單元BIU——管理8088與系統(tǒng)總線的接口,負責CPU對存儲器和外設進行訪問執(zhí)行單元EU——負責指令的譯碼、執(zhí)行和數據的運算兩個單元相互獨立,分別完成各自操作兩個單元可以并行執(zhí)行,實現指令取指和執(zhí)行的流水線操作任務2.2.1了解8086/8088的內部結構任務2.2.1了解8086/8088的內部結構存儲容量8086有20根地址總線,因此,它可以直接尋址的存儲器單元數為220。物理地址8086可直接尋址1MB的存儲空間,其地址區(qū)域為00000H~FFFFFH,與存儲單元一一對應的20位地址,我們稱之為存儲單元的物理地址。2.8086存儲器組織2.8086存儲器組織存儲器的分段及段地址CPU內部的寄存器都是16位系統(tǒng)采用存儲器分段的方法系統(tǒng)的整個存儲空間可分為16個互不重疊的邏輯段圖2-3存儲空間邏輯段結構圖2-4分段邏輯結構2.8086存儲器組織偏移地址偏移地址是某存儲單元相對其所在段起始位置的偏移字節(jié)數,或簡稱偏移量它是一個16位的地址,根據指令的不同,它可以來自于CPU中不同的16位寄存器(IP、SP、BP、SI、DI、BX等)物理地址的形成物理地址是由段地址與偏移地址共同決定的物理地址=段地址×16+偏移地址例如,系統(tǒng)啟動后,指令的物理地址由CS的內容與IP的內容共同決定,由于系統(tǒng)啟動的CS=0FFFFH,IP=0000H,所以初始指令的物理地址為0FFFF0H2.8086存儲器組織存儲器分段管理特殊的內存區(qū)域中斷矢量區(qū):00000H~003FFH共1KB,用以存放256種中斷類型的中斷矢量,每個中斷矢量占用4個字節(jié),共256B×4=1024B=1KB。顯示緩沖區(qū):B0000H~B0F9FH約4000(25×80×2)B,是單色顯示器的顯示緩沖區(qū),存放文本方式下,所顯示字符的ASCII碼及屬性碼;B8000H~BBF3FH約16KB,是彩色顯示器的顯示緩沖區(qū),存放圖形方式下,屏幕顯示像素的代碼。啟動區(qū):FFFF0H~FFFFFH共16個單元,用以存放一條無條件轉移指令的代碼,轉移到系統(tǒng)的初始化部分。1.運算部分

進行算術和邏輯運算任務2.2.2了解80486的內部結構2.存儲管理部分

實現虛擬存儲器而設置的,它由分段部件和分頁部件兩部分組成3.控制部分

根據指令譯碼器送來的信息產生微指令,并通過微指令對運算部分、存儲管理部分及指令譯碼器發(fā)出控制信號4.譯碼部分

指令譯碼器對指令的操作碼進行翻譯,并把翻譯后的信息通過指令總線送給控制部件

5.指令預取部件

指令預取部件中包含了兩個16字節(jié)的隊列寄存器;預取指令。6.總線接口部分

總線接口部分的功能是產生訪問微處理器以外的存儲器和輸入/輸出接口所需要的地址、數據和命令

1.80486的基本結構2.寄存器組

1)通用寄存器(1)基本結構存儲器2.寄存器組(續(xù)1)2)段寄存器

直接或間接地指出指令代碼和數據所用的地址空間

2.寄存器組(續(xù)2)3)指令指針用于保存下一條相對于代碼段寄存器的基址的偏移量物理地址形成2.寄存器組(續(xù)3)4)標志寄存器標志位指明程序運行時的微處理器的實時狀態(tài);控制位由用戶設置,以控制80486進行某種操作s-狀態(tài)標志c-控制標志x-系統(tǒng)標志2.寄存器組(續(xù)4)(2)系統(tǒng)級寄存器

段寄存器與系統(tǒng)地址寄存器一起為操作系統(tǒng)完成存儲管理,多任務環(huán)境、任務保護提供硬件支持。系統(tǒng)地址寄存器

在保護方式下用來管理4個系統(tǒng)表。由于只能在保護方式下使用,因此又稱為保護方式寄存器??刂萍拇嫫骺刂萍拇嫫鞴?個,各32位,用來存放全局性與任務無關的機器狀態(tài)。①全局描述符表寄存器GDTR②中斷描述符表寄存器IDTR③局部描述符表寄存器LDTR④任務狀態(tài)寄存器TR①CR0存放系統(tǒng)控制標識或表示處理器的狀態(tài);②CR2為頁故障線性地址寄存器,用來保存最后出現頁故障的32位線性地址③CR3為頁目錄基址寄存器,其中高20位存放頁目錄表的物理基地址,在低12位中有2位作為標志位,其余10位未用④CR1為將來Intel處理器保留。2.寄存器組(續(xù)5)(3)調試與測試寄存器

可編程調試寄存器

8個,32位,用來支持調試功能測試寄存器

5個,32位,用來存放全局性與任務無關的機器狀態(tài)。任務2.2.3尋址方式

對于一條匯編語言指令來說,指令由操作碼和操作數兩部分組成。操作數采取哪一種尋址方式,會影響機器運行的速度和效率。CPU的尋址方式越多,功能就越強,程序設計的靈活性就越大。80486有三種尋址方式:立即數尋址、寄存器尋址、存儲器尋址。

下面以8088指令執(zhí)行過程解釋尋址方式1.立即數尋址操作數在指令中直接給出立即數只能是操作數例如:在MOVAX,1020H指令中,1020H為立即數,該指令的功能是將立即數傳送到AX中2.寄存器尋址操作數存放在CPU的內部寄存器中,操作數可為8位、16位或32位通用寄存器以及16位段寄存器。例如,在MOVAL,BL指令中,該功能是將BL中的數據送至AL寄存器3.存儲器尋址80486在實模式方式下可訪問1M字節(jié)的物理存儲空間,在保護模式下可訪問4G(232)字節(jié)的物理存儲空間操作數的地址可以直接在指令中給出;也可以放在寄存器中,以間接的方式給出。80486采用分段的方式來管理存儲器,指令中只能出現存儲器的邏輯地址,不允許出現物理地址。在不同的存儲器尋址方式中或用不同的寄存器作間接尋址,操作數都存放在默認的存儲器段,否則,必須在存儲器操作數前加段超越前綴。3.存儲器尋址存儲器尋址方式根據操作數的存儲情況分為直接尋址、寄存器間接尋址、基址尋址、變址尋址、基址變址尋址、相對基址加變址尋址6種尋址方式。3.存儲器尋址(續(xù)1)

——直接尋址116位尋址:存儲器操作數的16位偏移地址直接包含在指令代碼中,默認段為數據段。如果不使用默認段,則必須加段超越前綴。例如,將數據段中偏移地址2000H處的存儲數據送至AX寄存器,MOVAX,[2000H];DS:[2000H]→AX3.存儲器尋址(續(xù)2)

——直接尋址232位尋址:用EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP等8個32位寄存器作為間接尋址寄存器,用它們存放操作數的段內偏移量。若用EAX、EBX、ECX、EDX、ESI、EDI來間接尋址,則規(guī)定操作數在DS段;若用EBP和ESP來間接尋址,則規(guī)定操作數在SS段,否則使用段超越前綴。例如,MOV[0500H],EAX ;將EAX中的數據送至DS段中偏移量;為0500H的連續(xù)四個存儲單元中3.存儲器尋址(續(xù)3)

——寄存器間接尋址1操作數在存儲器中,而操作數所在地址的偏移量在指令給定的寄存器中。3.存儲器尋址(續(xù)4)

——寄存器間接尋址216位尋址:SI、DI、BX及BP等4個16位寄存器作為間接尋址寄存器,用來存儲操作數的段內偏移量。若用SI、DI、BX來間接尋址,則默認操作數在DS段;若用BP來間接尋址,則默認操作數在SS段;否則需要使用段超越前綴進行變換。例如,將數據段中由BX指定偏移地址處的存儲數據送至AX寄存器MOVAX,[BX];DS:[BX]→AX該指令中的有效地址存放在BX寄存器中,而數據則存放在數據段主存單元中,假設BX內容為3000H,則該指令等同于MOVAX,[3000H]。3.存儲器尋址(續(xù)5)

——寄存器間接尋址332位尋址:用EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP等8個32位寄存器作為間接尋址寄存器,用它們存放操作數的段內偏移量。若用EAX、EBX、ECX、EDX、ESI、EDI來間接尋址,則默認操作數在DS段;若用EBP和ESP來間接尋址,則默認操作數在SS段,否則使用段超越前綴。例如,MOVEDI,80HMOVEAX,[EDI]該程序段,將DS段有效地址為80H的連續(xù)四個單元(80H~83H)的內容送至EAX寄存器。3.存儲器尋址(續(xù)6)

——基址尋址1在這種尋址方式中,操作數在存儲器中,其有效地址為基址寄存器的內容加上指令中給出的偏移量之和。3.存儲器尋址(續(xù)7)

——基址尋址216位尋址:在這種尋址方式中,操作數在存儲器中,而操作數所在存儲器地址的有效值為基址寄存器的內容加上指令中給出的偏移量之和。用BX及BP等2個16位寄存器作為基址寄存器。若用BX進行基址尋址,則操作數所在的約定段是DS段;若用BP進行基址尋址,則操作數所在的約定段是SS段;若不使用約定段,則加段超越前綴。3.存儲器尋址(續(xù)8)

——基址尋址332位尋址:用EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP等8個32位寄存器作為基址尋址寄存器。若用EAX、EBX、ECX、EDX、ESI、EDI來進行基址尋址,則操作數所在的約定段是DS段;若用EBP和ESP來進行尋址,則約定操作數在SS段;若不使用約定段,則加段超越前綴。例如,MOVEDX,10H[ECX]將數據段中以ECX內容與10H之和作為有效地址,取出其內容送到EDX寄存器。3.存儲器尋址(續(xù)9)

——變址尋址116位尋址:在這種尋址方式中,操作數在存儲器中,而操作數所在存儲器地址的有效值為變址寄存器的內容加上指令中給出的偏移量之和。變址寄存器只能取SI和DI兩個16位寄存器,操作數所有的段約定為DS段,若不使用約定段,則使用段超越前綴。

例如,ADDAX,10H[SI],已知DS=3000H,SI=1000H,AX=5678H,(31011H)(31010H)=0883H在上述指令中,其有效值為變址寄存器SI的值1000H加上偏移量10H,即1010H(物理地址為31010H),取出其存儲的兩個字節(jié),即0883H,再與AX之值5678相加,和為5EFBH,最后存至AX中。3.存儲器尋址(續(xù)10)

——變址尋址232位尋址:在這種尋址方式中,操作數在存儲器中,而操作數所在存儲器地址的有效值為變址寄存器的內容乘以比例因子,再加上指令中給出的偏移量。變址寄存器可取EAX、EBX、ECX、EDX、ESI、EDI、EBP等7個32位寄存器,若用EAX、EBX、EDX、ESI、EDI來進行變址尋址,則操作數所在的約定段是DS段;若用EBP來進行變址尋址,則規(guī)定操作數在SS段,否則使用段超越前綴。比例因子可取1、2、4、8。例如,MOVBX,32H[EAX*4];將數據段中以EAX的內容乘以4加上32H為有效地址,取出其內容送到BX寄存器。3.存儲器尋址(續(xù)11)

——基址變址尋址116位尋址:在這種尋址方式中,操作數在存儲器中,而操作數所在存儲器地址的有效值為基址寄存器的內容加變址寄存器的內容?;芳拇嫫魅X和BP兩個16位寄存器,變址寄存器取SI和DI兩個16位寄存器。若用BX作基址寄存器,則操作數所在的默認段是DS段;若用BP作基址寄存器,則操作數所在的默認段是SS段。若不使用默認段,則加段超越前綴。例如:MOV AX,[BX][SI]若已知DS=3000H,BX=2000H,SI=1000H,(33001H)(33000H)=279BH,則執(zhí)行上述指令后,AX中的內容是多少?在上述指令中,源操作數在數據段,其有效值EA=(BX)+(SI)=2000H+1000H=3000H,物理地址=(DS)×16+EA=33000H,取出其存儲的兩個字節(jié)279BH,存到AX中。3.存儲器尋址(續(xù)12)

——基址變址尋址232位尋址:操作數在存儲器中,而操作數所在存儲器地址的有效值為變址寄存器的內容乘以比例因子加基址寄存器的內容,再加上指令中給出的偏移量,即EA=(基址寄存器)+(變址寄存器)×比例因子基址寄存器和變址寄存器均可取EAX、EBX、ECX、EDX、ESI、EDI、EBP等7個32位寄存器,若用EAX、EBX、ECX、EDX、ESI、EDI作為基址寄存器,則操作數所在的默認段為DS段;若用EBP作基址寄存器,則默認操作數在SS段;若不使用默認段,則加段超越前綴。比例因子可取1、2、4、8。3.存儲器尋址(續(xù)13)

——相對基址加變址尋址116位尋址:操作數在存儲器中,而操作數所在存儲器地址的有效值為基址寄存器的內容加變址寄存器的內容,再加上指令中給出的偏移量之和?;芳拇嫫魅X和BP兩個16位寄存器,變址寄存器取SI和DI兩個16位寄存器。若用BX作基址寄存器,則操作數所在的約定段是DS段;若用BP作基址寄存器,則操作數所在的約定段是SS段。若不使用約定段,則需加段超越前綴。例如,ADDAX,10H[BX][SI],已知DS=3000H,BX=2000H,SI=1000H,AX=5678H,(33011H)(33010H)=179AH。其有效值為基址寄存器BX的值2000H加上變址寄存器SI的值1000H,再加上偏移量10H,即3010H,物理地址為33010H,取出其存儲的兩個字節(jié),再加上AX之值5678H,得6E12H3.存儲器尋址(續(xù)14)

——相對基址加變址尋址232位尋址:操作數在存儲器中,而操作數所在存儲器地址的有效值為基址寄存器的內容加變址寄存器的內容乘以比例因子,再加上指令中給出的偏移量。基址寄存器和變址寄存器均可取EAX、EBX、ECX、EDX、ESI、EDI、EBP等7個32位寄存器比例因子可取1、2、4、8。例如,MOVBX,32H[EBX][EAX*4];將數據段中以EAX的內容乘以4加上EBX的內容,再加上32H作為有效地址,取出其內容送到BX寄存器。3.存儲器尋址(續(xù)13)

——小結1:①在基址、變址、基址變址、基址加變址這4種尋址方式中,有效地址表達式中的位移量是無符號整數。②帶有比例因子的變址尋址,這種尋址方式常用于檢索一維數組元素,當數組元素是2字節(jié)時,比例因子取2。同理,當一維數組元素都由4字節(jié)長或8字節(jié)長的元素組成時,比例因子應選4或8。③帶有比例因子的基址加變址尋址,這種尋址方式常用于檢索二維數組元素。3.存儲器尋址(續(xù)14)

——小結2:④當CPU工作在實地址模式的時候,段地址最大為64K,不論采用16位寄存器尋址還是32位寄存器尋址都必須保證CPU最終算出的有效地址不超過FFFFH,而且操作數最高字節(jié)單元的有效地址也不能超過FFFFH,否則執(zhí)行尋址操作時系統(tǒng)將要癱瘓。MOVEBX,10000H;EBX中有效地址大于FFFFHMOVAL,[EBX];執(zhí)行該指令,系統(tǒng)癱瘓MOVSI,0FFFFH;雖然SI中有效地址不大于FFFHMOVAX,[SI];但[SI]尋址的是雙字節(jié)數,高字節(jié)有效地址為10000H,超出了FFFFH,執(zhí)行該指令后系統(tǒng)死機。3.存儲器尋址(續(xù)15)

——小結3:⑤對于存儲器尋址方式,操作數在哪個段,都有一個基本約定,若在指令中無特別說明,則按約定段(也稱默認段)尋找操作數,大多數情況下都使用約定段;若超越了約定段,則指令中在操作數前必須加段超越前綴。任務2.2.4掌握匯編指令系統(tǒng)數據傳送是計算機中最基本、最重要的一種操作。這類指令用于實現存儲器與寄存器、寄存器與寄存器,寄存器與I/O接口、以及存儲器與I/O接口之間的數據傳送。其共同特點是源操作數不變,不影響標志寄存器的狀態(tài)。

數據傳送指令包括:通用傳送指令、堆棧操作指令、標志傳送指令、地址傳送指令、I/O傳送指令等。

1.數據傳送類指令1.通用數據傳送指令

——數據傳送指令MOV格式:MOV目標操作數,源操作數示例:MOVAX,1247H;立即數到寄存器,1247H→AXMOV[1200H],12H;立即數到存儲器,12H→[1200H]MOVAL,DH ;DH→AL,字節(jié)傳送MOVEAX,ESI;ESI→EAX,雙字傳送MOVBYTEPTR25H[BX],12H ;12H→數據段由基址確定的字節(jié)型單元中MOVWORDPTR25H[BX],12H ;12H→數據段由基址尋址確定的字型單元中1.通用數據傳送指令

——數據傳送指令MOV(續(xù))注意事項:雙操作數指令中,目標操作數與源操作數必須類型一致。立即數只能作為源操作數,不能作目標操作數。除串操作外,不允許操作數都是存儲單元。存儲器與存儲器之間不能進行數據傳送。CS不能作為目標操作數。1.通用數據傳送指令

——符號擴展傳送指令格式:MOVSX目標寄存器,源操作數 ;有符號擴展傳送指令MOVZX目標寄存器,源操作數 ;無符號擴展傳送指令示例:MOVAL,90H ;90H→ALMOVSXBX,AL ;FF90H→BX,AL為有符號數,FFH為AL符號位的擴展。MOVZXDX,AL ;0090H→DX,AL為無符號數,DX的高8位補01.通用數據傳送指令

——交換指令XCHG格式:XCHG目標操作數,源操作數;交換指令用來將源操作數與目標操作數的內容互換示例:MOVAX,1199HXCHGAH,AL;AH=99H,AL=11HMOVWVAR,5566HXCHGAX,WVAR;AX=5566H,WVAR=9911HXCHGAL,BYTEPTRWVAR+1;AX=5599H,WVAR=6611H1.通用數據傳送指令

——字節(jié)交換指令格式:BSWAP32位寄存器功能:將32位通用寄存器的第一個字節(jié)和第四個字節(jié)交換,第二字節(jié)和第三字節(jié)交換。指令執(zhí)行后不影響標志位。示例:數據交換MOVEDX,12345678HBSWAPEDX ;EDX=78563412H1.通用數據傳送指令

——查表指令

格式:XLAT 表頭變量名功能:取出DS:[BX+AL]中的第一個字節(jié)→AL,或者取出DS:[EBX+AL]中的第1個字節(jié)→AL。例如,將表格中的6號元素(假設為20H)取出。

LEABX,TABLE;取表頭TABLE的有效地址→BXMOVAL,06H;表中的偏移量→ALXLATTABLE;20H→AL1.通用數據傳送指令

——I/O數據傳送指令格式:IN累加器,端口功能:將端口的數據讀出送入CPU累加器。格式:OUT端口,累加器功能:將CPU累加器中的數據寫入端口。示例:INAL,28H ;端口地址為28H的字節(jié)數據讀出送ALOUT15H,AL ;AL的數據寫入端口地址為15H中MOVDX,03FCH;DX指向的端口地址為03FCHIN EAX,DX ;DX端口中的數據輸入到EAX1.堆棧操作指令

——進棧指令/進棧指令格式:PUSH源操作數;把源操作數壓入SP所指的棧頂格式:POP目標操作數;把SP所指的棧頂的內容彈到目標操作數示例:PUSHAX;SP-2→SP,AX→(SP)PUSHEBX;ESP-4→ESP,EBX→(ESP)POPBX;(SP)→BX,SP+2→SPPOPEBX;(ESP)→EBX,ESP+4→ESP2.堆棧操作指令

——通用寄存器進棧/出棧指令

16位通用寄存器進棧/出棧指令格式:PUSHA;依次把AX,CX,DX,BX,SP,BP,SI和DI等8個通用寄存器的內容壓入堆棧;格式:POPA;將當前棧頂指針SP所指的16個字節(jié),依次彈出,裝入DI,SI,BP,SP,BX,DX,CX和AX等8個通用寄存器,再使SP+16→SP。32位通用寄存器進棧/出棧指令格式:PUSHAD;8個通用寄存器的內容壓入堆棧;格式:POPAD;將當前棧頂指針ESP所指的32個字節(jié),依次彈出,裝入EDI,ESI,EBP,ESP,EBX,EDX,ECX和EAX等8個通用寄存器中,再使ESP+32→ESP。1.標志操作指令

標志寄存器傳送指令格式:LAHF;將標志寄存器低8位傳送到AH寄存器格式:SAHF;將AH寄存器的內容傳送到標志寄存器低8位16位標志寄存器進棧/出棧命令格式:PUSHF;將標志寄存器低16位壓入堆棧格式:POPF;將當前棧頂指針SP所指的一個字彈至標志寄存器的低16位32位標志寄存器進棧/出棧指令格式:PUSHFD;將32位標志寄存器的內容壓入堆棧格式:POPFD;將當前棧頂指針ESP所指的一個雙字彈至32位標志寄存器1.地址傳送指令

——有效地址指令LEA格式:LEA目標寄存器,源操作數目標為16位或32位寄存器,源操作數為存儲器操作數。該指令將存儲單元的有效地址傳送到目標寄存器中。例如:已知BX=2000H,SI=3000H,執(zhí)行下列指令后,BX的內容是多少?LEABX,10H[BX][SI]有效地址EA=BX+SI+偏移量=2000H+3000H+10H=5010H,所以BX=5010H1.地址傳送指令

——指針傳送指令

格式:操作碼助記符目標寄存器,源操作數功能:操作碼助記符有:LDS,LES,LGS,LSS,LFS,其后兩位字母代表段寄存器,它們是隱含的目標寄存器,共有5條地址指針傳送指令。這類指令傳送一個目標地址,包括段地址和段內偏移量。例如:已知DS=A000H,BX=0800H,(A0801H)(A0800H)=1234H,(A0803H)(A0802H)=3000H,則執(zhí)行下列指令后,DS:SI等于多少?LDS SI,[BX]該指令是一寄存器間接尋址,先計算出BX所指向的物理地址=DS×16+BX=A0800H,將其連續(xù)的兩個單元的數據分別送到DS,SI,得DS=3000H,SI=1234H。2.算術類運算指令

80X86的指令系統(tǒng)提供了加減乘除等四則運算指令,可用于字節(jié)、字、雙字的有符號數或無符號數的運算,若為有符號數,則以補碼形式表示,這時有符號數和無符號數的運算可使用相同的指令。80486還可完成BCD碼的運算。算術運算指令會影響到標志位的狀態(tài)。

(1)加法和減法指令

不帶進位的加、減指令格式:ADD 目標操作數,源操作數功能:目標操作數+源操作數→目標操作數格式:SUB 目標操作數,源操作數功能:目標操作數-源操作數→目標操作數帶進位加、減指令格式:ADC 目標操作數,源操作數功能:目標操作數+源操作數+CF→目標操作數格式:SBB 目標操作數,源操作數功能:目標操作數-源操作數-CF→目標操作數其中的CF是上一條指令執(zhí)行后產生的進位/借位標志。示例(1)加法和減法指令(續(xù))INC格式:INC目標操作數;目標操作數+1→目標操作數DEC格式:DEC目標操作數;目標操作數-1→目標操作數示例1NEG格式:NEG目標操作數;0-目標操作數→目標操作數示例2CMP格式:CMP目標操作數,源操作數;用目標操作數減去源操作數后,結果不保留,但影響標志寄存器的AF、CF、OF、PF、SF、ZF標志位,兩操作數保持不變。XADD格式:XADD目標操作數,源操作數;將源操作數和目標操作數交換,再將交換后的源操作數和目標操作數相加,結果送目標操作數。示例3(2)符號擴展指令CBW格式:CBW;16位擴展CWD格式:CWD;32位擴展CWDE格式:CWDE;32位擴展CDQ格式:CDQ;64位擴展功能:將(E)AX中8、16、32位帶符號數,進行帶符號擴展為指定形式,送(EDX)和(E)AX中。例如,MOVAL,64H;AL=64H,表示10進制數100CBW;將符號0擴展,AX=0064H,仍然表示100MOVAX,0FF00H;AX=FF00H,表示有符號10進制數-256CWD;將符號位“1”擴展,DX.AX=FFFFFF00H,仍然表示-256(3)乘法和除法指令

——乘法指令MUL格式:MUL乘數;無符號二進制數乘法指令IMUL格式1:IMUL乘數 ;帶符號數的乘法指令,同MUL。IMUL格式2:IMUL目標操作數,源操作數;將目標操作數乘以源操作數,結果回送目標操作數。IMUL格式3:IMUL目標操作數,源操作數,立即數MOV AL,64H;表示無符號數,有符號數100MOV BL,0A5H;表示無符號數是165、有符號數則是-91若執(zhí)行:①MULBL;無符號數乘法:AX=4074H,表示十進制數為16500;OF=CF=1,說明AX高8位含有有效數字,不是符號擴展②IMULBL;有符號字節(jié)乘法:AX=DC74H,表示-9100(3)乘法和除法指令

——除法指令

格式:DIV 除數;無符號數的除法指令IDIV除數;帶符號數的除法指令

示例:MOVDX,4MOVAX,3;DX.AX=40003H,表示十進制數262147MOVWORDPTR[30H],8000H

;8000H表示無符號數;32768、有符號數-32768,若執(zhí)行①DIVWORDPTR[30H]

;無符號數運算,商AX=8,余數DX=3②IDIVWORDPTR[30H]

;有符號數運算,商AX=-8,余數DX=3(4)BCD碼調整指令BCD碼又分壓縮和非壓縮兩種類型:所謂壓縮,就是用一個字節(jié)表示兩位BCD數;所謂非壓縮BCD數,就是一個字節(jié)只表示一位BCD數,有效位在低4位,高4位為0。如表所示簡單對比了4種編碼數據。0604H2

二進制編碼真值(十進制)壓縮BCD碼

非壓縮BCD碼

ASCⅡ碼

64

02H

40H

02H64H

02H32H3634H(4)BCD碼調整指令

——壓縮BCD碼加法和減法調整指令

DAA格式:DAA功能:加法調整指令,把AL的內容轉換成兩位壓縮的BCD數。DAS格式:DAS功能:減法調整指令,把AL的內容轉換成兩位壓縮的BCD數。示例MOVAL,56H;AL=56H,作為壓縮BCD碼表示56MOVBL,35H;BL=35H,作為壓縮BCD碼表示35ADD AL,BL;按照二進制數進行加法:AL=56H+35H=8BHDAA ;按照壓縮BCD碼進行調整:AL=91H ;實現壓縮BCD碼加法:56+35=91SUB AL,49H;按照二進制數進行減法:AL=91H-49H=48HDAS ;按照壓縮BCD碼進行調整:AL=42H,;實現壓縮BCD碼減法:91-49=42(4)BCD碼調整指令

——非壓縮BCD碼加法和減法調整指令AAA格式:AAA功能:加法調整指令,跟在以AL為目的操作數的ADD或ADC指令之后,對AL進行非壓縮BCD碼調整;如果調整中產生了進位,則將進位1加到AH中,同時CF=AF=1,否則CF=AF=0。AAS格式:AAS功能:減法調整指令,跟在以AL為目的操作數的SUB或SBB指令之后,對AL進行非壓縮BCD碼調整;如果調整中產生了借位,則將AH減去借位1,同時CF=AF=1,否則CF=AF=0。示例

(4)BCD碼調整指令

——非壓縮BCD碼乘法調整指令AAM格式:AAM;將AX中的乘積調整為非壓縮BCD碼。非壓縮BCD碼乘法調整指令AAM跟在以AX為目的操作數的MUL指令之后,對AX進行非壓縮BCD碼調整。利用MUL相乘的兩個非壓縮BCD碼的高4位必須為0。示例MOVAX,705H ;BCD數7→AH,BCD數5→ALMULAH ;AL×AH=23H→AXAAM;把結果AX調整為兩個非壓縮BCD數0305H

(5)BCD碼調整指令

——非壓縮BCD碼除法調整指令AAD格式:AAD;在除法運算前,把默認的AX中的兩位非壓縮BCD數調整成二進制數,然后再用DIV指令除以一個非壓縮的BCD碼數,這樣得到非壓縮BCD碼數的除法結果。其中,要求AL,AH和除數的高4位為0。示例:非壓縮BCD碼的除法:MOVBL,03HMOVAX,0806HAAD ;將86轉換成二進制數,則AX=0056HDIV BL ;AL為二進制商11100,AH為余數AAD對標志位的影響和AAM對標志位的影響相一致。3.程序控制轉移類指令計算機執(zhí)行程序一般是順序地逐條執(zhí)行指令,但經常需要根據不同的條件做不同的處理,比如,有時需要跳過幾條指令,有時需要跳過幾段指令,有時需要重復執(zhí)行某段程序,或者轉移到另一個程序段去執(zhí)行。用于控制程序流程的指令,包括轉移、循環(huán)、過程調用和中斷調用。

(1)無條件轉移指令

——JMP指令1)段內直接轉移格式:JMPSHORT標號 ;短轉移

JMPNEARPTR標號;近轉移

2)段內間接轉移格式:JMP寄存器操作數 ;目標地址在寄存器中

JMP存儲器操作數 ;目標地址在存儲器中3)段間直接轉移格式:JMPFARPTR標號

4)段間間接轉移格式:JMPFARPTR存儲器操作數(2)無條件轉移指令

——子程序調用指令CALL

1)段內直接調用格式:CALL過程名2)段內間接調用

格式:CALL寄存器操作數 ;入口地址在寄存器中CALL存儲器操作數 ;入口地址在存儲器中3)段間直接調用格式:CALLFARPTR過程名4)段間間接調用格式:CALLFARPTR[寄存器];入口地址在存儲器中(3)無條件轉移指令

——RET指令子程序返回指令,執(zhí)行與CALL指令相反的操作,從子程序返回到主程序。該指令有帶操作數和不帶操作數兩種形式。格式:RET;無返回參數RETn;有返回參數功能:返回指令是子程序的最后一條指令,使子程序結束后,程序返回到主程序的斷點處。

(4)條件轉移指令條件轉移最常見的用法是緊跟在比較指令之后,測試比較指令產生的狀態(tài)標志。當條件滿足時執(zhí)行指定標號處的指令,否則順序執(zhí)行。在實模式方式下,轉移范圍為-32768~+32767字節(jié)。條件轉移指令有統(tǒng)一的格式,即:

操作碼助記符 轉移地址標號各種轉移條件隱含在操作碼助記符當中,有的指令又有幾種等價的操作碼助記符,用戶可以按照自己的習慣選用。(4)條件轉移指令(續(xù)1)

1)單標志條件轉移指令使用如下表所示

指令助記符JC/JB/JNAEJNC/JNB/JAEJZ/JEJNZ/JNEJSJNSJP/JPEJNP/JPOJOJNO判斷條件CF=1時轉移CF=0時轉移ZF=1時轉移ZF=0時轉移SF=1時轉移SF=0時轉移PF=1時轉移PF=0時轉移OF=1時轉移OF=0時轉移

說明有進位/低于/不高于且不等于時轉移無進位/不低于/高于或等于時轉移結果為0/等于時轉移結果不為0/不等于時轉移結果為負數時轉移結果為正數時轉移結果中1的個數為偶數時轉移結果中1的個數為奇數時轉移有溢出時轉移無溢出時轉移

(4)條件轉移指令(續(xù)2)2)無符號數比較的條件轉移指令指令根據兩個標志位組合條件判斷是否需要轉移,如下表所示。指令助記符JA/JNBEJNA/JBEJC/JB/JNAEJNB/JAE/JNC判斷條件CF=0∧ZF=0時轉移CF=1∨ZF=1時轉移CF=1∧ZF=0時轉移CF=0∨ZF=1時轉移

說明(A-B)高于/不低于且不等于(A>B)時轉移不高于/低于或等于(A≤B)時轉移低于/不高于且不等于(A<B)時轉移不低于/高于或等于(A≥B)時轉移(4)條件轉移指令(續(xù)3)3)有符號數比較的條件轉移指令根據三個標志位組合條件判斷是否需要轉移,如下表所示。

++++指令助記符JG/JNLEJGE/JNLJL/JNGEJLE/JNG判斷條件ZF=0∧SFOF=0ZF=1∨SFOF=0ZF=0∧SFOF=1ZF=1∨SFOF=1說明(A-B)大于/不小于且不等于(A>B)時轉移大于等于/不小于(A≥B)時轉移小于/不大于且不等于(A<B)時轉移小于等于/不大于(A≤B)時轉移(4)條件轉移指令(續(xù)4)4)測試CX條件轉移指令使用如下表所示

指令助記符JCXZJECXZ判斷條件CX=0時,轉移ECX=0時,轉移

說明(A-B)轉移范圍-128~+127轉移范圍-128~+127,只適用

于32位微處理器,計數器是ECX

(4)條件轉移指令(續(xù)5)示例:兩個32位有符號數DATA_1、DATA_2,若DATA_1≥100,則程序轉移到BIGGER處;否則計算DATA_1-DATA_2,若DATA_1<DATA_2,則將RESULT單元置FFH,否則置00H。

MOVEAX,DATA_1 ;數據DATA_1送EAXMOVEBX,DATA_2 ;數據DATA_2送EBXCMPEAX,100 ;比較大小JGEBIGGER ;DATA_1≥100,跳轉SUBEAX,EBX ;否則,兩數相減JLSMALL ;若DATA_1<DATA_2,跳轉MOVDL,00HJMPRELTSMALL:MOVDL,0FFHRELT:MOVRESULT,DL………BIGGER:………(5)循環(huán)指令

這類指令用(E)CX計數器中的內容控制循環(huán)次數,先將循環(huán)計數值存放在(E)CX中,每循環(huán)一次(E)CX內容減1,直到(E)CX為0時循環(huán)結束。此類指令的轉移范圍是-128~+127。

應用說明

指令助記符

指令功能

LOOPLOOPZ/LOOPELOOPNZ/LOOPNE(E)CX-1→(E)CX(E)CX-1→(E)CX(E)CX-1→(E)CX若(E)CX≠0則循環(huán)若(E)CX≠0且ZF=1則循環(huán)若(E)CX≠0且ZF=0則循環(huán)(5)循環(huán)指令(續(xù)1)示例:

含有100個字的數組,其中有若干個0,找出第一個0,并將其有效地址送ADDR單元。

LEABX,ARRAY;數組ARRAY的有效地址→BXLEADI,ADDR;ADDR單元的有效地址→DIMOVSI,0FFFEH;-2→SIMOVCX,100;設元素個數NEXT:INCSIINCSI;比較的是字CMPWORDPTR[BX+SI],0 LOOPNZNEXT;與0比較,不為0,循環(huán)ADDSI,BX;為0,取其有效地址MOV[DI],SI;送ADDR單元(6)中斷指令與系統(tǒng)功能調用

處理器因為某種原因將當前程序掛起(暫停),轉去處理這個特殊事件的程序,處理結束再返回被掛起的程序,上述過程稱為“中斷”。當前程序被掛起的位置稱為“斷點”,處理特殊事件的程序稱為“中斷服務程序”。指令功能及說明指令助記符

CLISTIINTOLIDTSRCSIDTDEST復位中斷允許標志,0→IF置位中斷允許標志,1→IF溢出中斷指令:若OF=1,產生4號中斷;否則順序執(zhí)行根據SRC所指存儲單元內容修改IDTR的基限和限長將IDTR內容保存到DEST所指向的存儲單元(6)中斷指令與系統(tǒng)功能調用(續(xù)1)在實模式下,中斷矢量以4個字節(jié)存放在中斷矢量表中,中斷矢量表為1KB,中斷矢量表允許存放256個中斷矢量,每個中斷矢量包含一個中斷服務程序地址(段基址和16位偏移地址),中斷矢量地址指針由中斷類型碼乘以4得到。在保護模式下,用中斷描述符表代替中斷矢量表,每個中斷有8個字節(jié)的中斷描述符來說明,中斷描述符表允許256個中斷描述符,每個中斷描述符包含一個中斷服務地址(段選擇符、32位偏移地址、訪問權限等)。中斷描述符地址指針由中斷類型碼乘以8得到。中斷指令格式:INTn功能:產生中斷類型碼為n的軟中斷,該指令包含中斷操作碼和中斷類型碼兩部分,中斷類型碼n為8位,取值范圍為0~FFH。實模式下,n×4獲取中斷矢量表地址指針;保護模式下,n×8獲取中斷描述符表地址指針;根據地址指針,從中斷矢量表或中斷描述符表中取出中斷服務程序地址送IP/EIP和CS中,控制程序轉移去執(zhí)行中斷服務程序。中斷返回指令格式:IRET/IRETD功能:該指令實現在中斷服務程序結束后,返回到主程序中斷斷點處,繼續(xù)執(zhí)行主程序。(6)中斷指令與系統(tǒng)功能調用(續(xù)2)系統(tǒng)功能調用方法中斷調用指令的執(zhí)行過程類似于子程序的調用,只不過要保存和恢復標志寄存器。IMBPC系列微機中的基本輸入輸出系統(tǒng)ROM-BIOS和操作系統(tǒng)DOS都提供了豐富的中斷服務讓用戶使用。另一方面,匯編程序提供的功能非常有限,用戶只能利用ROM-BIOS和操作系統(tǒng)提供的資源,所以系統(tǒng)功能調用是匯編語言程序設計的一個重要方面。ROM-BIOS和DOS功能調用有如下4個步驟:①在AH寄存器中設置系統(tǒng)功能調用號②在指定寄存器中設置入口參數③用中斷調用指令(INTn)執(zhí)行功能調用④根據出口參數分析功能調用執(zhí)行情況(6)中斷指令與系統(tǒng)功能調用(續(xù)3)DOS輸入輸出功能調用鍵盤輸入單字符1號系統(tǒng)功能調用,其調用格式:MOVAH,01HINT21H鍵盤輸入字符串0AH系統(tǒng)功能調用,其調用格式:MOVDX,緩沖區(qū)偏移量MOVAH,0AHINT21H功能:執(zhí)行AH=01號功能調用,將從鍵盤讀取一個字符,并將該字符回顯到屏幕上。若無字符可讀,則一直等待到輸入字符,輸入字符的ASCⅡ碼值通過AL返回。

功能:執(zhí)行AH=0AH號功能調用,等待用戶輸入一個或多個字符,最后回車確認,輸入字符的ASCⅡ碼順序放在DS:DX指定的存儲緩沖區(qū),并在屏幕回顯。(6)中斷指令與系統(tǒng)功能調用(續(xù)4)輸出單個字符2號系統(tǒng)功能調用,其調用格式:MOVDL,‘鍵盤輸入字符’MOVAH,02HINT21H輸出字符串09號功能調用,其調用格式:MOVDX,字符串偏移地址MOVAH,09HINT21H功能:執(zhí)行AH=02H號功能調用,將在顯示器當前光標位置顯示DL給定的字符,且光標移動到下一個字符位置。功能:執(zhí)行AH=09H號功能調用,從當前光標處開始顯示DS:DX指向的字符串。(6)中斷指令與系統(tǒng)功能調用(續(xù)5)4)ROM-BIOS輸入輸出功能調用鍵盤字符輸入鍵盤輸入功能調用是INT16H,其調用格式:MOVAH,0INT16H顯示器顯示字符顯示器輸入輸出功能調用是INT10H,其調用格式:MOVAH,OEHINT10H功能:執(zhí)行該調用,實現一個字符的輸入。當用戶按鍵后,該調用返回鍵值代碼給AX。

功能:執(zhí)行該調用,實現一個字符的輸出。

4.邏輯運算與位操作類指令(1)邏輯運算指令邏輯與指令AND邏輯或OR邏輯異或XOR邏輯非NOT(2)移位與循環(huán)移位指令一般移位指令循環(huán)移位指令雙精度移位指令(3)位操作指令測試指令位測試指令位掃描指令(1)邏輯運算指令

邏輯與指令AND格式:AND目標操作數,源操作數邏輯或OR格式:OR目標操作數,源操作數邏輯異或XOR格式:XOR目標操作數,源操作數邏輯非NOT格式:NOT目標操作數功能:源操作數和目標操作數按位相“與”,結果回送目標操作數。只有相“與”的兩位都是1,結果才是1;否則,“與”的結果為0。功能:源操作數和目標操作數按位相“或”,結果回送目標操作數。只有相“或”的兩位有1位是1,結果是1;否則,“或”的結果為0。

功能:源操作數和目標操作數按位相“異或”,結果回送目標操作數。相“異或”的兩位不相同時,結果是1;否則,“異或”的結果為0。功能:把目標操作數按位取反后送回目標操作數,不影響標志。即原來為0的位變?yōu)?,原來為1的位變?yōu)?。(2)移位與循環(huán)移位指令一般移位指令算術左移:SAL 操作數,移位位數邏輯左移:SHL 操作數,移位位數算術右移:SAR 操作數,移位位數邏輯右移:SHR 操作數,移位位數移位過程如下圖所示

(2)移位與循環(huán)移位指令(續(xù)1)循環(huán)移位指令

格式:ROL操作數,移位次數;不含進位的循環(huán)左移ROR操作數,移位次數;不含進位的循環(huán)右移 RCL操作數,移位次數;含進位的循環(huán)左移RCR操作數,移位次數;含進位的循環(huán)右移移位過程如下圖所示

(2)移位與循環(huán)移位指令(續(xù)2)雙精度移位指令格式:SHLD目標操作數,源操作數,移位位數;雙精度左移SHRD目標操作數,源操作數,移位位數;雙精度右移

移位過程如下圖所示

示例:MOVAX,3AF2HMOVBX,9C00HSHLDAX,BX,7;AX=794EH,BX=9C00H(3)位操作指令

測試指令格式:TEST目標操作數,源操作數位測試指令格式:BT目標操作數,源操作數;位測試BTR目標操作數,源操作數;位測試置0BTS目標操作數,源操作數;位測試置1BTC目標操作數,源操作數;位測試取反

位掃描指令格式:BSF目標操作數,源操作數;向前位掃描指令BSR目標操作數,源操作數;向后位掃描指令

功能:源、目標操作數相“與”,但結果不送回給目標操作數,對標志位的影響與AND指令相同。

功能:按照源操作數指定的位號,測試目標操作數,當指令執(zhí)行時,被測試位的狀態(tài)被復制到進位標志CF。BT執(zhí)行后,目標操作數不變,而BTR、BTS、BTC執(zhí)行后,測試位分別被置0、置1和取反。功能:BSF從源操作數的最低位開始向高位掃描;BSR從源操作數的最高位開始向低位掃描。這兩個指令都是將遇到的第一個“1”所在的位序號存入目標寄存器中。若所有的位都為0,則ZF=0,否則ZF=1。5.串操作指令串操作指令能對數據串進行諸如傳送、比較、搜索、讀和寫等基本操作,加快數據處理速度、縮短程序長度。串操作通常以DS:(E)SI來尋址源串,以ES:(E)DI來尋址目標串,對于源串允許段超越。(E)SI或(E)DI這兩個地址指針在每次串操作后,都自動進行修改,以指向串中下一個串元素。地址指針修改是增量還是減量由方向標志DF來確定。

當DF=0時,(E)SI及(E)DI的修改為增量;反之,為減量。根據串元素類型不同,地址指針增減量也不同5.串操作指令(續(xù)1)1.重復前綴指令

REPREPE/ZREPNE/NZ

助記符

判斷條件說明(E)CX≠0(E)CX≠0且ZF=1(E)CX=0且ZF=0(E)CX=(E)CX-1,若(E)CX≠0則重復(E)CX=(E)CX-1,若(E)CX≠0且ZF=1則重復(E)CX=(E)CX-1,若(E)CX≠0且ZF=0則重復5.串操作指令(續(xù)2)方向標志命令格式:CLD/STD功能:CLD為清除方向標志,即將DF置“0”。STD為設置方向標志,即將DF置“1”。(1)串傳送指令

串傳送指令格式:[REP]MOVSB ;字節(jié)傳送[REP]MOVSW ;字傳送[REP]MOVSD ;雙字傳送功能:將數據段DS:(E)SI規(guī)定的源串元素復制到附加段ES:(E)DI規(guī)定的目的串單元中。若使用重復前綴REP,則每傳送一次,(E)CX自動減1,直至(E)CX=0,該指令對標志位無影響。

(2)串比較指令格式:[REPE/Z][REPNE/NZ] CMPSB;字節(jié)比較[REPE/Z][REPNE/NZ] CMPSW;字比較[REPE/Z][REPNE/NZ] CMPSD;雙字比較功能:將數據段DS:(E)SI規(guī)定的源串元素減去附加段ES:(E)DI指出的目標串對應元素,不保留結果,僅影響標志位CF、AF、PF、OF、ZF、SF。當源串元素與目的串元素值相同時,ZF=1,否則ZF=0,每執(zhí)行一次串比較指令,根據DF的值和串元素數據類型自動修改(E)SI和(E)DI。在串比較指令前加重復前綴REPE/Z,每比較一次,(E)CX自動減1,若對應元素相等(ZF=1)且(E)CX≠0,則重復比較,否則結束比較。若用REPNE/NZ,則是對應元素不相等(ZF=0),且(E)CX≠0,重復比較。(3)串搜索指令串搜索指令格式:[REPE/Z][REPNE/NZ]SCASB ;字節(jié)搜索[REPE/Z][REPNE/NZ]SCASW ;字搜索[REPE/Z][REPNE/NZ]SCASD ;雙字搜索功能:將AL、AX或EAX中的值減去附加段中ES:(E)DI規(guī)定的目標串的元素,結果不保留,僅影響CF、AF、PF、SF、OF、ZF。當AL、AX或EAX的值與目的串元素相同時,ZF=1,否則ZF=0。每執(zhí)行一次串掃描指令,根據DF的值和串元素數據類型自動修改(E)DI。在串搜索指令前加重復前綴REPE/Z,每比較一次,(E)CX自動減1,若累加器的值與串元素相等(ZF=1)且(E)CX≠0,則重復比較,否則結束比較。若用REPNE/NZ,則累加器的值與串元素不相等(ZF=0),且(E)CX≠0,重復比較,否則結束。(4)串存儲指令串存儲指令格式:[REP]STOSB;字節(jié)存儲[REP]STOSW;字存儲[REP]STOSD;雙字存儲功能:將累加器中值存入ES:(E)DI所指的目標串存儲單元中。若使用重復前綴REP,則表示將累加器的值連續(xù)送目標串存儲單元,直到(E)CX為0。該指令不影響標志位。該指令重復執(zhí)行可建立一個數值相等的數據串。(5)串裝入指令串裝入指令格式:LODSB ;字節(jié)裝入LODSW ;字裝入LODSD ;雙字裝入功能:將數據段DS:(E)SI所指的源串元素裝入累加器中。源串指針在(E)SI中,元素個數在CX中,該指令每執(zhí)行一次,自動修改(E)SI的值,累加器的內容就改變,只保留串中最后一個元素。該指令一般不重復執(zhí)行。不影響標志位。6.處理器控制類指令處理器控制指令用來控制CPU的狀態(tài),使CPU暫停、等待或空操作等。處理機控制指令完成簡單的控制功能。標志位控制指令

指令格式

功能

CLCSTCCMCCLDSTD清除進位位,0→CF進位位置位,1→CF進位位求反,→CF清除方向標志,0→DF方向標志置位,1→DF6.處理器控制類指令(續(xù)1)空操作指令格式:NOP功能:空操作除使(E)IP加1外,不做任何操作。暫停指令格式:HLT功能:使CPU處于暫停狀態(tài),不執(zhí)行任何操作,不影響標志。重啟動、CPU響應外部中斷可破壞暫停狀態(tài),執(zhí)行HLT下一條指令。等待指令格式:WAIT功能:CPU處于等待狀態(tài),可用該指令等待外部中斷,中斷結束后仍返回WAIT狀態(tài)。6.處理器控制類指令(續(xù)2)換碼指令格式:ESC功能:CPU實質上執(zhí)行空操作,將控制權交給系統(tǒng)中其它主設備,該主設備可利用80486的尋址方式并從存儲器中獲得操作數。封鎖指令格式:LOCK功能:是指令前綴,可放在任何指令前,迫使引腳為低電平,使得該指令以后,系統(tǒng)中其它的主設備不能占有總線,從而對總線進行封鎖。任務2.2.5了解匯編語言的源程序格式

——程序開始偽指令語句程序開始可以用name或title為模塊取名字。name的格式:

name模塊名匯編程序將以給出的“模塊名”作為模塊的名字。如果程序中沒有name,則也可使用title偽指令。程序偽指令title的格式:

title文本該偽指令是指定一個標題,以便在列表文件中每一頁的第一行都顯示這個標題。如果程序中沒有name這個偽指令,則匯編程序將用“文本”的前六個字符作為模塊名。如果程序中既無name又無title偽指令,則將用源文件名作為模塊名。任務2.2.5

匯編語言的源程序格式(續(xù)1)

——邏輯段偽指令語句邏輯段的完整定義由segment和ends這一對偽指令實現,格式如下:段名segment[定位][組合][‘類別’]┇;語句序列段名endssegment偽指令說明一個邏輯段的開始,ends偽指令表示邏輯段的結束。段名是有效的標識符,不可缺少,且段的開始和結束的段名必須一致。段名的選取由用戶自己設定。完整段定義偽指令可以指定段屬性,如不指定,則采用默認參數。段屬性主要用于多模塊的程序設計中。任務2.2.5匯編語言的源程序格式(續(xù)2)

——指定段址偽指令語句指定段址偽指令assume的格式如下:assume段寄存器名:段名[,段寄存器名:段名,…]其中段寄存器名是指6個段寄存器cs、ds、es、ss、fs、gs中的一個。段寄存器與段名之間必須用“:”分隔。assume偽指令建立段寄存器與段的缺省關系。assume偽指令指定邏輯段與段寄存器的關系,但并不為段寄存器設定初值。程序中如果使用數據段或附加段,需要明確對ds和es賦值。只要正確書寫源程序,cs,ip和ss,sp值將會

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論