




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