版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
8086CPU結(jié)構(gòu)CPU引腳及其功能存儲器組織與堆??偩€周期與操作時序
第一部分8086系統(tǒng)結(jié)構(gòu)§1.18086CPU結(jié)構(gòu)
一、8086的功能結(jié)構(gòu)
Intel8086是一個由Intel于1978年所設(shè)計的16位微處理器芯片,是x86架構(gòu)的鼻祖。
8086從功能上分為兩部分:總線接口部分(BIU),執(zhí)行部分(EU)。兩部分各自執(zhí)行自己的功能,并行工作,這種工作方式與傳統(tǒng)的計算機在執(zhí)行指令時的串行工作方式相比極大地提高了工作效率。
通用寄存器AHALBHBLCHCLDISI暫存寄存器ALU標(biāo)志寄存器執(zhí)行部分控制電路123456CSDSSSESIP
內(nèi)部寄存器總線控制邏輯地址加法器20位16位8位指令隊列緩沖器6個字節(jié)外總線執(zhí)行部件(EU)總線接口部件(BIU)8086CPU結(jié)構(gòu)圖DHDLSPBPALU的數(shù)據(jù)總線16位1、總線接口部件(BIU)功能:(1)地址的形成(2)從內(nèi)存取指令送到指令隊列(3)CPU執(zhí)行指令時,讀/寫操作數(shù)(4)總線控制總線接口部件的組成:(1)四個段地址寄存器
CS,16位代碼段寄存器(CodeSegment)
DS,16位數(shù)據(jù)段寄存器(DataSegment)
ES,16位附加段寄存器(ExtraSegment)
SS,16位堆棧段寄存器(StackSegment)(2)16位指令指針寄存器IP(PC)。InstructionPointerregister(3)20位的地址加法器。(4)六字節(jié)的指令隊列緩沖器。(5)總線控制邏輯:發(fā)出總線控制邏輯說明:(1)指令隊列緩沖器:存放6字節(jié)的指令代碼,先進(jìn)先出,允許預(yù)取6字節(jié)指令代碼。(2)地址加法器:產(chǎn)生20位地址。CPU內(nèi)無論是段地址寄存器還是偏移量都是16位的,通過地址加法器產(chǎn)生20位地址。2、執(zhí)行部件作用:(1)從指令隊列中取出指令。(2)對指令進(jìn)行譯碼,發(fā)出相應(yīng)的控制信號。(3)接收由總線接口送來的數(shù)據(jù)或發(fā)送數(shù)據(jù)至接口。(4)進(jìn)行算術(shù)、邏輯運算。執(zhí)行部件的組成:(1)4個通用寄存器:AX(累加器)、BX(基址寄存器)、CX(計數(shù)寄存器)、DX(數(shù)據(jù)寄存器)
四個通用寄存器都是16位或作兩個8位來使用。(2)4個專用寄存器SP------堆棧指針寄存器(在堆棧操作使用)StackPointerBP------基址指針寄存器BasePointerDI-------目的變址寄存器DestinationIndexSI-------源變址寄存器(和DI成為變址寄存器,通常與DS一起使用,提供偏移量)SourceIndex(3)算術(shù)邏輯單元ALU
完成8位或者16位二進(jìn)制算術(shù)和邏輯運算,計算偏移量。(4)數(shù)據(jù)暫存寄存器協(xié)助ALU完成運算,暫存參加運算的數(shù)據(jù)。(5)執(zhí)行部件的控制電路:取指令控制和時序控制從總線接口的指令隊列取出指令操作碼,通過譯碼電路分析,發(fā)出相應(yīng)的控制命令,控制ALU數(shù)據(jù)流向。(6)標(biāo)志寄存器16位寄存器,其中有7位未用。D15D0OFDFIFTFSFZFAFPFCF進(jìn)借位標(biāo)志奇偶標(biāo)志半進(jìn)借位標(biāo)志零標(biāo)志符號標(biāo)志單步中斷中斷允許方向標(biāo)志溢出標(biāo)志1-有進(jìn)、借位0-無進(jìn)、借位1-低8位有偶數(shù)個10-低8位有奇數(shù)個11-低4位向高4位有進(jìn)、借位0-低4位向高4位無進(jìn)、借位1-結(jié)果為00-結(jié)果不為03、CPU執(zhí)行程序的操作過程(1)20位地址形成,并將從該地址指定的單元中取出指令字節(jié),依次放入指令隊列中。(2)當(dāng)指令隊列中有2個空字節(jié)時,總線接口部件就會自動取指令至隊列中。(3)執(zhí)行部件從指令隊列隊首取出指令代碼,執(zhí)行該指令。(4)當(dāng)隊列已滿,執(zhí)行部件又不使用總線時,總線接口部件進(jìn)入空閑狀態(tài)。(5)執(zhí)行轉(zhuǎn)移指令、調(diào)用指令、返回指令時,先清空隊列內(nèi)容,再將要執(zhí)行的指令放入隊列中?!?.28086CPU的引腳及其功能8086CPU可在兩種模式下工作:
最小模式:只有一8086CPU。最大模式:有兩個或兩個以上的CPU,一個為主CPU8086,另一個為協(xié)CPU8087。指令周期:執(zhí)行一條指令所需要的時間??偩€周期:CPU通過總線與存儲器或I/O接口進(jìn)行一次數(shù)據(jù)傳輸所需的時間。T狀態(tài)(時鐘周期):CPU處理動作的最小單位。
T1狀態(tài)——輸出存儲器地址或I/O地址。T2狀態(tài)——輸出控制信號。T3和Tw狀態(tài)——總線操作持續(xù),并檢測READY以決定是否延長時序。T4狀態(tài)——完成數(shù)據(jù)傳送T1T2T3TWT4總線周期01020304050607080910111213141516171819204039383736353433323130292827262524232221GNDAD14AD13AD12AD11AD10AD9AD8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLKGNDVCC(5V)AD15A16/S3A17/S4A18/S5A19/S6/BHE/S7MN//MX/RDHOLD(/RQ//GT0)
HLDA(/RQ//GT1)/WR(/LOCK)M//IO(/S2)DT//R(/S1)/DEN(/S0)ALE(QS0)/INTA(QS1)/TESTREADYRESET8086一、最小模式下的引腳及功能1、地址/數(shù)據(jù)總線(AddressandDataBus)AD15-AD0:地址/數(shù)據(jù)復(fù)用引腳,雙向,三態(tài)。在T1狀態(tài),為16位地址總線A15-A0,輸出訪問存儲器或I/O的地址信息。在T2~T4狀態(tài),為16位數(shù)據(jù)總線D15-D0,與存儲器和I/O設(shè)備交換數(shù)據(jù)信息。地址/數(shù)據(jù)總線復(fù)用,分時工作。2、A19/S6-A16/S3(Address/Status)地址/狀態(tài)總線復(fù)用引腳,輸出,三態(tài)。T1狀態(tài):輸出地址的高4位信息A19-A16T2、T3、T4狀態(tài):輸出狀態(tài)信息S6:指示當(dāng)前CPU是否與總線相連,S6=0,表示8086當(dāng)前與總線相連。S5:中斷允許標(biāo)志當(dāng)前的狀態(tài)。
S5=0,禁止一切可屏蔽中斷源的中斷請求;
S5=1,允許一切可屏蔽中斷源的中斷申請。S4、S3:當(dāng)前正在使用的段寄存器
S4S3段寄存器
00當(dāng)前正在使用ES01當(dāng)前正在使用SS10當(dāng)前正在使用CS11當(dāng)前正在使用DS
(5)READY:準(zhǔn)備就緒信號,輸入,高電平有效。
READY=1,表示CPU訪問的存儲器或IO端口已準(zhǔn)備好傳送數(shù)據(jù)。若CPU在總線周期T3狀態(tài)檢測到READY=0,表示未準(zhǔn)備好,CPU自動插入一個或多個等待狀態(tài)TW,直到READY=1為止。(6)INTR:可屏蔽中斷請求信號,輸入。當(dāng)INTR=1,表示外設(shè)向CPU發(fā)出中斷請求,CPU在當(dāng)前指令周期的最后一個T狀態(tài)去采樣該信號,若此時,IF=1,CPU響應(yīng)中斷,執(zhí)行中斷服務(wù)程序。
(10)RESET:復(fù)位信號,輸入,高電平有效。RESET信號至少要保持4個時鐘周期。復(fù)位時:標(biāo)志寄存器、IP、DS、SS、ES為0,CS=FFFFH,指令隊列清空。復(fù)位后CPU從FFFF0H處開始執(zhí)行。(11)ALE:地址鎖存允許信號,輸出,高電平有效。用來鎖存地址信號A15-A0,分時使用AD15-AD0地址/數(shù)據(jù)總線。
4、電源線和地線8086/8088采用單+5V,1、20引腳為地線。1.3
8086存儲器組織1、存儲器編址2、存儲器的分段結(jié)構(gòu)3、8086存儲器的分體結(jié)構(gòu)
1、存儲器編址
在內(nèi)存里以字節(jié)為單位存取信息,系統(tǒng)為每個字節(jié)編一個地址(二進(jìn)制數(shù)表示,書寫格式為十六進(jìn)制),稱為存儲器地址,存儲的內(nèi)容即為數(shù)據(jù)。地址內(nèi)容00000H00001H00002HFFFFFH000000010010001101000101……存儲器中的數(shù)據(jù)及表示形式2301H(規(guī)則字)4523H(非規(guī)則字)地址內(nèi)容00000H00001H00002HFFFFFH000000010010001101000101……01H2301H4523H45H數(shù)據(jù)地址字節(jié)數(shù)01H00000H字節(jié)數(shù)23H00001H字節(jié)數(shù)45H00002H字2301H00000H字4523H00001H順序存放,低字節(jié)低地址(字?jǐn)?shù)據(jù))2、存儲器的分段結(jié)構(gòu)
8086有20條地址線,尋址達(dá)220(1M)字節(jié),把1M字節(jié)的存儲器分為任意數(shù)量的段,其中每一段最多可達(dá)尋址216(64K)字節(jié)。
每個段的起始地址必須能16整除(該地址的最低四位為0000)。
8086可將內(nèi)存最多可分為64K個段,最少可分為16個段。每個段的最大范圍是64KB,最小的段是16B。段與段之間可連續(xù)分布,也可重疊。
(1)邏輯地址和物理地址物理地址:也稱實際地址,是用唯一的20位二進(jìn)制數(shù)所表示的地址,規(guī)定了1M字節(jié)存儲體中某個具體單元的地址。邏輯地址在程序中使用,即段地址:偏移地址
。如2000H:0003H2000H:0000H12H0001H34H0002H56H0003H78H
(2)物理地址的形成物理地址=段基址*16(左移4位)+偏移地址。段基址:CS、DS、ES、SS。偏移地址:IP、DI、SI、BX、BP、SP等。物理地址的形成如下:(由20位地址加法器實現(xiàn))段寄存器值偏移量+物理地址16位4位16位20位0000一個存儲單元可以有一個或多個邏輯地址,但只能有一個物理地址。例如物理地址21000H可以有以下幾個邏輯地址:
2100:0000H2000:0100H段基址由系統(tǒng)自動分配,而偏移地址則由用戶編程時提供。
CS0000IP代碼段DS或ES0000SI、DI或BXSS0000SP或BP數(shù)據(jù)段堆棧段存儲器段寄存器和偏移地址寄存器組合關(guān)系
8086用兩個存儲體來組織實際存儲空間
奇地址偶地址00001H00003H00000H00002HFFFFEHFFFFFH….….A0A0~A19BHED8~D15D0~D7地址交叉排列8086D0~D15規(guī)劃字(對準(zhǔn)字)存放:偶地址作為字的地址非規(guī)劃字(非對準(zhǔn)字)存放:奇地址作為字的地址規(guī)則字的讀/寫只需訪問一次存儲器;非規(guī)則字的讀/寫需二次訪問存儲器。第一次訪問奇地址,第二次訪問偶地址。
§1.4總線周期與操作時序指令周期:執(zhí)行一條指令所需要的時間??偩€周期:CPU通過總線與存儲器或I/O接口進(jìn)行一次數(shù)據(jù)傳輸所需的時間。T狀態(tài)(時鐘周期):CPU處理動作的最小單位。T1T2T3TWT4總線周期T1狀態(tài)——輸出存儲器地址或I/O地址。T2狀態(tài)——輸出控制信號。T3和Tw狀態(tài)——總線操作持續(xù),并檢測READY以決定是否延長時序。T4狀態(tài)——完成數(shù)據(jù)傳送8086的操作時序分為如下幾個總線周期:(1)總線讀周期
(2)總線寫周期(3)總線空操作(4)中斷響應(yīng)周期(5)總線保持和響應(yīng)周期(6)復(fù)位操作
(4)TW狀態(tài)在T3狀態(tài),存儲器或外設(shè)沒有準(zhǔn)備好數(shù)據(jù),不能在T3狀態(tài)將數(shù)據(jù)放到總線上,使READY=0,則CPU在T3和T4之間插入一個或幾個TW狀態(tài),直到數(shù)據(jù)準(zhǔn)備好READY=1為止。TW狀態(tài)時總線的動作與T3時相同。(5)T4狀態(tài)CPU對數(shù)據(jù)總線進(jìn)行采樣,讀出數(shù)據(jù)。CPU往存儲器或I/O設(shè)備讀數(shù)據(jù)的時序如下頁所示:CLKT1T2T3、TWT4
A19/S6-A16/S3A19-A16/BHE/S7/BHES7-S3ALEREADYAD15-AD0地址輸出數(shù)據(jù)輸入
CPU從存儲器或I/O端口讀取數(shù)據(jù)的時序
(5)T4狀態(tài)在T4狀態(tài),數(shù)據(jù)從數(shù)據(jù)總線上被撤除,各種控制信號和狀態(tài)信號進(jìn)入無效狀態(tài),CPU完成了對存儲器或I/O設(shè)備的寫操作。
3、總線空操作8086只有在CPU和存儲器或外設(shè)要傳送數(shù)據(jù)時,才能執(zhí)行上述的總線周期;當(dāng)指令隊列已滿,且EU未申請訪問存儲器時,不執(zhí)行總線周期,總線接口進(jìn)入了總線空閑周期。S6~S3同前一總線周期;若前一周期是讀周期,則AD15~AD0為高阻態(tài);總前一周期是寫周期,則AD15~AD0保持?jǐn)?shù)據(jù)有效。CLKT1T2T3、TWT4M//IOA19/S6-A16/S3A19-A16/BHE/S7/BHES7-S3ALEREADYAD15-AD0地址輸出數(shù)據(jù)輸出/WRDT//R/DENCPU往存儲器或I/O端口寫數(shù)據(jù)的時序4、中斷響應(yīng)周期中斷響應(yīng)周期:CPU中止現(xiàn)行程序轉(zhuǎn)中斷服務(wù)程序這一過程。中斷響應(yīng)周期要用兩個總線周期。第一個響應(yīng)周期:使AD15-AD0、/BHE/S7、A19/S6-A16/S3懸空。第二個響應(yīng)周期:外設(shè)向數(shù)據(jù)總線上輸送一個字節(jié)的中斷類型號。每一響應(yīng)周期的T1狀態(tài)輸出一個高電平脈沖,作為地址鎖存信號。CLKT1T2T3T4T1T2T3T4第一中斷響應(yīng)周期第二中斷響應(yīng)周期ALE/INTAAD7-AD08086中斷響應(yīng)周期的時序圖中斷類型號5、總線保持和響應(yīng)周期當(dāng)系統(tǒng)中CPU之外的另一個控制器要求使用總線時,向CPU發(fā)請求信號HOLD。在每個時鐘脈沖的上升沿,CPU檢測HOLD,如為高電平,并且允許讓出總線時,在總線周期的T4或空閑狀態(tài)Ti之后的下一個時鐘周期,CPU發(fā)出總線響應(yīng)信號HLDA,并且讓出總線,直到HOLD信號無效,CPU才收回總線控制權(quán)。6、系統(tǒng)復(fù)位產(chǎn)生:RESET端上的高電平維持4個時鐘周期,可使CPU復(fù)位。CPU復(fù)位:PSW、DS、ES、SS、IP等寄存器被清零,指令隊列被清空。CS寄存器設(shè)置為FFFFH。當(dāng)RESET由高電平變低電平7個機器周期后,CPU開始從FFFF0處執(zhí)行程序。注:由于復(fù)位后,IF=0,處關(guān)中斷狀態(tài),所以在初始化程序中應(yīng)開中斷,使CPU可響應(yīng)中斷請求。8086的復(fù)位時序:CLKRESET輸入RESET內(nèi)部三態(tài)門浮空CPU內(nèi)部用時鐘CLK來同步外部的復(fù)位信號8086CPU復(fù)位后總線信號:AD15-AD0:A19/S6-A16/S3:/BHE/S7:S2、S1、S0:/LOCK、/RD、/INTA:ALE、HLDA、QS0、QS1:/RQ//GT0:/RQ//GT1:高阻狀態(tài)低電平高電平第二部分8086指令系統(tǒng)指令系統(tǒng)是微處理器(CPU)所能執(zhí)行的指令的集合,它與微處理器有密切的聯(lián)系,不同的微處理器有不同的指令系統(tǒng)。本部分介紹8086/8088CPU的尋址方式以及各種指令系統(tǒng),并通過具體實例講述了各條指令的功能和使用方法。通過本部分的學(xué)習(xí),讀者應(yīng)該掌握以下內(nèi)容:
?4類操作數(shù)的尋址方式
?常用指令的格式、功能、以及對標(biāo)志位的影響§2.18086的尋址方式匯編指令的格式如下:形成有效操作數(shù)過程稱之為操作數(shù)的尋址。操作來源有四種:立即數(shù)、寄存器、存儲器、I/O端口。操作碼操作數(shù)一、立即尋址方式指令操作數(shù)部分直接給出指令的操作數(shù),操作數(shù)與操作碼一起存入代碼段中。立即數(shù)有8位和16位。例:MOVAL,05H;源操作數(shù)為立即尋址指令執(zhí)行后,AL=05H,8位數(shù)據(jù)05H存入AL寄存器。例:MOVAX,3064H;源操作數(shù)為立即尋址指令執(zhí)行后,AX=3064H,16位數(shù)據(jù)3064H存入AX寄存器。注意:①立即數(shù)只能作源操作數(shù),不能作目的操作數(shù)。②以A、B、C、D、E、F開頭的數(shù)字出現(xiàn)在指令中時,必須在前面加一個數(shù)字0。③立即數(shù)可以送到寄存器、存儲器中。例:下列指令是錯誤的。
MOV2000H,AXMOVAL,B5H
而指令MOV[2000H],1234H是對的。二、寄存器尋址方式
寄存器尋址方式的操作數(shù)是寄存器的值,指令中直接使用寄存器名,包括8位或16位通用寄存器和段寄存器。可使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP、CS、DS、ES、SS;其中AX、BX、CX、DX可各自分成兩個8位寄存器別使用。例:MOVAX,CX;(AX)←(CX)
MOVAL,1H;(AL)←
1注意:①CS不能作為目的操作數(shù),如MOVCS,AX是錯誤的指令。②源操作數(shù)必須與目的操作數(shù)相匹配。如
MOVAL,BX是錯誤的三、存儲器尋址方式偏移地址、有效地址與物理地址 在存儲器尋址方式中,操作數(shù)是某個內(nèi)存單元的 內(nèi)容(值),指令中給出的是內(nèi)存單元的偏移地 址(即有效地址EA)。段地址通常在隱含的某 個段寄存器中。存儲單位的實際地址即為物理地 址,它通常由段地址和有效地址組合而成由于內(nèi)存單元的地址的給出方式不同,存儲器尋址又可分為以下幾種尋址方式:直接尋址寄存器間接尋址寄存器相對尋址基址變址尋址相對基址變址尋址物理地址=段基址+EA1、直接尋址方式
形式:MOVAX,[nn]//直接地址
MOVAX,X//標(biāo)號地址
在直接尋址方式中,操作數(shù)的偏移地址(有效地址EA)直接用指令加以指定(有直接地址值和標(biāo)號兩種形式),它存放在代碼段中指定操作碼之后操作數(shù)一般存放在存儲器的數(shù)據(jù)段中,所以必須先求出操作數(shù)的物理地址,然后再訪問存儲器才能取得操作數(shù)。段地址隱含的由DS指定,也可以ES指定(需在指令中指明)。存儲器地址為:
DS:偏移地址或ES:偏移地址。例:MOVAX,[2000H]
將DS:2000H單元內(nèi)容送入AXMOVAL,[2000H]
將DS:2000H單元的內(nèi)容取一個字節(jié)送AL例:MOVAX,ES:[2000H]
將ES:2000H單元中的內(nèi)容送入AX
傳送原則:低地址的內(nèi)容(字節(jié))送寄存器的低位,高地址的內(nèi)容送寄存器的高位。段超越前綴:顯式給出段基址寄存器2、寄存器間接尋址寄存器間接尋址方式的操作數(shù)形式為:[reg]操作數(shù)的有效地址包含在基址寄存器BX,基址指針BP或一個變址寄存器(SI或DI)中。寄存器間接尋址要用方括號括起來(寄存器尋址區(qū)別)例:MOVAX,[BX];將由BX決定的存儲單元的內(nèi)容送到AX寄存器。0000000100020003BBAAAXAHALAABB寄存器間接尋址數(shù)據(jù)段0002BX操作數(shù)在存儲器中,指令中寄存器內(nèi)容作為操作數(shù)所在單元的有效地址。
(BX)(SI)(DI)(BP)有效地址=
默認(rèn)的段寄存器為DS默認(rèn)的段寄存器為SS物理地址計算方法:物理地址=(DS)*16+(BX)或(SI)或(DI)物理地址=(SS)*16+(BP)例:已知:(DS)=2100H,(DI)=2000H
指令:MOVAX,[DI];的執(zhí)行結(jié)果是?解:物理地址=(DS)*16+(DI)
=2100H*16+2000H=21000H+2000H=23000H
指令結(jié)果:將23000H單元內(nèi)容送AL中,將23001H單元內(nèi)容送AH中。例:MOVAX,DS:[BP]MOVBX,ES:[SI]這些是使用段超越前綴的3、寄存器相對尋址方式操作數(shù)在存儲器內(nèi),指令中寄存器內(nèi)容與指令指定的位移量(DISP)之和作為操作數(shù)所在單元的有效地址。
(BX)
offset8
(SI)
(DI)(BP)offset16有效地址=
段寄存器為DS段寄存器為SS+物理地址=(DS)*16+(BX)+offset8
(SI)、(DI)、offset16類同。物理地址=(SS)*16+(BP)+offset16例:
如果(DS)=3000H,(SI)=2000H,COUNT=3000H,則執(zhí)行指令MOVAX,CONUT[SI],求出此種尋址方式對應(yīng)的有效地址和物理地址。有效地址=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H上述指令也可表示為:MOVAX,[CONUT+SI]4、基址變址尋址方式:操作數(shù)在存儲器中,指令將基址寄存器(BX或BP)與變址寄存器(SI或DI)內(nèi)容之和作為操作數(shù)所在存儲單元的有效地址。
(BX)(SI)(BP)(DI)有效地址=+物理地址=(DS)*16+(BX)+(SI)或(DI)物理地址=(SS)*16+(BP)+(SI)或(DI)例:MOVAX,[BX+DI]或MOVAX,[BX][DI]
功能:將DS:(BX)+(DI)字存儲單元內(nèi)容送AX。例:MOVAX,[BP+SI]或MOVAX,[BP][SI]功能:將SS:(BP)+(SI)字存儲單元內(nèi)容送AX。
例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,則執(zhí)行指令MOVAL,[BX][DI]解:有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH
物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH執(zhí)行結(jié)果:將221FDH單元內(nèi)容送入寄存器AL中MOVAL,[BX+DI]等價5、相對基址變址尋址方式操作數(shù)在存儲器內(nèi),指令將基址寄存器(BX或BP)與變址寄存器(SI或DI)的內(nèi)容之和再加上位移量(8位或16位),得到操作數(shù)所在單元的有效地址。(BX)(SI)offset8
(BP)(DI)offset16物理地址=(DS)*16+(BX)+(SI/DI)+偏移量物理地址=(SS)*16+(BP)+(SI/DI)+偏移量有效地址=++例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,MK=0250H
指令:MOVAX,MK[BX][SI]
或MOVAX,MK[BX+SI]
或MOVAX,[MK+BX+SI]
解:有效地址:MK+(BX)+(SI)=0250H+2000H+0100H=3250H物理地址:(DS)*16+有效地址=30000H+3250H=33250H執(zhí)行結(jié)果:將33250H單元內(nèi)容送AL,33251H內(nèi)容送AH。
6、段超越當(dāng)操作數(shù)在內(nèi)存單元時,系統(tǒng)根據(jù)隱含約定,自動將寄存器DS或SS的值作為段地址。然而,當(dāng)操作數(shù)段地址不在隱含的段寄存器時,可以使用段超越前綴取代其隱含約定。
段超越前綴形式為:
段寄存器名:MEM說明:MEM可是具體的數(shù)、寄存器以及他們的組合形式,例如:MOVAX,ES:[BP];段地址在ESMOVAX,CS:[BX][SI];段地址在CS段地址的基本約定和允許超越的情況如表所示:存儲器存取方式約定段允許超越段偏移地址取指令堆棧操作源串目的串BP作基址通用數(shù)據(jù)讀寫CSSSDSESSSDS無無CS,ES,SS無CS,DS,ESCS,ES,SSIPSPSIDI有效地址EA有效地址EA7、對內(nèi)存尋址方式的注解(1)在匯編后,指令中的變量名由具體的偏移地址所取代。
(2)在寄存器相對尋址與相對基址變址方式中,位移量disp可以是符號常量或變量,匯編后為一個常數(shù),若是變量,則取其偏移地址。(3)在Microsoft宏匯編MASM(MicrosoftMacroAssembler)中,內(nèi)存操作數(shù)可以采用多種書寫形式:6[BX][SI]、[BX+6][SI]、[BX+SI+6],他們是等價的
(4)在[]中只能出現(xiàn)立即數(shù)和BX、BP、SI、DI,且BX和BP、SI和DI不能成對出現(xiàn)在[]中。如:[BX+BP]、[SI+DI]是非法的指令形式(5)計算出的有效地址以16位表示,若超過0FFFFH,CPU將忽略所有溢出。(6)記憶8086內(nèi)存操作數(shù)形式的簡易方法如下:
[BX][SI]disp[BP][DI]四、端口尋址方式操作數(shù)在端口寄存器中,指令中給出了端口的地址。根據(jù)端口地址的不同,有兩種尋址方式:1、端口直接尋址:用8位的立即數(shù)端口地址范圍:00H~FFH
如:INAL,80H;//輸入8位數(shù)據(jù)
INAX,80H;//輸入16位數(shù)據(jù)
OUT81H,AL//輸出8位數(shù)據(jù)2、端口間接尋址,用16位的寄存器DX指定端口為地址范圍:0000H~FFFFH
如:MOVDX,218HINAL,DX源操作數(shù)的尋址方式例源操作數(shù)的允許形式
直接操作數(shù)(立即數(shù))MOVAX,20H指令中的直接常數(shù)間接操作數(shù)
寄存器操作數(shù)MOVAX,BX通用寄存器或段寄存器存儲器操作數(shù)直接尋址MOVAX,DS:[20]MOVAX,B(字)“段:[常數(shù)]”或“段:常數(shù)”“[變量]”或“變量”間接尋址寄存器間接尋址MOVAX,[BX][BX,BP,SI,DI之一]寄存器相對尋址MOVAX,[BX+20]MOVAX,[BX+B(字)][BX,BP,SI,DI之一+位移量]基址變址尋址MOVAX,[BX+SI][BX,BP之一+SI,DI之一]相對基址變址尋址MOVAX,[BX+SI+20]MOVAX,[BX+SI+B][BX,BP之一+SI,DI之一+位移量]端口操作數(shù)
直接尋址INAL,20H指令中有端口號(0~0FFH)
間接尋址INAL,DXDX中有端口號(0~0FFFFH)操作數(shù)的尋址方式例:已知:DS=1000H,BX=0200H,SI=02H,內(nèi)存10200H~10205H單元的內(nèi)容分別是10H,2AH,3CH,46H,59H,6BH。下列指令執(zhí)行完成后,AX寄存器里面的內(nèi)容各是什么?MOVAX,0200HMOVAX,[200H]MOVAX,BXMOVAX,[BX]MOVAX,3[BX]MOVAX,[BX+SI]MOVAX,2[BX+SI]第二部分8080指令系統(tǒng)§2.28086/8088的指令系統(tǒng)8086/8088的指令系統(tǒng)可以分為6組:(1)數(shù)據(jù)傳送指令(2)算術(shù)運算指令(3)邏輯指令與移位指令(4)串操作指令(5)控制轉(zhuǎn)移指令(6)處理機控制指令
一、數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是最簡單、最常用的一類指令,它是負(fù)責(zé)把數(shù)據(jù)、地址、或立即數(shù)傳送到寄存器或存儲單元中
。這類指令又可分為以下幾種情況:通用傳送指令:MOV、PUSH/POP、XCHG、XLAT輸入輸出指令:IN、OUT地址目標(biāo)傳送指令:LEA、LDS、LES標(biāo)志傳送指令:LAHF、SAHF、PUSHF、POPF1、通用傳送指令(1)MOV(Move):傳送指令指令格式:
MOVdest,src;dest←src功能:將源操作數(shù)src復(fù)制到目的操作數(shù)dest中,源操作數(shù)src的內(nèi)容不變。對標(biāo)志位的影響:無語法格式:
MOVreg/mem/seg,reg/mem/seg/imm MOV指令的操作數(shù)及傳送方向見下頁立即數(shù)IMM存儲器MEM通用寄存器REGDS、ES、SSCS(SEG)說明:①雙操作數(shù)指令不允許兩個操作數(shù)同時為段寄存器或存儲器操作數(shù)
MOVseg,seg;錯誤
MOVmem,mem;錯誤
②立即數(shù)不能傳送到段寄存器中
MOVseg,imm ;錯誤
③立即數(shù)不能作為目的操作數(shù)
MOVimm ,
reg;錯誤④目的操作數(shù)不允許使用CS、IP寄存器
MOVCS,AX;錯誤⑤dest與src必須類型匹配,即同時是字節(jié)或字類型。
MOVAX,BX寄存器具有明確的類型,例如,AL、AX分別為字節(jié)、字類型。立即數(shù)沒有明確的類型,MASM(宏匯編語言)負(fù)責(zé)將立即數(shù)擴展為與目的操作數(shù)位數(shù)相同。
MOVAL,34HMOVBX,56H有時MASM不能確定內(nèi)存操作數(shù)的類型,需要用byteptr和wordptr明確指出是字節(jié)或字類型。只要其中一個操作數(shù)的類型確定即可。
MOV[2000H],ALMOV[2000H],BYTEPTR34H例:錯誤的MOV指令如下所示:MOVAX,BL;類型不匹配MOVDS,1000H;不允許立即數(shù)送段寄存器MOV[BX],[SI];不允許內(nèi)存操作數(shù)之間傳送MOVES,CS;不允許段寄存器之間傳送MOVCS,AX;CS不能作為目的操作數(shù)(2)XCHG(Exchange):交換指令指令格式:XCHG目的,源;功能:交換源操作數(shù)與目的操作數(shù)相交換注意:
允許Reg←→Reg,Reg←→Mem(段寄存器除外)不允許Mem←→Mem例:設(shè)AX=2000H,DS=3000H,BX=1800H,(31A00H)=1995H,執(zhí)行下面指令的結(jié)果是?
XCHGAX,[BX+200H]解:源操作數(shù)物理地址為:DS×16+BX+200H=31A00H
那么執(zhí)行執(zhí)行之后:AX=1995H, 而(31A00H)=2000H(3)PUSH:入堆操作指令格式:PUSHREG/MEM/SEG功能:將源操作數(shù)推入堆棧執(zhí)行過程:先移后入(SP)←(SP)-2,((SS)+(BP))←(SRC)
(4)POP:出棧操作
POPREG/MEM/SEG先出后移。但CS不能作為目的操作數(shù)。2、輸入輸出指令
輸入輸出指令是用來實現(xiàn)I/O端口與AX之間的數(shù)據(jù)傳送。根據(jù)端口地址的不同,又分為端口直接尋址和端口間接尋址兩種。(1)IN(INPUT)格式:INAL,(PORT);8位地址、8位數(shù)據(jù)
INAX,(PORT);8位地址、16位數(shù)據(jù)或:INAL,DX;//端口地址放在DX寄存器中
INAX,DX;(2)OUT(OUTPUT)格式:OUTDX,AL;其余類同。3、地址目標(biāo)傳送指令:專用于傳送地址碼。(1)LEA:取有效地址格式:LEAREG,MEM功能:取源操作數(shù)地址的偏移量,并把它傳送到目的操作數(shù)所在的單元。要求:源操作數(shù)必須是一個存儲器操作數(shù),目標(biāo)操作數(shù)必須是一個除段寄存器以外的16位寄存器,通常是變址寄存器SI等。LEA指令與MOV指令的區(qū)別:MOV一般傳送的是源操作中的內(nèi)容而不是地址。BUFF=0123454800FEFFLEASI,BUFF;執(zhí)行后:(SI)=0002HMOVSI,BUFF;執(zhí)行后:(SI)=0048H段起始地址012013201432015432014800FEFF543201(2)
LDS:將雙字指針?biāo)偷郊拇嫫骱虳S指令(LoadPointerusingDS)格式:LDSreg16,mem32
功能:從源操作數(shù)指定的存儲單元中,取出一個變量的4個字節(jié)地址指針,前兩個字節(jié)(表示變量偏移量)送入指定寄存器,后兩個字節(jié)(表示變量段地址)送DS寄存器。(3)LES:將雙字指針?biāo)偷郊拇嫫骱虴S指令(LoadPointerusingES)格式:LESreg16,mem32
;功能:功能與LDS類似,只不過后兩個字節(jié)送ES寄存器。4.標(biāo)志傳送(位操作)指令
LAHFSAHFPUSHFPOPF隱含操作數(shù)AH隱含操作數(shù)FLAGS(1)LAHF(LoadAHFromFlags)功能:將FLAGS的低8位裝入AH格式:LAHFSFPFAFZFCF….AHFLAGSD15D0D7D0(2)SAHF(StoreAHintoFlags)功能:執(zhí)行與LAHF相反的操作,把AH的內(nèi)容存入標(biāo)志寄存器。指令格式:SAHFD0SFPFAFZFCF….AHFLAGSD15D7D0(3)PUSHF(PUSHFlagsontoStack)功能:將標(biāo)志寄存器的內(nèi)容進(jìn)棧,同時修改SP:SP←Sp-2。指令格式:PUSHF(4)POPF功能:把當(dāng)前SP所指的字送到標(biāo)志寄存器PSW,并修改SP的值:SP←Sp+2
。指令格式:POPF標(biāo)志傳送指令說明:LAHF/SAHF指令是寄存器AH與標(biāo)志寄存器PSW的低字節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。
PUSHF/POPF指令是標(biāo)志寄存器PSW與堆棧間進(jìn)行的字型數(shù)據(jù)傳送。指令SAHF/POPF將影響標(biāo)志位。所有的數(shù)據(jù)傳送類指令僅此兩條指令影響標(biāo)志位。成對的使用PUSHF和POPF,可以對標(biāo)志位寄存器進(jìn)行保存和恢復(fù),常常用在過程調(diào)用和終端服務(wù)程序的開頭與結(jié)尾處。二、算術(shù)運算指令運算的數(shù)據(jù)類型:有符號二進(jìn)制數(shù)、無符號二進(jìn)制數(shù)、無符號壓縮BCD碼、無符號非壓縮BCD碼。除CBW、CWD外,所有指令均影響標(biāo)志位。指令類型:加法:ADD、ADC、INC減法:SUB、SBB、DEC、NEG、CMP乘法:MUL、IMUL除法:DIV、IDIV符號擴展:CBW、CWD十進(jìn)制調(diào)整:DAA、DAS、AAA、AAS、AAM、AAD1、加法指令加法:ADDDST,SRC; (DST)←(SRC)+(DST)帶進(jìn)位加法:ADCDST,SRC;
(DST)←(SRC)+(DST)+CF加1:INCDST;(DST)←(DST)+1說明:①這在三條指令運算結(jié)果將影響狀態(tài)標(biāo)志位,但是INC指令不影響標(biāo)志CF(Carryflag進(jìn)位標(biāo)志)。②SRC可為IMM、MEM、REG,而DST只能為REG、MEM類型。③加法指令也有數(shù)據(jù)傳送的功能,所以前面數(shù)據(jù)傳送指令的限制同樣有效。如不能同時為存儲器操作數(shù)④對INC指令,DST既是源操作數(shù),又是目的操作數(shù),因此DST只能是REG或MEM,為MEM操作數(shù)時,必須指明數(shù)據(jù)類型,否則出錯。
如:INC[SI];錯誤應(yīng)為:INCWORDPTR[SI];字內(nèi)容加1INCBYTEPTR[SI];字節(jié)內(nèi)容加1
例:ADDAL,18H;//AL←AL+18HADCBL,AL;//AL←AL+BL+CFADCAX,DX;//AX←AX+DX+CFADDAL,CONST[BX];//AL←MEM(DS:CONST[BS])+ALADDCONST[BX],AL;//MEM(DS:CONST[BS])←MEM(DS:CONST[BS])+AL2、減法指令指令格式:減法SUBDST,SRC;(DST)←(DST)-(SRC)帶借位減法SBBDST,SRC;(DST)←(DST)-(SRC)-CF減1DECOPR;(OPR)←(OPR)-1取負(fù)NEGOPR;(OPR)←
0H-(OPR)比較CMPOPR1,OPR2;(OPR1)-(OPR2),結(jié)果反映到標(biāo)志位上(ZF)
以上五條指令均可作字或字節(jié)運算,而且除DEC不影響CF外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位。說明:減法指令的語法規(guī)范同加法指令一致比較指令除了不回送結(jié)果外,其他一切均同SUB指令,該指令主要用來判斷兩數(shù)的大小與是否相等。比較指令后面常常是條件轉(zhuǎn)移指令,根據(jù)比較的結(jié)果實現(xiàn)程序的轉(zhuǎn)移。SBB指令常用在多字節(jié)的減法運算。
例:AX=98H,BX=0AH,DX=2000H,下面執(zhí)行執(zhí)行的結(jié)果是什么?SUBAX,BXSUBDX,1850H解:AX=98H-0AH=8EHDX=2000H-1850H=07B0H3、乘法指令指令格式:無符號數(shù)乘法MULSRC
;(AX)←(AL)*(SRC)字節(jié)乘法(DX,AX)←(AX)*(SRC)字乘法帶符號數(shù)乘法IMULSRC;操作同上進(jìn)行字節(jié)運算時,目的操作數(shù)必須是累加器AL,乘積在寄存器AX中;進(jìn)行字運算時,目的操作數(shù)必須是累加器AX,乘積在寄存器DX,AX中。源操作數(shù)不允許使用立即數(shù)。對于存儲器數(shù),必須在前面加B或者W指出是字節(jié)和是字。乘法指令運算結(jié)果只影響狀態(tài)標(biāo)志CF、OF例:編程求Y=5*X,假定X為字節(jié)數(shù)。
MOVAL,XMOVBL,5MULBL思考:MovAL,X MUL5這樣可行嗎?解:不可行,因為MUL指令中,要求源操作數(shù)必須是寄存器或者是存儲器操作數(shù)。
4、除法指令指令格式:無符號數(shù)除法DIVSRC;如果SRC為字節(jié)(AL)←(AX)/(SRC)除法的商(AH)←(AX)/(SRC)除法余數(shù)如果SRC為字(AX)←(DX,AX)/(SRC)除法的商(DX)←(DX,AX)/(SRC)除法余數(shù)帶符號數(shù)除法IDIVSRC;操作同上。除法運算的說明當(dāng)除數(shù)是字節(jié)數(shù)據(jù)時,被除數(shù)必須放在AX中;當(dāng)除數(shù)是字?jǐn)?shù)據(jù)時,被除數(shù)必須放在DX,AX中。如果被除數(shù)是8位,必須放在AL中,并且AH清零除法指令運算結(jié)果對狀態(tài)標(biāo)志無定義。8086/8088規(guī)定IDIV指令運算結(jié)果余數(shù)的符號與被除數(shù)相同。例:求7A86H÷04H=?MOVAX,7A86HMOVBL,04HDIVBL
關(guān)于符號擴展指令:字節(jié)擴展到字CBW;將寄存器AL中的符號位擴展到寄存器AH字?jǐn)U展到雙字CWD;將寄存器AX中的符號位擴展到寄存器DX指令功能:
①如果(AL)<80H,則(AH)=00H(正數(shù))否則(AH)=0FFH(負(fù)數(shù))②如果(AX)<8000H,則DX=0000H(正數(shù))否則(DX)=0FFFFH(負(fù)數(shù))70AL70AH015AXDX150CBWCWD例:求-4001H÷4=?MOVAX,-4001HCWDMOVCX,4IDIVCX說明:此題不能用16位除8位的方式,因為其商超過了256。
5、非壓縮BCD碼十進(jìn)制調(diào)整指令指令格式:加法十進(jìn)制調(diào)整AAA;減法十進(jìn)制調(diào)整AAS;乘法十進(jìn)制調(diào)整AAM;除法十進(jìn)制調(diào)整AAD;AAA指令將AL的內(nèi)容變換成一位非壓縮的十進(jìn)制數(shù)。AAA檢查AL低四位,如低四位是0--9的數(shù)字,AAA就清除AL的高四位,以及AF和CF標(biāo)志;如AL低四位表示的數(shù)大于9或AF=1,AAA執(zhí)行:加6到AL寄存器;加1到AH寄存器;置AF=1,CF=1;清除AL高四位為0例:求BCD7+BCD8=?MOVAL,07H;AL=00000111MOVBL,08H;BL=00001000ADDAL,BL;AL=00001111(低四位超過了9,因此要調(diào)整)AAA;結(jié)果AL=05H,AH=01H,CF=AF=1。其他調(diào)整指令不作介紹調(diào)整過程AL=00001111判斷:1111>1001加6:AL=AL+6=00010101清AL高四位:AL^00001111=0000101AF置1,CF置1,并且使得AH=1最后的結(jié)果為15H,即為000101016、壓縮BCD碼十進(jìn)制調(diào)整指令6.1加法十進(jìn)制調(diào)整DAA;執(zhí)行的操作:這條指令執(zhí)行前必須先執(zhí)行ADD或ADC指令,加法指令必須把兩個壓縮的BCD碼相加,并把結(jié)果存放在AL寄存器中,才能進(jìn)行調(diào)整。功能:把兩個壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的BCD碼6.2減法十進(jìn)制調(diào)整DAS;執(zhí)行的操作:這條指令執(zhí)行之前,必須先執(zhí)行SUB或SBB指令,減法指令必須把兩個BCD碼相減,并把結(jié)果存放在AL寄存器中。調(diào)整的方法:累加器AL低4位大于9或輔助進(jìn)位標(biāo)志位AF=1,則累加器AL加06H修正。累加器AL高4位大于9或輔助進(jìn)位標(biāo)志位AF=1,則累加器AL加60H修正。累加器AL高4位大于等于9,低4位大于9,則累加器AL進(jìn)行加66H修正。例:進(jìn)行BCD碼加法運算59+68=1270101100159+011010006811000001C1+0110011066
100100111127加法運算結(jié)果為C1,AF=1,高位大于9加66H進(jìn)行壓縮BCD調(diào)整說明:壓縮BCD碼加法或減法十進(jìn)制調(diào)整指令必須在ADD(ADC)或SUB(SBB)指令之后,調(diào)整結(jié)果對標(biāo)志OF無影響,對其它狀態(tài)標(biāo)志位均有影響。減法十進(jìn)制調(diào)整方法與加法十進(jìn)制調(diào)整方法類同,只是將加6變?yōu)闇p6操作。上述加法及調(diào)整的指令如下:
MOVAL,59HADDAL,68HDAA練習(xí):求83-38=?(用BCD碼實現(xiàn))三、邏輯運算與移位指令1、邏輯運算指令:對字節(jié)或字?jǐn)?shù)據(jù)進(jìn)行按位的操作。格式:邏輯與ANDDST,SRC;
(DST)←(DST)AND(SRC)邏輯或ORDST,SRC;
(DST)←(DST)OR(SRC)邏輯非NOTOPR;
(OPR)←(OPR)異或XORDST,SRC;
(DST)←(DST)XOR(SRC)測試TESTOPR1,OPR2;(OPR1)AND(OPR2)AND、OR、XOR、TEST都是按位進(jìn)行運算的NOT也是按位取反,但是不影響標(biāo)志位。AND指令主要用于使操作數(shù)的某些位保留(和1相與)、某些位清0(和0相與)。 例:ANDAL,0FH;屏蔽高4位,保留低4位。OR用法:
a用于使操作數(shù)的某些位保留(和0相或),使某些位置1(和1相或)。
b用于分離符號標(biāo)志,進(jìn)行判斷、轉(zhuǎn)移。影響ZF、SF和PF,CF=OF=0。例:ORBX,0C000H(1100000000000000)將BX的兩位最高的有效位(15和14位)置成1,而其它位不變。XOR用法:用于使操作數(shù)的某些位保留(與0異或),某些位取反(和1異或)。例:將AL的高4位保留,低4位取反:
XORAL,0FH(00001111)例:將AX中的內(nèi)容清0:
XORAX,AX(bxorb=0)NOT指令改變寄存器或存儲單元的每一位狀態(tài),原來為0變?yōu)?,原為1變?yōu)?。例:MOVAX,45H;NOTAX;AX=0BAHTEST指令是一條測試指令,它執(zhí)行的操作與AND相同,不過它不送回結(jié)果,只影響標(biāo)志位。例:TESTAL,00000001B;如AL最低位為0,則ZF=1。例:測試AL的0、3、5位,若有一位為1,則轉(zhuǎn)出錯處理。
TESTAL,00101001BJNZERROR;ZF=0,轉(zhuǎn)出錯ERROR。2、移位指令邏輯左移SHLOPR,CNL算術(shù)左移SALOPR,CNL邏輯右移SHROPR,CNL算術(shù)右移SAROPR,CNL其中:OPR為操作數(shù),CNL為1或CL表示移位次數(shù)0CFOPR0CFOPRCFOPR例:設(shè)AL=10110100,CF=1在SHLAL,1之后,AL=01101000CF=1在SALAL,1之后,AL=01101000CF=1在SHRAL,1之后,AL=01011010CF=0在SARAL,1之后,AL=11011010CF=0
算術(shù)左移(SAL)和算術(shù)右移(SAR)實現(xiàn)帶符號數(shù)移位。SAR通過在整個移位過程中復(fù)制符號來保護(hù)操作數(shù)的符號。SAL不保護(hù)進(jìn)位,但如果符號位發(fā)生變化的話,就將1送OF標(biāo)志。在多次移位的情況下,OF的值不確定。邏輯左移(SHL)和邏輯右移(SHR)對無符號數(shù)的移位。SHL將操作數(shù)左移,空出來的第0位置0;SHR將操作數(shù)右移,空出來的高位(字節(jié)時第7位,字時第15位)置0。例:用左移的方法實現(xiàn)Y=5*XMOVAL,XMOVCL,2SHLAL,CL;AL=4XADDAL,X例:用右移方法作除法-128/8=-16MOVAL,-128MOVCL,03HSARAL,CL執(zhí)行后,AL=0F0H=-163、循環(huán)移位指令循環(huán)左移ROLOPR,CNT循環(huán)右移ROROPR,CNT帶進(jìn)位循環(huán)左移RCLOPR,CNT帶進(jìn)位循環(huán)右移RCROPR,CNTOPR操作數(shù),CNT移動的位數(shù)CFOPRCFOPRCFOPRCFOPR例:設(shè)AL=10110100B,CF=1執(zhí)行下列語句:執(zhí)行ROLAL,1后,AL=01101001,CF=1執(zhí)行RORAL,1后,AL=01011010,CF=0執(zhí)行RCLAL,1后,AL=01101001,CF=1執(zhí)行RCRAL,1后,AL=11011010,CF=0課堂練習(xí):將AL寄存器的高4位與低4位交換解:可采用循環(huán)左移4位或者循環(huán)右移4位ROLAL,04HRORAL,04H思考:可不可以用帶進(jìn)位的循環(huán)移位?四、串操作指令串操作:對存儲區(qū)中連續(xù)存放的字節(jié)或一串字進(jìn)行操作。串操作指令的對象是內(nèi)存中地址連續(xù)的字節(jié)或字串,在每次操作執(zhí)行后,能自動修改地址,為下次操作作準(zhǔn)備。如用重復(fù)前綴,則可一直執(zhí)行直到預(yù)定的次數(shù)。串操作指令共有5條:MOVS:字符串的傳送Mov目的串,源串LODS:數(shù)據(jù)串裝入LODS源串STOS:數(shù)據(jù)串的存儲STOS目的串CMPS:字符串的比較COPS目的串,源串SCAS:字符串的掃描SCAS目的串不做詳細(xì)介紹(1)特點:①源操作數(shù)由SI間址,在當(dāng)前數(shù)據(jù)段DS中;目的操作數(shù)由DI間址,在附加數(shù)據(jù)段ES中,且不允許段超越。②每次操作后,SI、DI的內(nèi)容自動修改。方向標(biāo)志位DF=0:SI、DI自動加1(或2);DF=1:SI、DI自動減1(或2)。③要處理的串長度存放在CX寄存器中,有的操作可使用重復(fù)前綴。而有的操作則不能使用(如LODS)。(2)重復(fù)的方式:
REP無條件重復(fù)
REPE/REPZ 相等/結(jié)果為0則重復(fù)
REPNE/REPNZ不相等/結(jié)果不為0則重復(fù)與REP前綴相配合工作的指令MOVS、LODS和STOS指令,直到(CX)=0為止。執(zhí)行過程:①如(CX)=0則退出REP,否則繼續(xù)執(zhí)行;②(CX)←(CX)-1;③執(zhí)行其后的串指令;④重復(fù)①~③。1、MOVS(串傳送)指令格式:[REP]MOVSB/MOVSW指令功能:DS:[SI]→ES:[DI]例;將數(shù)據(jù)段首地址為BUF1的200個字節(jié)傳送到附加段首址為BUF2的內(nèi)存區(qū)中,使用如下指令:
MOVAX,SEGBUF1MOVDS,AXMOVBX,SEGBUF2MOVES,BXLEASI,BUF1LEADI,BUF2MOVCX,200CLDLOP:MOVSBREPMOVSBLOOPLOPHLT若不用串操作指令,可用一般指令編制如下:
LEASI,BUF1LEADI,BUF2MOVCX,200LOP:MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCXJNZLOPHLT由此可看出,串操作指令是程序設(shè)計的高級技術(shù)。2、LODS(串裝入)指令格式:LODSB/LODSW指令功能:將DS:[SI]所指單元的內(nèi)容裝入AL或AX中。一般不用REP。無意義。3、STOS(串送存)指令格式:[REP]STOSB/STOSW指令功能:將AL或AX中的內(nèi)容送入ES:[DI]所指單元中。如用REP,則表示每個單元的內(nèi)容完全相同。例:將內(nèi)存中以BUF為首址的100個字節(jié)單元的內(nèi)容清0MOVAX,SEGBUFMOVES,AXLEADI,BUFXORAX,AXMOV
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年蛋白粉行業(yè)運行策略探討及未來消費趨勢規(guī)模研究研究報告
- 2024-2030年熒光屏掃描儀行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024-2030年自動電動機起動器行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024-2030年綠色環(huán)保建筑設(shè)計行業(yè)發(fā)展分析及投資戰(zhàn)略研究報告
- 2024-2030年紙制品行業(yè)發(fā)展分析及競爭格局與投資戰(zhàn)略研究咨詢報告
- 2024-2030年粗糧餅干行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024-2030年第三方檢測服務(wù)行業(yè)市場發(fā)展分析及發(fā)展前景與投資研究報告
- 互聯(lián)網(wǎng)合作協(xié)議條款
- 個人借款協(xié)議書
- 企業(yè)產(chǎn)品責(zé)任賠償協(xié)議書
- ESD技術(shù)要求和測試方法
- 傳感器原理溫度傳感器資料課件
- 種植支抗釘?shù)淖o(hù)理配合
- 輸液港相關(guān)護(hù)理課件
- 藝人分析報告
- 精神病監(jiān)護(hù)人責(zé)任承諾書范本
- 煤礦安全檢查工課件
- 開展買方信貸可行性報告
- 營養(yǎng)師培訓(xùn)飲食健康與飲食指導(dǎo)
- 海洋石油平臺結(jié)構(gòu)完整性分析
- 《平衡針灸》課件
評論
0/150
提交評論