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

下載本文檔

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

文檔簡(jiǎn)介

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

項(xiàng)目二項(xiàng)目二微處理器指令系統(tǒng)本項(xiàng)目主要講解微處理器指令系統(tǒng)的基本知識(shí),包括8086/80486內(nèi)部結(jié)構(gòu)、寄存器組;微機(jī)系統(tǒng)中常用尋址方式;數(shù)據(jù)傳送類指令、算術(shù)運(yùn)算指令、邏輯運(yùn)算與位操作指令、串操作類指令、控制轉(zhuǎn)移類指令、處理器控制類指令等指令格式和功能。項(xiàng)目導(dǎo)讀第2章微處理器指令系統(tǒng)□了解8086的內(nèi)部結(jié)構(gòu),了解它的寄存器組?!跬ㄟ^(guò)對(duì)比8086,了解80486的內(nèi)部結(jié)構(gòu)。□掌握微處理器的尋址方式?!跽莆瘴⑻幚砥鞯闹噶钕到y(tǒng)及指令功能。

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

在了解8086及80486的內(nèi)部結(jié)構(gòu)基礎(chǔ)上,把重點(diǎn)放在理解微處理器的尋址方式及指令系統(tǒng)的命令格式及功能上。學(xué)習(xí)建議本項(xiàng)目教學(xué)安排20學(xué)時(shí),其中理論14學(xué)時(shí),動(dòng)手實(shí)踐6學(xué)時(shí)。

學(xué)習(xí)進(jìn)度2.1項(xiàng)目開(kāi)篇一個(gè)簡(jiǎn)單的匯編語(yǔ)言程序的編寫(xiě)例2-1要求編寫(xiě)一段匯編語(yǔ)言程序,完成求和SUM=X+Y功能。

一個(gè)匯編語(yǔ)言源程序是由許多語(yǔ)句組成。2.1項(xiàng)目開(kāi)篇要求編寫(xiě)一段匯編語(yǔ)言程序,完成求和SUM=X+Y功能。

注:本程序在MASM5.1中調(diào)試,若在6.11中需調(diào)整變量。題目要求一個(gè)簡(jiǎn)單的匯編語(yǔ)言程序的編寫(xiě)例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

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

進(jìn)行算術(shù)和邏輯運(yùn)算任務(wù)2.2.2了解80486的內(nèi)部結(jié)構(gòu)2.存儲(chǔ)管理部分

實(shí)現(xiàn)虛擬存儲(chǔ)器而設(shè)置的,它由分段部件和分頁(yè)部件兩部分組成3.控制部分

根據(jù)指令譯碼器送來(lái)的信息產(chǎn)生微指令,并通過(guò)微指令對(duì)運(yùn)算部分、存儲(chǔ)管理部分及指令譯碼器發(fā)出控制信號(hào)4.譯碼部分

指令譯碼器對(duì)指令的操作碼進(jìn)行翻譯,并把翻譯后的信息通過(guò)指令總線送給控制部件

5.指令預(yù)取部件

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

總線接口部分的功能是產(chǎn)生訪問(wèn)微處理器以外的存儲(chǔ)器和輸入/輸出接口所需要的地址、數(shù)據(jù)和命令

1.80486的基本結(jié)構(gòu)2.寄存器組

1)通用寄存器(1)基本結(jié)構(gòu)存儲(chǔ)器2.寄存器組(續(xù)1)2)段寄存器

直接或間接地指出指令代碼和數(shù)據(jù)所用的地址空間

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

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

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

可編程調(diào)試寄存器

8個(gè),32位,用來(lái)支持調(diào)試功能測(cè)試寄存器

5個(gè),32位,用來(lái)存放全局性與任務(wù)無(wú)關(guān)的機(jī)器狀態(tài)。任務(wù)2.2.3尋址方式

