




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章80X86的指令系統(tǒng)和尋址方式任課教師:陶雪麗xueli_xl@126.com2/22/20231河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院本章內(nèi)容提要80X86的尋址方式程序占有的空間和執(zhí)行時(shí)間80X86的指令系統(tǒng)2/22/20232河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院預(yù)備知識(shí)指令由操作碼和操作數(shù)兩部分組成。
操作碼說(shuō)明計(jì)算機(jī)要執(zhí)行哪種操作,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的組成部分。操作數(shù)是指令執(zhí)行的參與者,也就是各種操作的對(duì)象。操作碼操作數(shù)用助記符表達(dá)的指令的一般格式:
操作碼操作數(shù)1,……,操作數(shù)n ;注釋2/22/20233河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院預(yù)備知識(shí)操作碼:用一個(gè)唯一的助記符表示(指令功能的英文縮寫)對(duì)應(yīng)著機(jī)器指令的一個(gè)二進(jìn)制編碼操作數(shù):可以是操作數(shù)本身(一個(gè)具體的數(shù)值)也可以是存放數(shù)據(jù)的寄存器或指明數(shù)據(jù)在主存位置的存儲(chǔ)器地址2/22/20234河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院預(yù)備知識(shí)操作數(shù)字段可以是一個(gè)、二個(gè)或三個(gè),通常稱為一地址、二地址或三地址指令。單操作數(shù)指令就是一地址指令它只需要指定一個(gè)操作數(shù)。雙操作數(shù)指令就是二地址指令。操作數(shù)2稱為源操作數(shù)scr,操作數(shù)1稱為目的操作數(shù)dest,它不僅作為指令操作的一個(gè)對(duì)象,還用來(lái)存放指令操作的結(jié)果。操作碼操作數(shù)操作碼操作數(shù)1,操作數(shù)22/22/20235河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院預(yù)備知識(shí)大多數(shù)運(yùn)算指令可使用三地址指令:除給出參加運(yùn)算的兩個(gè)操作數(shù)(操作數(shù)2,操作數(shù)3)外,還指出運(yùn)算結(jié)果的存放地址(操作數(shù)1)。分號(hào)后的內(nèi)容是對(duì)指令的解釋。操作碼操作數(shù)1,操作數(shù)2,操作數(shù)32/22/20236河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院預(yù)備知識(shí)而操作數(shù)的給出方式比較復(fù)雜,指令系統(tǒng)設(shè)計(jì)了多種操作數(shù)的來(lái)源。尋找操作數(shù)的方式叫做操作數(shù)的尋址方式。操作數(shù)采取哪一種尋址方式,會(huì)影響機(jī)器運(yùn)行的速度和效率。這種符號(hào)指令系統(tǒng)中,操作碼的給出方式比較簡(jiǎn)單。如何尋址一個(gè)操作數(shù)對(duì)程序的設(shè)計(jì)來(lái)講也是很重要的。2/22/20237河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.180X86的尋址方式2與轉(zhuǎn)移地址有關(guān)的尋址方式1與數(shù)據(jù)有關(guān)的尋址方式2/22/20238河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.1.1與數(shù)據(jù)有關(guān)的尋址方式
8086、80286的機(jī)器字長(zhǎng)位16位,一般情況下只處理8、16位數(shù),只在乘、除指令中才會(huì)有32位數(shù)。
80386及其后繼機(jī)型字長(zhǎng)位32位,它可處理8、16、32位操作數(shù),在乘除指令中還可產(chǎn)生64位數(shù)。這種尋址方式用來(lái)確定操作數(shù)地址從而找到操作數(shù)。本節(jié)對(duì)數(shù)據(jù)尋址方式的討論,均以MOV指令為例。2/22/20239河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.1.1與數(shù)據(jù)有關(guān)的尋址方式立即尋址方式寄存器尋址方式直接尋址方式寄存器間接尋址方式寄存器相對(duì)尋址方式基址變址尋址方式相對(duì)基址變址尋址方式比例變址尋址方式基址比例變址尋址方式相對(duì)基址比例變址尋址方式知識(shí)要點(diǎn)2/22/202310河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院1.立即數(shù)尋址方式(immediateaddressing) 操作數(shù)直接存放在指令中,緊跟在操作碼之后,作為指令的一部分存放在代碼段里。如圖3.1(1)所示。這種操作數(shù)被稱為立即數(shù)imm:它可以是8位數(shù)值i8;也可以是16位數(shù)值i16或32位數(shù)值i32。數(shù)據(jù)存放時(shí)采用“小端方式”。立即數(shù)尋址方式常用來(lái)給寄存器賦值。只能用于源操作數(shù)字段,不能用于目的操作數(shù)字段。2/22/202311河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院立即數(shù)尋址舉例例3.1 MOVAL,5
指令執(zhí)行后(AL)=05H。例3.2 MOVAX,3064H
指令執(zhí)行后(AX)=3064H,如圖3.2所示。例3.3 MOVEAX,12345678H
指令執(zhí)行后(EAX)=12345678H。2/22/202312河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院2.寄存器尋址方式(registeraddressing) 操作數(shù)存放在CPU的內(nèi)部寄存器reg中,無(wú)需訪問存儲(chǔ)器,因而可以得到較高的運(yùn)算速度,如圖3.1(2)所示。寄存器可以是:8位(r8):AH、AL、BH、BL、CH、CL、DH、DL16位(r16):AX、BX、CX、DX、SI、DI、BP、SP32位(r32):EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP段寄存器(seg);CS、DS、SS、ES、FS、GS2/22/202313河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院寄存器尋址舉例例3.4(a)MOVAX,BX
如指令執(zhí)行前(AX)=3064H,(BX)=1234H;則指令執(zhí)行后,(AX)=1234H,(BX)保持不變。例3.4(b)MOVECX,EDX
如執(zhí)行前(ECX)=0123754H,(EDX)=12345678H;則指令執(zhí)行后,(ECX)=12345678H,(EDX)保持不變。執(zhí)行動(dòng)畫演示2/22/202314河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院存儲(chǔ)器尋址方式以下各種尋址方式的操作數(shù)都在除代碼段以外的存儲(chǔ)區(qū)中。操作數(shù)地址是由段基地址和偏移地址相加而取得的。段基地址在實(shí)模式和保護(hù)模式下可從不同途徑取得。這里要解決的問題是如何取得操作數(shù)的偏移地址。在80x86里,把操作數(shù)的偏移地址稱為有效地址(effectiveaddress,EA)。通過不同尋址方式求得操作數(shù)地址,從而取得操作數(shù)。下述各種尋址方式即為求得有效地址(EA)的不同途徑。2/22/202315河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院存儲(chǔ)器尋址方式指令中給出操作數(shù)的主存地址信息(偏移地址,稱之為有效地址EA),而段地址在默認(rèn)的或用段超越前綴指定的段寄存器中。
80X86設(shè)計(jì)了多種存儲(chǔ)器尋址方式:16位尋址:
直接尋址方式
寄存器間接尋址方式
寄存器相對(duì)尋址方式
基址變址尋址方式
相對(duì)基址變址尋址方式32位尋址:
比例變址尋址方式
基址比例變址尋址方式
相對(duì)基址比例變址尋址方式2/22/202316河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院有效地址EA(EffectiveAddress)
位移量(displacement)是存放在指令中的一個(gè)8位、16位或32位的數(shù),但它不是立即數(shù),而是一個(gè)地址。
基址(base)是存放在基址寄存器中的內(nèi)容。它是有效地址中的基址部分,通常用來(lái)指向數(shù)據(jù)段中數(shù)組或字符串的首地址。
變址(index)是存放在變址寄存器中的內(nèi)容。它通常用來(lái)訪問數(shù)組中的某個(gè)元素或字符串中的某個(gè)字符。有效地址的四種組成成分:
比例因子(scalefactor)是386及其后繼機(jī)型新增加的尋址方式中的一個(gè)術(shù)語(yǔ),其值可為1,2,4或8。在尋址中,可用變址寄存器的內(nèi)容乘以比例因子來(lái)取得變址值。這類尋址方式對(duì)訪問元素長(zhǎng)度為2,4,8字節(jié)的數(shù)組特別有用。2/22/202317河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院有效地址EA(EffectiveAddress)
EA=基址+(變址×比例因子)+位移量這四個(gè)成分中,除比例因子是固定值外,其他三個(gè)成分都可正可負(fù),以保證指針移動(dòng)的靈活性。
8086/80286只能使用16位尋址,而80386及其后繼機(jī)型則既可用32位尋址,也可用16位尋址。在這兩種情況下,對(duì)以上四種成分的組成有不同的規(guī)定,表3.1說(shuō)明了這一規(guī)定。有效地址的計(jì)算公式:這四種成分可以任意組合使用,在各種不同組合下其中每一種成分均可空缺,但比例因子只能與變址寄存器同時(shí)使用。其中有關(guān)比例因子的三種組合只能用于80386及其后繼機(jī)型。2/22/202318河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院段選擇規(guī)則
表3.2則說(shuō)明了各種訪存類型下所對(duì)應(yīng)的段的默認(rèn)選擇。實(shí)際上,在某些情況下,80x86允許程序員用段跨越前綴來(lái)改變系統(tǒng)所指定的默認(rèn)段,如允許數(shù)據(jù)存放在除DS段以外的其他段中,此時(shí)程序中應(yīng)使用段跨越前綴。段的選擇和段跨越前綴以下三種情況下,不允許使用段跨越前綴:串處理指令的目的串必須用ES段;PUSH指令的目的和POP指令的源必須用SS段;指令必須存放在CS段中。2/22/202319河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.直接尋址方式(directaddressing) 操作數(shù)的有效地址只包含位移量一種成分,其值就存放在代碼段中指令的操作碼之后,位移量的值即操作數(shù)的有效地址。如圖3.1(3)所示。默認(rèn)的段地址在DS段寄存器,可使用段超越前綴改變。直接尋址方式適用于處理單個(gè)變量。例如,要處理某個(gè)存放在存儲(chǔ)器里的變量,可以用存儲(chǔ)器尋址方式,這就是一個(gè)常量常常先要送到寄存器的原因。2/22/202320河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院直接尋址舉例
例3.5MOVAX,[2000H]
如(DS)=3000H,則執(zhí)行情況如圖3.3所示。
執(zhí)行結(jié)果為:(AX)=3050H在匯編語(yǔ)言指令中,可以用符號(hào)地址代替數(shù)值地址,如:
MOVAX,VALUE此時(shí)VALUE為存放操作數(shù)單元的符號(hào)地址。如寫成:
MOVAX,[VALUE]也是可以的,兩者是等效的。如VALUE在附加段中,則應(yīng)指定段跨越前綴如下:
MOVAX,ES:VALUE
或
MOVAX,ES:[VALUE]2/22/202321河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院直接尋址舉例
例3.6MOVEAX,DATA
指令中的DATA為符號(hào)地址,其中存放著32為操作數(shù),故目的操作數(shù)也應(yīng)使用32位寄存器。2/22/202322河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院4.寄存器間接尋址方式(registerindirectaddressing) 操作數(shù)的有效地址為基址寄存器內(nèi)容或變址寄存器的內(nèi)容。因此,有效地址就在某個(gè)寄存器中,而操作數(shù)則在存儲(chǔ)器中,如圖3.1(4)所示。其他寄存器默認(rèn)的段地址在DS段寄存器,可使用段超越前綴改變。凡使用BP,ESP和EBP寄存器時(shí),其默認(rèn)段為SS段。這種尋址方式可以用于表格處理,執(zhí)行完一條指令后,只需修改寄存器內(nèi)容就可以取出表格的下一項(xiàng)。2/22/202323河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院寄存器間接尋址舉例
例3.7MOVAX,[BX]
如果(DS)=2000H,(BX)=1000H
則物理地址=20000+1000=21000H
執(zhí)行情況如圖3.4所示。
執(zhí)行結(jié)果為:(AX)=50A0H。指令中也可指定段跨越前綴來(lái)取得其他段中的數(shù)據(jù)。 如:MOVAX,ES:[BX]例3.8MOVECX,[EDX]
指令把數(shù)據(jù)段中有效地址存放在EDX寄存器中的32位操作數(shù)傳送到ECX寄存器中。2/22/202324河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院5.寄存器相對(duì)尋址方式(registerrelativeaddressing) 又稱直接變址尋址方式。寄存器的使用和段寄存器的默認(rèn)情況,同“寄存器間接尋址”。操作數(shù)的有效地址為基址寄存器或變址寄存器的內(nèi)容與指令中指定的位移量之和,所以有效地址由兩種成分組成。這種尋址方式如圖3.1(5)所示。這種尋址方式同樣可用于表格處理,表格的首地址可設(shè)置為位移量,利用修改基址或變址寄存器的內(nèi)容來(lái)取得表格中的值。2/22/202325河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院寄存器相對(duì)尋址舉例
例3.9MOVAX,COUNT[SI]
(也可表示為MOVAX,[COUNT+SI])其中COUNT為16位位移量的符號(hào)地址。如果(DS)=3000H,(SI)=2000H,COUNT=3000H
則物理地址=30000+2000+3000=35000H
指令執(zhí)行情況如圖3.5所示。
執(zhí)行結(jié)果是:(AX)=1234H類似地,可有 MOVEAX,TABLE[ESI]TABLE為32位位移量的符號(hào)地址,ESI的內(nèi)容指向此表格中的一項(xiàng)。這種尋址方式也可以使用段跨越前綴。例如:
MOVDL,ES:STRING[SI]2/22/202326河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院6.基址變址尋址方式(basedindexedaddressing)操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和,所以有效地址由兩種成分組成。如圖3.1(6)所示。這種尋址方式同樣適用于數(shù)組或表格處理,首地址可存放在基址寄存器中,而用變址寄存器來(lái)訪問數(shù)組中的各個(gè)元素。由于兩個(gè)寄存器都可以修改,所以它比直接尋址方式更加靈活。2/22/202327河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院基址變址尋址舉例
例3.10MOVAX,[BX][DI]
(或?qū)憺椋篗OVAX,[BX+DI])如(DS)=2100H,(BX)=0158H,(DI)=10A5H
則EA=0158+10A5=11FDH,物理地址=21000+11FD=221FDH
指令執(zhí)行情況如圖3.6所示。
執(zhí)行結(jié)果(AX)=1234H。類似地,對(duì)于32位尋址方式可有:
MOVEDX,[EBX][ESI]此種尋址方式使用段跨越前綴時(shí)的格式為:
MOVAX,ES:[BX][SI]2/22/202328河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院7.相對(duì)基址變址尋址方式(relativedbasedindexedaddressing)操作數(shù)的有效地址是一個(gè)基址寄存器與一個(gè)變址寄存器的內(nèi)容和指令中指定的位移量之和,所以有效地址由三種成分組成。如圖3.1(7)所示。這種尋址方式通常用于對(duì)二維數(shù)組的尋址。例如,存儲(chǔ)器中存放著由多個(gè)記錄組成的文件,在位移量可指向文件之首,基址寄存器指向某個(gè)記錄,變址寄存器則指向該記錄中的一個(gè)元素。這種尋址方式也為堆棧處理提供了方便,一般(BP)可指向棧頂,從棧頂?shù)綌?shù)組的首址可用位移量表示,變址寄存器可用來(lái)訪問數(shù)組中的某個(gè)元素。2/22/202329河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院相對(duì)基址變址尋址舉例
例3.11MOVAX,MASK[BX][SI](也可寫成MOVAX,MASK[BX+SI]
或MOVAX,[MASK+BX+SI])。如(DS)=3000H,(BX)=2000H,(SI)=1000,MASK=0250H,則物理地址=16d×(DS)+(BX)+(SI)+MASK
=30000+2000+1000+0250=33250H
指令執(zhí)行情況如圖3.7所示。
執(zhí)行結(jié)果(AX)=1234H。類似地,對(duì)于32位尋址方式可有:
MOVEAX,ARRAY[EBX][ECX]提示:位移量可用符號(hào)表示同一尋址方式有多種表達(dá)形式2/22/202330河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院8.比例變址尋址方式(scaledindexedaddressing)操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上位移量之和,所以有效地址由三種成分組成。如圖3.1(8)所示。這種尋址方式與相對(duì)寄存器尋址相比,增加了比例因子,其優(yōu)點(diǎn)在于:對(duì)于元素大小為2,4,8字節(jié)的數(shù)據(jù),可以在變址寄存器中給出數(shù)組元素下標(biāo),而由尋址方式控制直接用比例因子把下標(biāo)轉(zhuǎn)換為變址值。2/22/202331河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院比例變址尋址舉例
例3.12MOVEAX,COUNT[ESI*4]
如要求把雙字?jǐn)?shù)組COUNT中的元素3送到EAX中,用這種尋址方式可直接在ESI中放入3,選擇比例因子4(數(shù)組元素為4字節(jié)長(zhǎng))就可以方便地達(dá)到目的(見圖3.8),而不必像在相對(duì)寄存器尋址方式中要把變址值直接裝入寄存器中。2/22/202332河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院9.基址比例變址尋址方式(basedscaledindexedaddressing)操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以比例因子再加上基址寄存器的內(nèi)容之和,所以有效地址由三種成分組成。如圖3.1(9)所示。這種尋址方式與基址變址尋址方式相比,增加了比例因子,其優(yōu)點(diǎn)是很明顯的。
例3.13MOVECX,[EAX][EDX*8]2/22/202333河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院10.相對(duì)基址比例變址尋址方式(relativebasedscaledindexedaddressing)操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以比例因子,加上基址寄存器的內(nèi)容,再加上位移量之和,所以有效地址由四種成分組成。如圖3.1(10)所示。這種尋址方式比相對(duì)基址變址方式增加了比例因子,便于對(duì)元素為2,4,8字節(jié)的二維數(shù)組的處理。
例3.14MOVEAX,TABLE[EBP][EDI*4]2/22/202334河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式段內(nèi)轉(zhuǎn)移,直接尋址段內(nèi)轉(zhuǎn)移,間接尋址段間轉(zhuǎn)移,直接尋址段間轉(zhuǎn)移,間接尋址知識(shí)要點(diǎn)2/22/202335河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式
如圖3.9所示。這種尋址方式用來(lái)確定轉(zhuǎn)移指令及CALL指令的轉(zhuǎn)向地址。本節(jié)均以無(wú)條件轉(zhuǎn)移指令JMP為例。2/22/202336河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式目標(biāo)地址的尋址方式直接尋址:轉(zhuǎn)移地址象立即數(shù)一樣,直接在指令的機(jī)器代碼中,就是直接尋址方式。間接尋址:轉(zhuǎn)移地址在寄存器或主存單元中,就是通過寄存器或存儲(chǔ)器的間接尋址方式。用寄存器或存儲(chǔ)器操作數(shù)表達(dá)用符號(hào)表達(dá)2/22/202337河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式目標(biāo)地址的范圍:段內(nèi)段內(nèi)轉(zhuǎn)移——近轉(zhuǎn)移(near)在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移(±32KB范圍)不需要更改CS段地址,只要改變IP偏移地址段內(nèi)轉(zhuǎn)移——短轉(zhuǎn)移(short)轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)-128~+127范圍的轉(zhuǎn)移代碼段代碼段2/22/202338河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式目標(biāo)地址的范圍:段間段間轉(zhuǎn)移——遠(yuǎn)轉(zhuǎn)移(far)從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,可以在1MB范圍。需要更改CS段地址和IP偏移地址。目標(biāo)地址必須用一個(gè)32位數(shù)表達(dá),叫做32位遠(yuǎn)指針,它就是邏輯地址。代碼段代碼段實(shí)際編程時(shí),匯編程序會(huì)根據(jù)目標(biāo)地址的距離,自動(dòng)處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移??捎貌僮鞣鹲hort、nearptr
或farptr強(qiáng)制。2/22/202339河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院1.段內(nèi)直接尋址(intrasegmentdirectaddressing) 轉(zhuǎn)向的有效地址是當(dāng)前IP寄存器的內(nèi)容和指令中指定的8位或16位位移量之和,如圖3.9(1)所示。指令中的位移量是轉(zhuǎn)向的有效地址與當(dāng)前IP值之差,所以當(dāng)這一程序段在內(nèi)存中的不同區(qū)域運(yùn)行時(shí),這種尋址方式的轉(zhuǎn)移指令本身不會(huì)發(fā)生變化,這是符合程序的再定位要求的。轉(zhuǎn)向有效地址用相對(duì)于當(dāng)前IP值的位移量來(lái)表示,所以它是一種相對(duì)尋址方式。2/22/202340河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院1.段內(nèi)直接尋址(intrasegmentdirectaddressing)這種尋址方式適用于條件轉(zhuǎn)移及無(wú)條件轉(zhuǎn)移指令:當(dāng)它用于條件轉(zhuǎn)移指令時(shí),位移量只允許8位(386及其后繼機(jī)型條件轉(zhuǎn)移指令的位移量可為8位或32位)。無(wú)條件轉(zhuǎn)移指令在位移量為8位時(shí)稱為短跳轉(zhuǎn),位移量為16位時(shí)則稱為近跳轉(zhuǎn)。2/22/202341河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院1.段內(nèi)直接尋址(intrasegmentdirectaddressing)指令的匯編語(yǔ)言格式表示為:
JMPNEARPTRPROGIA JMPSHORTQUEST
PROGIA和QUEST均為轉(zhuǎn)向的符號(hào)地址,在機(jī)器指令中,用位移量來(lái)表示。在匯編指令中:如果位移量為16位,則在符號(hào)地址前加操作符NERAPTR;如果位移量為8位,則在符號(hào)地址前加操作符SHORT。2/22/202342河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院1.段內(nèi)直接尋址(intrasegmentdirectaddressing)對(duì)于386及其后繼機(jī)型:代碼段的偏移地址存放在EIP中,同樣用相對(duì)尋址的段內(nèi)直接方式。只是其位移量為8位或32位。8位對(duì)應(yīng)于短跳轉(zhuǎn);32位對(duì)應(yīng)于近跳轉(zhuǎn)。由于位移量本身是個(gè)帶符號(hào)數(shù),所以8位位移量的跳轉(zhuǎn)范圍在-128~+127的范圍內(nèi);16位位移量的跳轉(zhuǎn)范圍為±32K,32位位移量的跳轉(zhuǎn)范圍在±2G。所有機(jī)型的匯編格式均相同。2/22/202343河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院2.段內(nèi)間接尋址(intrasegmentindirectaddressing)轉(zhuǎn)向有效地址是一個(gè)寄存器或是一個(gè)存儲(chǔ)單元的內(nèi)容。這種尋址方式以及以下的兩種段間尋址方式都不能用于條件轉(zhuǎn)移指令。也就是說(shuō):轉(zhuǎn)向有效地址可以用數(shù)據(jù)尋址方式中除立即數(shù)以外的任何一種尋址方式取得,所得到的轉(zhuǎn)向的有效地址用來(lái)取代IP寄存器的內(nèi)容。如圖3.9(2)所示。條件轉(zhuǎn)移指令只能使用段內(nèi)直接尋址的8位位移量(386及其后繼機(jī)型允許8位或32位位移量);
JMP和CALL指令則可用四種尋址方式中的任何一種。2/22/202344河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院2.段內(nèi)間接尋址(intrasegmentindirectaddressing)段內(nèi)間接尋址轉(zhuǎn)移指令的匯編格式可以表示為:
JMPBX JMPWORDPTR[BP+TABLE]其中WORDPTR為操作符,用以指出其后的尋址方式所取得的轉(zhuǎn)向地址是一個(gè)字的有效地址,也就是說(shuō)它是一種段內(nèi)轉(zhuǎn)移。以上兩種尋址方式均為段內(nèi)轉(zhuǎn)移,所以直接把求得的轉(zhuǎn)向的有效地址送到IP寄存器就可以了。2/22/202345河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院段內(nèi)間接尋址舉例
假設(shè):(DS)=2000H,(BX)=1256H,(SI)=528FH,位移量=20A1H,(232F7H)=3280H,(264E5H)=2450H。例3.16 JMPTABLE[BX]
則執(zhí)行該指令后(IP)=(16d×(DS)+(BX)+位移量) =(20000+1256+20A1) =(232F7)=3280H例3.15 JMPBX
則執(zhí)行該指令后(IP)=1256H例3.16 JMPTABLE[BX]
則執(zhí)行該指令后 (IP)=(16d×(DS)+(BX)+位移量) =(20000+1256+20A1) =(232F7)=3280H2/22/202346河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院段內(nèi)間接尋址舉例
例3.16 JMPTABLE[BX]
則執(zhí)行該指令后(IP)=(16d×(DS)+(BX)+位移量) =(20000+1256+20A1) =(232F7)=3280H例3.17 JMP[BX][SI]
則執(zhí)行該指令后
(IP)=(16d×(DS)+(BX)+位移量) =(20000+1256+528F) =(264E5)=2450H以上說(shuō)明舉例均針對(duì)8086的16位尋址來(lái)分析的,對(duì)于386及其后繼機(jī)型除16位尋址方式外,還可使用32位尋址方式,就方法而言是與16位尋址完全相同的。例3.18 JMPBX例3.19 JMPWORDPTRTABLE[SI]2/22/202347河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.段間直接尋址(intersegmentdirectaddressing)指令中直接提供了轉(zhuǎn)向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的內(nèi)容;用指令中指定的段地址取代CS寄存器的內(nèi)容就完成了從一個(gè)段到另一個(gè)段的轉(zhuǎn)移操作。如圖3.9(3)所示。2/22/202348河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.段間直接尋址(intersegmentdirectaddressing)指令的匯編語(yǔ)言格式可表示為:
JMPFARPTRNEXTROUTINT其中,NEXTROUTINT為轉(zhuǎn)向的符號(hào)地址,F(xiàn)ARPTR則是表示段間轉(zhuǎn)移的操作符。對(duì)于386及其后繼機(jī)型,段間轉(zhuǎn)移應(yīng)修改CS和EIP的內(nèi)容,方法仍然和16位尋址時(shí)一致。2/22/202349河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院4.段間間接尋址(intersegmentindirectaddressing)用存儲(chǔ)器中的兩個(gè)相繼字的內(nèi)容來(lái)取代IP和CS寄存器中的原始內(nèi)容,以達(dá)到段間轉(zhuǎn)移的目的。存儲(chǔ)單元的地址是由指令指定除立即數(shù)方式和寄存器方式以外的任何一種數(shù)據(jù)尋址方式取得。
如圖3.9(4)所示。2/22/202350河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院4.段間間接尋址(intersegmentindirectaddressing)這種指令的匯編語(yǔ)言格式可表示為:
JMPDWORDPTR[INTERS+BX]其中,[INTERS+BX]說(shuō)明數(shù)據(jù)尋址方式為直接變址尋址方式,DWORDPTR為雙字操作符,說(shuō)明轉(zhuǎn)向地址需取雙字為段間轉(zhuǎn)移指令。對(duì)于386及其后繼機(jī)型,除16位尋址方式外,還可使用32位尋址方式,方法上也與16位尋址相同。如:
JMPDWORDPTR[EDI]2/22/202351河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.2程序占有的空間和執(zhí)行時(shí)間匯編語(yǔ)言程序要由“匯編程序”將它翻譯成機(jī)器語(yǔ)言程序,才能由計(jì)算機(jī)識(shí)別并執(zhí)行。一方面,80x86的機(jī)器指令是可變字節(jié)指令,即不同指令或不同尋址方式的機(jī)器指令長(zhǎng)度不同。一個(gè)程序一旦裝入計(jì)算機(jī),它就會(huì)占有一定的存儲(chǔ)空間。程序量越大,占有的存儲(chǔ)空間也越大。一條16位格式指令的長(zhǎng)度可為1~7個(gè)字節(jié),32位指令則可達(dá)14個(gè)字節(jié),如計(jì)入前綴字節(jié)(如段跨越前綴等)長(zhǎng)度還會(huì)增加。2/22/202352河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.2程序占有的空間和執(zhí)行時(shí)間另一方面,當(dāng)程序在計(jì)算機(jī)上運(yùn)行時(shí),訪問存儲(chǔ)器取得操作數(shù)或存放結(jié)果需要時(shí)間,運(yùn)算器執(zhí)行指令也需要時(shí)間。盡管計(jì)算機(jī)的運(yùn)行速度已有很大提高:時(shí)鐘頻率已從原來(lái)的5MHz提高到300MHz;在體系結(jié)構(gòu)方面采用了如數(shù)據(jù)預(yù)取、高速緩沖、流水線等多項(xiàng)重疊或并發(fā)技術(shù)。指令的執(zhí)行速度有了很大的提高,但程序運(yùn)行仍是需要時(shí)間的。完成同樣功能的不同程序,可能在占有存儲(chǔ)空間和執(zhí)行時(shí)間上有很大差別。2/22/202353河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.2程序占有的空間和執(zhí)行時(shí)間因此,在編制程序時(shí):如果對(duì)程序所占有的空間或程序的執(zhí)行時(shí)間要求不高,那就只要根據(jù)題意編制出合乎要求的程序就可以了,當(dāng)然也應(yīng)該盡量在空間和時(shí)間上提高運(yùn)行的效率。對(duì)于程序所占有的存儲(chǔ)空間或者對(duì)于程序執(zhí)行的時(shí)間要求很高,在這種情況下,應(yīng)仔細(xì)斟酌程序的算法、數(shù)據(jù)結(jié)構(gòu)以及指令與尋執(zhí)方式的選用,以編制出符合要求的程序。2/22/202354河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.380X86的指令系統(tǒng)1數(shù)據(jù)傳送指令2算術(shù)指令3邏輯指令4串處理指令5控制轉(zhuǎn)移指令6處理機(jī)控制與雜項(xiàng)操作指令2/22/202355河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院準(zhǔn)備知識(shí)指令系統(tǒng)計(jì)算機(jī)的指令系統(tǒng)就是指該計(jì)算機(jī)能夠執(zhí)行的全部指令的集合。每種計(jì)算機(jī)都有它支持的指令集合
。16位8086指令系統(tǒng)是Intel80x86系列微處理器指令系統(tǒng)的基礎(chǔ)。2/22/202356河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院準(zhǔn)備知識(shí)學(xué)習(xí)指令的注意事項(xiàng)
指令的功能——該指令能夠?qū)崿F(xiàn)何種操作。通常指令助記符就是指令功能的英文單詞或其縮寫形式。
指令支持的尋址方式——該指令中的操作數(shù)可以采用何種尋址方式。
指令對(duì)標(biāo)志的影響——該指令執(zhí)行后是否對(duì)各個(gè)標(biāo)志位有影響,以及如何影響。
其他方面——該指令其他需要特別注意的地方,如指令執(zhí)行時(shí)的約定設(shè)置、必須預(yù)置的參數(shù)、隱含使用的寄存器等。2/22/202357河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院準(zhǔn)備知識(shí)匯編語(yǔ)言指令的格式標(biāo)號(hào):指令助記符目的操作數(shù),源操作數(shù) ;注釋標(biāo)號(hào)表示該指令在主存中的邏輯地址每個(gè)指令助記符就代表一種指令目的和源操作數(shù)表示參與操作的對(duì)象注釋是對(duì)該指令或程序段功能的說(shuō)明2/22/202358河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院準(zhǔn)備知識(shí)指令操作數(shù)的表達(dá)立即數(shù):i8、i16、i32、imm、data、dest、src寄存器:reg
(r8、r16、r32)、seg存儲(chǔ)器:mem
(m8、m16、m32)累加器:ac2/22/202359河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.3.1數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令知識(shí)要點(diǎn)累加器傳送指令地址傳送指令標(biāo)志寄存器傳送指令類型轉(zhuǎn)換指令2/22/202360河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.3.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲(chǔ)單元中。數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最重要的一種操作。傳送指令也是最常使用的一類指令。傳送指令把數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置。除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位。2/22/202361河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院1.通用數(shù)據(jù)傳送指令傳送指令MOV帶符號(hào)擴(kuò)展指令MOVSX帶零擴(kuò)展指令MOVZX進(jìn)棧指令PUSH出棧指令POP所有寄存器進(jìn)棧指令PUSHA/PUSHAD所有寄存器出棧指令POPA/POPAD交換指令XCHG2/22/202362河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)MOV(move)傳送把一個(gè)字節(jié)、字或雙字的操作數(shù)從源地址傳送至目的地址。格式為:MOVDST,SRC執(zhí)行操作:(DST)←(SRC)其中DST表示目的操作數(shù),SRC表示源操作數(shù)。MOV指令傳送功能示意圖非法傳送情況可以傳送字節(jié)、字、雙字2/22/202363河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)MOV(move)傳送MOVreg/mem,imm
;立即數(shù)送寄存器或主存MOVreg/mem/seg,reg
;寄存器送(段)寄存器或主存MOVreg/mem,seg
;段寄存器送寄存器或主存MOVreg/seg,mem
;主存送(段)寄存器MOV指令傳送形式示例1示例2示例3示例42/22/202364河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)MOVSX(movewithsign-extend)帶符號(hào)傳送該指令屬386及其后繼機(jī)型可用指令。格式為:MOVSXDST,SRC執(zhí)行操作:(DST)←符號(hào)擴(kuò)展(SRC)傳送時(shí)把源操作數(shù)符號(hào)擴(kuò)展送入目的寄存器。可以是8位符號(hào)擴(kuò)展到16位或32位;也可以是16位符號(hào)擴(kuò)展到32位。2/22/202365河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)MOVSX(movewithsign-extend)帶符號(hào)傳送MOVreg
(r16/r32),reg(r8/r16)
;寄存器送寄存器主存MOVreg(r16/r32),mem(m8/m16)
;主存送寄存器MOVSX指令傳送形式示例2/22/202366河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)MOVZX(movewithzero-extend)帶零擴(kuò)展傳送該指令屬386及其后繼機(jī)型可用指令。格式為:MOVZXDST,SRC執(zhí)行操作:(DST)←零擴(kuò)展(SRC)傳送時(shí)把源操作數(shù)零擴(kuò)展送入目的寄存器。可以是8位符號(hào)擴(kuò)展到16位或32位;也可以是16位符號(hào)擴(kuò)展到32位。2/22/202367河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)MOVZX(movewithzero-extend)帶零擴(kuò)展傳送MOVreg
(r16/r32),reg(r8/r16) ;寄存器送寄存器主存MOVreg(r16/r32),mem(m8/m16) ;主存送寄存器MOVZX指令傳送形式示例MOVSX和MOVZX指令與一般雙操作數(shù)指令的差別是:一般雙操作數(shù)指令的源操作數(shù)和目的操作數(shù)的長(zhǎng)度是一致的,但MOVSX和MOVZX的源操作數(shù)長(zhǎng)度一定要小于目的操作數(shù)長(zhǎng)度。2/22/202368河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院堆棧堆棧是一個(gè)“后進(jìn)先出FILO”(或說(shuō)“先進(jìn)后出FILO”)的主存區(qū)域,位于堆棧段中;SS段寄存器記錄其段地址。堆棧只有一個(gè)出口,即當(dāng)前棧頂;用堆棧指針寄存器SP(ESP)指定。棧頂是地址較小的一端(低端),棧底不變。2/22/202369河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院堆棧堆棧:按照后進(jìn)先出(LIFO)的原則組織的存儲(chǔ)器空間(棧)。隊(duì)列:按照先進(jìn)先出(FIFO)的原則組織的存儲(chǔ)器空間。LIFOFIFO2/22/202370河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(4)PUSH(pushontothestack)進(jìn)棧格式為:PUSHSRC執(zhí)行操作:
16位指令:(SP)←(SP)-2 ((SP)+1,(SP))←(SRC)32位指令:(ESP)←(ESP)-4 ((ESP)+3,(ESP)+2,(ESP)+1,(ESP))←(SRC)2/22/202371河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(4)PUSH(pushontothestack)進(jìn)棧PUSH指令可以有四種格式:PUSHregPUSHmemPUSHdataPUSHsegreg也就是說(shuō),它可使用所有的尋址方式,但8086不允許PUSH指令使用立即數(shù)尋址方式。執(zhí)行演示示例2/22/202372河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(5)POP(popfromthestack)出棧格式為:POPDST執(zhí)行操作:
16位指令:(DST)←((SP)+1,(SP))
-2 (SP)←(SP)+232位指令:(DST)←((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) (ESP)←(ESP)+42/22/202373河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(5)POP(popfromthestack)出棧POP指令允許的格式:POPregPOPmemPOPsegreg
POP指令不允許使用立即數(shù)尋址方式。執(zhí)行演示注意:POP指令的目的為段寄存器時(shí),不允許使用CS寄存器。示例2/22/202374河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院堆棧操作PUSH指令:先使堆棧指針SP(ESP)減2(4),然后把一個(gè)字(雙字)操作數(shù)存入堆棧頂部。POP指令:把棧頂?shù)囊粋€(gè)字(雙字)傳送至指定的目的操作數(shù),然后堆棧指針SP(ESP)加2(4)。
SP或ESP的內(nèi)容在任何時(shí)候都指向當(dāng)前的棧頂,所以PUSH和POP指令都必須根據(jù)當(dāng)前SP或ESP的內(nèi)容來(lái)確定進(jìn)棧或出棧的存儲(chǔ)單元,而且必須及時(shí)修改指針,以保證SP或ESP指向當(dāng)前的棧頂。具體見表3.3。2/22/202375河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院特殊說(shuō)明8086中:
PUSHSP指令入棧的是該指令已修改了的SP新值;
PUSHESP指令入棧的卻是ESP在執(zhí)行該指令之前的舊值。此時(shí)PUSH和POP指令在使用與存儲(chǔ)器有關(guān)的尋址方式且用ESP作為基址寄存器時(shí):PUSH指令使用該指令執(zhí)行前的ESP內(nèi)容;POP指令則使用該指令執(zhí)行后的ESP內(nèi)容來(lái)計(jì)算基地址。2/22/202376河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(6)PUSHA/PUSHAD(pushallregisters)所有寄存器進(jìn)棧格式為:PUSHA執(zhí)行操作:
16位通用寄存器依次進(jìn)棧,進(jìn)棧次序?yàn)椋篈X,CX,DX,BX,指令執(zhí)行前的SP,BP,SI,DI。指令執(zhí)行后(SP)←(SP)-16仍指向棧頂。格式為:PUSHAD執(zhí)行操作:
32位通用寄存器依次進(jìn)棧,進(jìn)棧次序?yàn)椋篍AX,ECX,EDX,EBX,指令執(zhí)行前的ESP,EBP,ESI和EDI。指令執(zhí)行后(ESP)←(ESP)-32。示例2/22/202377河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(7)POPA/POPAD(popallregisters)所有寄存器出棧格式為:POPA執(zhí)行操作:
16位通用寄存器依次出棧,出棧次序?yàn)椋篋I,SI,BP,SP,BX,DX,CX,AX,指令執(zhí)行后(SP)←(SP)+16仍指向棧頂。應(yīng)該說(shuō)明的是:SP的出棧只是修改了指針使其后的BX能順利出棧,而堆棧中原先由PUSHA指令存入的SP的原始內(nèi)容被丟棄,并未真正送到SP寄存器中去。2/22/202378河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(7)POPA/POPAD(popallregisters)所有寄存器出棧格式為:POPAD執(zhí)行操作:
32位通用寄存器依次出棧,出棧次序?yàn)椋篍DI,ESI,EBP,ESP,EBX,EDX,ECX,EAX。指令執(zhí)行后(ESP)←(ESP)+32仍指向棧頂。與POPA相同,堆棧中存放的原ESP的內(nèi)容被丟棄而不裝入ESP寄存器。
2/22/202379河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院堆棧的操作特點(diǎn)堆棧只有兩種基本操作:進(jìn)棧和出棧,對(duì)應(yīng)四條指令PUSH、POP、PUSHA/PUSHAD、POPA/POPAD。PUSHA和POPA可用于286及其后繼機(jī)型;
PUSHAD和POPAD可用于386及其后繼機(jī)型。堆棧的存取在16位指令中必須以字為單位(不允許字節(jié)堆棧),在32位指令中必須以雙字為單位,所以PUSH和POP指令只能作字或雙字操作。2/22/202380河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院堆棧的特點(diǎn)字(雙字)數(shù)據(jù)從棧頂壓入和彈出時(shí),都是低地址字節(jié)(字)送低字節(jié)(字),高地址字節(jié)(字)送高字節(jié)(字)。堆棧操作遵循先進(jìn)后出原則,但可用存儲(chǔ)器尋址方式隨機(jī)存取堆棧中的數(shù)據(jù)。堆棧常用來(lái)臨時(shí)存放數(shù)據(jù)傳遞參數(shù)保存和恢復(fù)寄存器示例2/22/202381河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院堆棧的特點(diǎn)如果在程序中要用到某些寄存器,但它們的內(nèi)容卻在將來(lái)還有用,這是就可以用PUSHA/PUSHAD指令把它們保存在堆棧中,然后在需要時(shí)再用POPA/POPAD指令恢復(fù)其原始內(nèi)容。子程序結(jié)構(gòu)的程序和中斷程序中就經(jīng)常會(huì)用到它們。2/22/202382河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(8)XCHG(exchange)交換把兩個(gè)地方的數(shù)據(jù)進(jìn)行互換。格式為:XCHGOPR1,OPR2執(zhí)行操作:(OPR1)<->(OPR2)其中OPR表示操作數(shù)。指令允許字或字節(jié)操作,386及其后繼機(jī)型還允許雙字操作。2/22/202383河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(8)XCHG(exchange)交換XCHGreg,reg/mem
;reg
reg/mem
XCHG指令傳送形式示例2寄存器與寄存器之間對(duì)換數(shù)據(jù)。寄存器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)。不能在存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)。不允許使用段寄存器。執(zhí)行演示示例12/22/202384河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院2.累加器專用傳送指令輸入指令I(lǐng)N輸出指令OUT換碼指令XLAT這組指令只限于使用累加器EAX,AX或AL傳送信息。2/22/202385河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院輸入/輸出指令(IN/OUT)在80x86里,外設(shè)與CPU之間的通信都由輸入輸出(IN/OUT)指令來(lái)完成,呈現(xiàn)給程序員的外設(shè)是端口(Port)即I/O地址。
8086用于尋址外設(shè)端口的地址線為16條,端口最多為216=65536(64K)個(gè),端口號(hào)(即外部設(shè)備的端口地址)為0000H~FFFFH。CPU只能用累加器(AL或AX或EAX)接收或發(fā)送信息。
IN完成從I/O到CPU的信息傳送,而OUT則完成從CPU到I/O的信息傳送。每個(gè)端口用于傳送一個(gè)字節(jié)的外設(shè)數(shù)據(jù)。2/22/202386河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院輸入輸出尋址方式
直接尋址(長(zhǎng)格式):只用于尋址00H~FFH前256個(gè)端口,操作數(shù)i8表示端口號(hào)。
間接尋址(短格式):可用于尋址全部64K個(gè)端口(端口號(hào)可以從0000~0FFFFH),DX寄存器的值就是端口號(hào)。對(duì)大于FFH的端口只能采用間接尋址方式。2/22/202387河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)IN(input)輸入長(zhǎng)格式為:INAL,PORT(字節(jié))INAX,PORT(字)INEAX,PORT(雙字)執(zhí)行的操作:(AL)←(PORT)(字節(jié))(AX)←(PORT+1,PORT)(字)(EAX)←(PORT+3,PORT+2,PORT+1,PORT)(雙字)2/22/202388河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)IN(input)輸入短格式為:INAL,DX(字節(jié))INAX,DX(字)INEAX,DX(雙字)執(zhí)行的操作:(AL)←((DX))(字節(jié))(AX)←((DX)+1,(DX))(字)(EAX)←((DX)+3,(DX)+2,(DX)+1,(DX))(雙字)2/22/202389河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)OUT(output)輸出長(zhǎng)格式為:OUTPORT,AL(字節(jié))OUTPORT,AX(字)OUTPORT,EAX(雙字)執(zhí)行的操作:(PORT)←(AL)(字節(jié))(PORT+1,PORT)←(AX)(字)(PORT+3,PORT+2,PORT+1,PORT)←(EAX)(雙字)2/22/202390河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)OUT(output)輸出短格式為:OUTDX,AL(字節(jié))OUTDX,AX(字)OUTDX,EAX(雙字)執(zhí)行的操作:((DX))←(AL)(字節(jié))((DX)+1,(DX))←(AX)(字)((DX)+3,(DX)+2,(DX)+1,(DX))←(EAX)(雙字)2/22/202391河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院輸入/輸出指令(IN/OUT)注意:這里的端口號(hào)或DX的內(nèi)容均為地址,而傳送的是端口中的信息,而且在用短格式時(shí)DX內(nèi)容就是端口號(hào)本身,不需要由任何段寄存器來(lái)修改它的值。操作提示示例2
IN和OUT指令提供了雙字、字和字節(jié)三種使用方式,選用哪一種,則取決于外設(shè)端口寬度。如端口寬度只有8位,則只能用字節(jié)指令傳送信息。示例12/22/202392河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)XLAT(translate)換碼將BX(EBX)指定的緩沖區(qū)中、AL指定的位移處的一個(gè)字節(jié)數(shù)據(jù)取出賦給AL。格式為: XLATOPR
或 XLAT執(zhí)行的操作:
16位指令:(AL)←((BX)+(AL))
32位指令:(AL)←((EBX)+(AL))2/22/202393河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)XLAT(translate)換碼
OPR為表格的首地址(一般為符號(hào)地址),在這里只是為提高程序的可讀性而設(shè)置的,指令執(zhí)行時(shí)只使用預(yù)先已存入BX或EBX中的表格首地址,而并不用匯編格式中指定的值。
換碼指令執(zhí)行前:在主存建立一個(gè)字節(jié)表格,內(nèi)含要轉(zhuǎn)換成的目的代碼,表格首地址存放于BX或EBX,AL存放相對(duì)表格首地址的位移量(即需要轉(zhuǎn)換的代碼)。
換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼。執(zhí)行演示示例2/22/202394河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.地址傳送指令有效地址傳送寄存器指令LEA指針?biāo)图拇嫫骱虳S指令LDS指針?biāo)图拇嫫骱虴S指令LES指針?biāo)图拇嫫骱虵S指令LFS指針?biāo)图拇嫫骱虶S指令LGS指針?biāo)图拇嫫骱蚐S指令LSS地址傳送指令將存儲(chǔ)器單元的邏輯地址送至指定的寄存器。2/22/202395河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)LEA(loadeffectiveaddress)有效地址傳送寄存器格式為:LEAREG,SRC執(zhí)行的操作:(REG)←MEM的有效地址指令把源操作數(shù)的有效地址送到指定的寄存器中。該指令的目的操作數(shù)可使用16位或32位寄存器,但不能使用段寄存器。源操作數(shù)可使用除立即數(shù)和寄存器外的任一種存儲(chǔ)器尋址方式。由于存在操作數(shù)長(zhǎng)度和地址長(zhǎng)度的不同,該指令執(zhí)行的操作如表3.4所示。示例1示例22/22/202396河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)指針?biāo)图拇嫫骱虳S/ES/FS/GS/SS該組指令包括LDS、LES、LFS、LGS、LSS。格式以LDS為例為:LDSREG,SRC執(zhí)行的操作:
16位指令:(REG)←(MEM) (SREG)←(MEM+2)
32位指令:(REG)←(MEM) (SREG)←(MEM+4)2/22/202397河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)指針?biāo)图拇嫫骱虳S/ES/FS/GS/SS該組指令的源操作數(shù)只能用存儲(chǔ)器尋址方式,根據(jù)任一種存儲(chǔ)器尋址方式找到一個(gè)存儲(chǔ)單元。其他指令格式與LDS指令格式相同,僅指定的段寄存器不同。本組指令的目的寄存器不允許使用段寄存器。LFS、LGS和LSS只能用于386及其后繼機(jī)型中。示例2/22/202398河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院4.標(biāo)志寄存器傳送指令標(biāo)志送AH指令LAHFAH送標(biāo)志寄存器指令SAHF標(biāo)志進(jìn)棧指令PUSHF/PUSHFD標(biāo)志出棧指令POPF/POPFD用來(lái)傳送標(biāo)志寄存器(E)FLAGS的內(nèi)容,方便進(jìn)行對(duì)各個(gè)標(biāo)志位的直接操作。2/22/202399河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)LAHF(loadAHwithflags)標(biāo)志送AH格式為:LAHF執(zhí)行的操作:
(AH)←(FLAGS的低字節(jié))2/22/2023100河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)SAHF(storeAHintoflags)AH送標(biāo)志寄存器格式為:SAHF執(zhí)行的操作:
(FLAGS的低字節(jié))
←(AH)2/22/2023101河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)PUSHF/PUSHFD(pushtheflagsoreflags)標(biāo)志進(jìn)棧格式為: PUSHF PUSHFD執(zhí)行的操作:
PUSHF:(SP)←(SP)-2
((SP)+1,(SP))←(FLAGS)
PUSHFD:(ESP)←(ESP)-4
((ESP)+3,(ESP)+2,(ESP)+1,(ESP))←(EFLAGSAND0FCFFFFH)(清除VM和RF位)2/22/2023102河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(4)POPF/POPFD(poptheflagsoreflags)標(biāo)志出棧格式為: POPF POPFD執(zhí)行的操作:
POPF:(FLAGS)←((SP)+1,(SP))(SP)←(SP)+2PUSHFD:((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) ←(EFLAGS) (ESP)←(ESP)+42/22/2023103河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院該組指令對(duì)標(biāo)志位的影響LAHF不影響標(biāo)志位。PUSHF/PUSHFDSAHF由裝入的值來(lái)確定標(biāo)志位的值。但POPFD指令不影響VM,RF,IOPL,VIF和VIP的值。POPF/POPFD示例2/22/2023104河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院5.類型轉(zhuǎn)換指令字節(jié)轉(zhuǎn)換為字CBW字轉(zhuǎn)換為雙字CWD/CWDE雙字轉(zhuǎn)換為4字CDQ字節(jié)交換BSWAP符號(hào)擴(kuò)展指令2/22/2023105河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)CBW(convertbytetoword)字節(jié)轉(zhuǎn)換為字格式: CBW執(zhí)行的操作:AL的內(nèi)容符號(hào)擴(kuò)展到AH,形成AX中的字。即如果(AL)的最高有效位為0,則(AH)=0;如(AL)的最高有效位為1,則(AH)=0FFH。2/22/2023106河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)CWD/CWDE(convertwordtodoubleword)字轉(zhuǎn)換為雙字格式: CWD執(zhí)行的操作:AX的內(nèi)容符號(hào)擴(kuò)展到DX,形成DX:AX中的雙字。即如果(AX)的最高有效位為0,則(DX)=0;如果(AX)的最高有效位為1,則(DX)=0FFFFH。格式:CWDE執(zhí)行的操作:AX的內(nèi)容符號(hào)擴(kuò)展到EAX,形成EAX中的雙字。2/22/2023107河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)CDQ(convertdoubletoquad)雙字轉(zhuǎn)換為4字格式: CDQ執(zhí)行的操作:EAX的內(nèi)容符號(hào)擴(kuò)展到EDX,形成EDX:EAX中的4字。示例2/22/2023108河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(4)BSWAP(byteswap)字節(jié)交換格式:BSWAPr32該指令只能用于486及其后繼機(jī)型。R32指32位寄存器。示例執(zhí)行的操作:使指令指定的32位寄存器的字節(jié)次序變反。具體操作為:1、4字節(jié)互換,2、3字節(jié)互換。
2/22/2023109河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.3.2算術(shù)指令加法指令知識(shí)要點(diǎn)減法指令乘法指令除法指令十進(jìn)制調(diào)整指令2/22/2023110河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院3.3.2算術(shù)指令
80x86的算術(shù)運(yùn)算指令包括二進(jìn)制運(yùn)算和十進(jìn)制運(yùn)算指令。有雙操作數(shù)指令,也有單操作數(shù)指令。單操作數(shù)指令不允許使用立即數(shù)方式。雙操作數(shù)指令中,必須有一個(gè)操作數(shù)在寄存器中(源操作數(shù)為立即數(shù)的情況除外)。請(qǐng)注意算術(shù)運(yùn)算類指令對(duì)標(biāo)志的影響。2/22/2023111河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院1.加法指令加法指令A(yù)DD帶進(jìn)位加法指令A(yù)DDC加1指令I(lǐng)NC交換并相加指令XADD2/22/2023112河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)ADD(add)加法ADD指令將源與目的操作數(shù)相加,結(jié)果送到目的操作數(shù)。格式: ADDDST,SRC執(zhí)行的操作:(DST)←(SRC)+(DST)ADD指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置。2/22/2023113河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)ADD(add)加法ADDreg,imm/reg/mem
;reg←reg+imm/reg/memADD指令形式ADDmem,imm/reg
;mem←mem+imm/reg示例2/22/2023114河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)ADC(addwithcarry)帶進(jìn)位加法
ADC指令將源與目的操作數(shù)相加,再加上進(jìn)位CF標(biāo)志,結(jié)果送到目的操作數(shù)。格式: ADCDST,SRC執(zhí)行的操作:(DST)←(SRC)+(DST)+CFADC指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置。ADC指令主要與ADD配合,實(shí)現(xiàn)多精度加法運(yùn)算。其中CF為進(jìn)位位的值。2/22/2023115河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)ADC(addwithcarry)帶進(jìn)位加法ADCreg,imm/reg/mem
;reg←reg+imm/reg/mem+CFADC指令形式ADCmem,imm/reg
;mem←mem+imm/reg+CF示例2/22/2023116河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)INC(increment)加1
INC指令對(duì)操作數(shù)加1(增量)。格式:INCOPR執(zhí)行的操作:(OPR)←(OPR)+1INC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志。2/22/2023117河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(3)INC(increment)加1INCreg/mem
;reg/mem←reg/mem+1INC指令形式INCBXINCbyteptr[BX]以上三條指令都可作字節(jié)、字或雙字(386及其后繼機(jī)型)運(yùn)算2/22/2023118河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(4)XADD(exchangeandadd)交換并相加
XADD指令把目的操作數(shù)裝入源,并把源和目的操作數(shù)之和送目的地址。格式:XADDDST,SRC執(zhí)行的操作:(TEMP)←(SRC)+(DST) (SRC)←(DST) (DST)←(TEMP)該指令只能用于486及其后繼機(jī)型。XADD指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置。2/22/2023119河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(4)XADD(exchangeandadd)交換并相加XADDreg/mem,reg
;temp←reg/mem+reg
;reg←reg/mem
;reg/mem←tempXADD指令形式示例該指令可作雙字、字或字節(jié)運(yùn)算。2/22/2023120河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院2.減法指令減法指令SUB帶借位減法指令SBB減1指令DEC求補(bǔ)指令NEG比較指令CMP比較并交換指令CMPXCHG比較并交換8字節(jié)CMPXCHG8B2/22/2023121河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)SUB(substract)減法SUB指令將目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)。格式:SUBDST,SRC執(zhí)行的操作:(DST)←(DST)-(SRC)SUB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志。2/22/2023122河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(1)SUB(substract)減法SUBreg,imm/reg/mem
;reg←reg-imm/reg/memSUB指令形式SUBmem,imm/reg
;mem←mem-imm/reg示例1示例22/22/2023123河南師范大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院(2)SBB(substractwithcarry)帶進(jìn)位減法
SBB指令將目的操作數(shù)減去源操作數(shù),再減去借位CF(進(jìn)位),結(jié)果送到目的操作數(shù)。格式:SBBDST,SRC執(zhí)行的操作:(DST)←(DST)-(SRC)-CFSBB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志。SBB指令主要與SUB配合,實(shí)現(xiàn)多精度減法運(yùn)算。其中CF為進(jìn)位位的值。2/22/2023124河
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 船舶保養(yǎng)考試題及答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職法學(xué)考前沖刺試卷A卷含答案
- 小升初科學(xué)測(cè)試題及答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)能力檢測(cè)試卷B卷附答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)??寄M試題(全優(yōu))
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)基礎(chǔ)試題庫(kù)和答案要點(diǎn)
- 社保知識(shí)培訓(xùn)課件北京
- 語(yǔ)文小說(shuō)文本解讀技巧訓(xùn)練教案:以小說(shuō)圍城為例
- 辦公室人員基本信息表
- 寫作技巧大揭秘:高中語(yǔ)文作文指導(dǎo)課程教案
- 2025年共青科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)完整版
- 2025年上半年潛江市城市建設(shè)發(fā)展集團(tuán)招聘工作人員【52人】易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 統(tǒng)編版語(yǔ)文二年級(jí)下冊(cè)15古詩(shī)二首 《曉出凈慈寺送林子方》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 旅游電子商務(wù)(第2版) 課件全套 周春林 項(xiàng)目1-8 電子商務(wù)概述-旅游電子商務(wù)數(shù)據(jù)挖掘
- 2025年安徽警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 廣東廣東省錢幣學(xué)會(huì)招聘筆試歷年參考題庫(kù)附帶答案詳解
- 2025年福建省中職《英語(yǔ)》學(xué)業(yè)水平考試核心考點(diǎn)試題庫(kù)500題(重點(diǎn))
- 【課件】自然環(huán)境課件-2024-2025學(xué)年七年級(jí)地理下冊(cè)人教版
- 2025年河北省職業(yè)院校技能大賽智能節(jié)水系統(tǒng)設(shè)計(jì)與安裝(高職組)考試題庫(kù)(含答案)
- 2025-2030年中國(guó)蒸發(fā)器冷凝器行業(yè)發(fā)展?fàn)顩r及前景趨勢(shì)分析報(bào)告
- 2024年江西環(huán)境工程職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論