對(duì)于一條匯編語(yǔ)言指令來(lái)說(shuō),指令由操作碼和操作數(shù)兩部分組成。操作數(shù)采取哪一種尋址方式,會(huì)影響機(jī)器運(yùn)行的速度和效率。CPU的尋址方式越多,功能就越強(qiáng),程序設(shè)計(jì)的靈活性就越大。80486有三種尋址方式:立即數(shù)尋址、寄存器尋址、存儲(chǔ)器尋址。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

——相對(duì)基址加變址尋址232位尋址:操作數(shù)在存儲(chǔ)器中,而操作數(shù)所在存儲(chǔ)器地址的有效值為基址寄存器的內(nèi)容加變址寄存器的內(nèi)容乘以比例因子,再加上指令中給出的偏移量?;芳拇嫫骱妥冎芳拇嫫骶扇AX、EBX、ECX、EDX、ESI、EDI、EBP等7個(gè)32位寄存器比例因子可取1、2、4、8。例如,MOVBX,32H[EBX][EAX*4];將數(shù)據(jù)段中以EAX的內(nèi)容乘以4加上EBX的內(nèi)容,再加上32H作為有效地址,取出其內(nèi)容送到BX寄存器。3.存儲(chǔ)器尋址(續(xù)13)

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

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

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

數(shù)據(jù)傳送指令包括:通用傳送指令、堆棧操作指令、標(biāo)志傳送指令、地址傳送指令、I/O傳送指令等。

1.數(shù)據(jù)傳送類指令1.通用數(shù)據(jù)傳送指令

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

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

——符號(hào)擴(kuò)展傳送指令格式:MOVSX目標(biāo)寄存器,源操作數(shù) ;有符號(hào)擴(kuò)展傳送指令MOVZX目標(biāo)寄存器,源操作數(shù) ;無(wú)符號(hào)擴(kuò)展傳送指令示例:MOVAL,90H ;90H→ALMOVSXBX,AL ;FF90H→BX,AL為有符號(hào)數(shù),F(xiàn)FH為AL符號(hào)位的擴(kuò)展。MOVZXDX,AL ;0090H→DX,AL為無(wú)符號(hào)數(shù),DX的高8位補(bǔ)01.通用數(shù)據(jù)傳送指令

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

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

——查表指令

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

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

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

——進(jìn)棧指令/進(jìn)棧指令格式:PUSH源操作數(shù);把源操作數(shù)壓入SP所指的棧頂格式:POP目標(biāo)操作數(shù);把SP所指的棧頂?shù)膬?nèi)容彈到目標(biāo)操作數(shù)示例:PUSHAX;SP-2→SP,AX→(SP)PUSHEBX;ESP-4→ESP,EBX→(ESP)POPBX;(SP)→BX,SP+2→SPPOPEBX;(ESP)→EBX,ESP+4→ESP2.堆棧操作指令

——通用寄存器進(jìn)棧/出棧指令

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

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

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

——指針傳送指令

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

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

(1)加法和減法指令

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

——乘法指令MUL格式:MUL乘數(shù);無(wú)符號(hào)二進(jìn)制數(shù)乘法指令I(lǐng)MUL格式1:IMUL乘數(shù) ;帶符號(hào)數(shù)的乘法指令,同MUL。IMUL格式2:IMUL目標(biāo)操作數(shù),源操作數(shù);將目標(biāo)操作數(shù)乘以源操作數(shù),結(jié)果回送目標(biāo)操作數(shù)。IMUL格式3:IMUL目標(biāo)操作數(shù),源操作數(shù),立即數(shù)MOV AL,64H;表示無(wú)符號(hào)數(shù),有符號(hào)數(shù)100MOV BL,0A5H;表示無(wú)符號(hào)數(shù)是165、有符號(hào)數(shù)則是-91若執(zhí)行:①M(fèi)ULBL;無(wú)符號(hào)數(shù)乘法:AX=4074H,表示十進(jìn)制數(shù)為16500;OF=CF=1,說(shuō)明AX高8位含有有效數(shù)字,不是符號(hào)擴(kuò)展②IMULBL;有符號(hào)字節(jié)乘法:AX=DC74H,表示-9100(3)乘法和除法指令

——除法指令

格式:DIV 除數(shù);無(wú)符號(hào)數(shù)的除法指令I(lǐng)DIV除數(shù);帶符號(hào)數(shù)的除法指令

示例:MOVDX,4MOVAX,3;DX.AX=40003H,表示十進(jìn)制數(shù)262147MOVWORDPTR[30H],8000H

;8000H表示無(wú)符號(hào)數(shù);32768、有符號(hào)數(shù)-32768,若執(zhí)行①DIVWORDPTR[30H]

;無(wú)符號(hào)數(shù)運(yùn)算,商AX=8,余數(shù)DX=3②IDIVWORDPTR[30H]

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

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

非壓縮BCD碼

ASCⅡ碼

64

02H

40H

02H64H

02H32H3634H(4)BCD碼調(diào)整指令

——壓縮BCD碼加法和減法調(diào)整指令

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

——非壓縮BCD碼加法和減法調(diào)整指令A(yù)AA格式:AAA功能:加法調(diào)整指令,跟在以AL為目的操作數(shù)的ADD或ADC指令之后,對(duì)AL進(jìn)行非壓縮BCD碼調(diào)整;如果調(diào)整中產(chǎn)生了進(jìn)位,則將進(jìn)位1加到AH中,同時(shí)CF=AF=1,否則CF=AF=0。AAS格式:AAS功能:減法調(diào)整指令,跟在以AL為目的操作數(shù)的SUB或SBB指令之后,對(duì)AL進(jìn)行非壓縮BCD碼調(diào)整;如果調(diào)整中產(chǎn)生了借位,則將AH減去借位1,同時(shí)CF=AF=1,否則CF=AF=0。示例

(4)BCD碼調(diào)整指令

——非壓縮BCD碼乘法調(diào)整指令A(yù)AM格式:AAM;將AX中的乘積調(diào)整為非壓縮BCD碼。非壓縮BCD碼乘法調(diào)整指令A(yù)AM跟在以AX為目的操作數(shù)的MUL指令之后,對(duì)AX進(jìn)行非壓縮BCD碼調(diào)整。利用MUL相乘的兩個(gè)非壓縮BCD碼的高4位必須為0。示例MOVAX,705H ;BCD數(shù)7→AH,BCD數(shù)5→ALMULAH ;AL×AH=23H→AXAAM;把結(jié)果AX調(diào)整為兩個(gè)非壓縮BCD數(shù)0305H

(5)BCD碼調(diào)整指令

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

(1)無(wú)條件轉(zhuǎn)移指令

——JMP指令1)段內(nèi)直接轉(zhuǎn)移格式:JMPSHORT標(biāo)號(hào) ;短轉(zhuǎn)移

JMPNEARPTR標(biāo)號(hào);近轉(zhuǎn)移

2)段內(nèi)間接轉(zhuǎn)移格式:JMP寄存器操作數(shù) ;目標(biāo)地址在寄存器中

JMP存儲(chǔ)器操作數(shù) ;目標(biāo)地址在存儲(chǔ)器中3)段間直接轉(zhuǎn)移格式:JMPFARPTR標(biāo)號(hào)

4)段間間接轉(zhuǎn)移格式:JMPFARPTR存儲(chǔ)器操作數(shù)(2)無(wú)條件轉(zhuǎn)移指令

——子程序調(diào)用指令CALL

1)段內(nèi)直接調(diào)用格式:CALL過(guò)程名2)段內(nèi)間接調(diào)用

格式:CALL寄存器操作數(shù) ;入口地址在寄存器中CALL存儲(chǔ)器操作數(shù) ;入口地址在存儲(chǔ)器中3)段間直接調(diào)用格式:CALLFARPTR過(guò)程名4)段間間接調(diào)用格式:CALLFARPTR[寄存器];入口地址在存儲(chǔ)器中(3)無(wú)條件轉(zhuǎn)移指令

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

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

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

1)單標(biāo)志條件轉(zhuǎn)移指令使用如下表所示

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

說(shuō)明有進(jìn)位/低于/不高于且不等于時(shí)轉(zhuǎn)移無(wú)進(jìn)位/不低于/高于或等于時(shí)轉(zhuǎn)移結(jié)果為0/等于時(shí)轉(zhuǎn)移結(jié)果不為0/不等于時(shí)轉(zhuǎn)移結(jié)果為負(fù)數(shù)時(shí)轉(zhuǎn)移結(jié)果為正數(shù)時(shí)轉(zhuǎn)移結(jié)果中1的個(gè)數(shù)為偶數(shù)時(shí)轉(zhuǎn)移結(jié)果中1的個(gè)數(shù)為奇數(shù)時(shí)轉(zhuǎn)移有溢出時(shí)轉(zhuǎn)移無(wú)溢出時(shí)轉(zhuǎn)移

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

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

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

指令助記符JCXZJECXZ判斷條件CX=0時(shí),轉(zhuǎn)移ECX=0時(shí),轉(zhuǎn)移

說(shuō)明(A-B)轉(zhuǎn)移范圍-128~+127轉(zhuǎn)移范圍-128~+127,只適用

于32位微處理器,計(jì)數(shù)器是ECX

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

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

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

應(yīng)用說(shuō)明

指令助記符

指令功能

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個(gè)字的數(shù)組,其中有若干個(gè)0,找出第一個(gè)0,并將其有效地址送ADDR單元。

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

處理器因?yàn)槟撤N原因?qū)?dāng)前程序掛起(暫停),轉(zhuǎn)去處理這個(gè)特殊事件的程序,處理結(jié)束再返回被掛起的程序,上述過(guò)程稱為“中斷”。當(dāng)前程序被掛起的位置稱為“斷點(diǎn)”,處理特殊事件的程序稱為“中斷服務(wù)程序”。指令功能及說(shuō)明指令助記符

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

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

功能:執(zhí)行該調(diào)用,實(shí)現(xiàn)一個(gè)字符的輸出。

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

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

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

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

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

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

移位過(guò)程如下圖所示

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

測(cè)試指令格式:TEST目標(biāo)操作數(shù),源操作數(shù)位測(cè)試指令格式:BT目標(biāo)操作數(shù),源操作數(shù);位測(cè)試BTR目標(biāo)操作數(shù),源操作數(shù);位測(cè)試置0BTS目標(biāo)操作數(shù),源操作數(shù);位測(cè)試置1BTC目標(biāo)操作數(shù),源操作數(shù);位測(cè)試取反

位掃描指令格式:BSF目標(biāo)操作數(shù),源操作數(shù);向前位掃描指令BSR目標(biāo)操作數(shù),源操作數(shù);向后位掃描指令

功能:源、目標(biāo)操作數(shù)相“與”,但結(jié)果不送回給目標(biāo)操作數(shù),對(duì)標(biāo)志位的影響與AND指令相同。

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

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

REPREPE/ZREPNE/NZ

助記符

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

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

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

指令格式

功能

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

——程序開(kāi)始偽指令語(yǔ)句程序開(kāi)始可以用name或title為模塊取名字。name的格式:

name模塊名匯編程序?qū)⒁越o出的“模塊名”作為模塊的名字。如果程序中沒(méi)有name,則也可使用title偽指令。程序偽指令title的格式:

title文本該偽指令是指定一個(gè)標(biāo)題,以便在列表文件中每一頁(yè)的第一行都顯示這個(gè)標(biāo)題。如果程序中沒(méi)有name這個(gè)偽指令,則匯編程序?qū)⒂谩拔谋尽钡那傲鶄€(gè)字符作為模塊名。如果程序中既無(wú)name又無(wú)title偽指令,則將用源文件名作為模塊名。任務(wù)2.2.5

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論