2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩198頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 8086微處理器的指令系統(tǒng),3-1 尋址方式3-2 指令系統(tǒng),3-18086/8088的尋址方式,1、指令系統(tǒng)概念和指令組成 (1)、指令系統(tǒng)概念 計算機(jī)通過執(zhí)行指令序列來解決問題, 每種計算機(jī)都有一組指令集提供用戶使用, 這組指令集就稱為計算機(jī)的指令系統(tǒng)。(2)、指令組成 計算機(jī)中指令由操作碼字段和操作數(shù)字段兩部分組成。一條可以由1~7個字節(jié)組成。 操作

2、碼字段-----―指示計算機(jī)要執(zhí)行的操作, 操作數(shù)字段-----―指出在指令執(zhí)行操作過程中所需要的操作數(shù); 可以是操作數(shù)本身; 可以是操作數(shù)地址或是地址的一部分; 可以是指向操作數(shù)地址的指針或其他有關(guān) 操作數(shù)的信息。,(3)、操作數(shù)的存放操作數(shù)的存放不外乎三種情況:操作數(shù)包含在指令中 即指令的操作數(shù)字段包含操作數(shù)本身。這種操作數(shù)為立即數(shù)。例:MOV AL

3、 , 08H操作數(shù)包含在CPU的一個內(nèi)部寄存器中例:INC CX指令中的操作數(shù)字段是CPU內(nèi)部寄存器的一個編碼。這種尋址方式稱為寄存器尋址。,操作數(shù)在內(nèi)存數(shù)據(jù)區(qū) 操作數(shù)在內(nèi)存數(shù)據(jù)區(qū),操作數(shù)字段包含著此操作數(shù)地址。 在8086中,任何內(nèi)存地址是由兩部分組成: 段的基地址:單元所在段的基地址(大部分情況是數(shù)據(jù)段寄存器DS中); 段內(nèi)偏移量:此單元與段基地址的距離。 有效

4、地址EA(Effective Address) : 段內(nèi)偏移量為適應(yīng)各種數(shù)據(jù)結(jié)構(gòu)的需要,可以有幾個部分組成,所以也把它稱為有效地址EA。,尋址方式不同EA的構(gòu)成不同。歸納EA可有多種情況構(gòu)成: 直接尋址,寄存器間接尋址,寄存器相對尋址, 基址加變址尋址,相對基址加變址尋址。 尋址方式——如何尋找操作數(shù)。不同尋址方式實質(zhì)上是構(gòu)成它段內(nèi)的偏移量的方法不同。,1、8086、8088尋址方式(一)立即尋址

5、 (Immediate addressing)(二)寄存器尋址方式 (Register addressing)(三)直接尋址 (Direct addressing)(四)寄存器間接尋址方式(Register indirect addressing)(五)寄存器相對尋址方式(Register relative addressing)

6、 或變址尋址(Index Addressing)(六)基址加變址尋址方式(Based indexed addressing)(七)相對基址加變址尋址方式(Relative based indexed addressing),(一)立即尋址(Immediate addressing) 操作數(shù)直接存放在指令中,緊跟在操作碼之后,作為指令 的一部分,存放在代碼段里,這種操作數(shù)稱為立即數(shù)。 立即數(shù)可

7、以是8位或16位的。,例: MOV AL,05H 指令執(zhí)行后: (AL)=05H,(二)、寄存器尋址方式 (Register addressing)操作數(shù)在寄存器中,指令指定寄存器號。 這種尋址方式因為操作數(shù)在寄存器中,不需要訪問存儲 器,運(yùn)算速度較高。,例:指令執(zhí)行前: (AX)=3064H (SS)=1234H MOV SS,AX指令執(zhí)行后:(SS)=30

8、64H (AX)保持不變,指令執(zhí)行前:,指令執(zhí)行后:,(三)直接尋址(Direct addressing) 操作數(shù)地址的16位偏移量,直接包含在指令中, 存放在代碼段中指令操作碼之后, 但操作數(shù)一般存放在數(shù)據(jù)段中, 必須先求出操作數(shù)的物理地址, 然后再訪問存儲器才能取得操作數(shù)。 或(10H)物理地址 : PA=16d×(DS)+EAIBMPC機(jī)允許數(shù)據(jù)存放在數(shù)據(jù)段以外

9、的其它段中。此時應(yīng)在指令中指定段跨越(可以是CS,SS,ES)。,,,例:MOV AX,[3100H](DS)=6000H , (63100H)=3050H 則:(AX)=3050H,直接尋址方式,(四)寄存器間接尋址方式(Register indirect addressing) 操

10、作數(shù)在存儲器中,操作數(shù)地址的16位偏移量包含在:BP、BX、SI、DI寄存器中。 1、若選擇SI、DI、BX作為間接尋址操作數(shù)一般在現(xiàn)行數(shù)據(jù)段區(qū)域中,用(DS)作為段地址。即操作數(shù)物理地址為: 物理地址PA=16 d ×(DS)+(BX) 物理地址PA=16 d × (DS)+(SI) 物理地址PA=16 d × (DS)+(DI),例:MOV B

11、X,[DI] (DS)=6000H (DI)=2000H PA=62000H (62000H)=50A0H (BX)=50A0H,寄存器間接尋址方式 MOV BX,[DI],2 、若選擇BP寄存器作為間接尋址 操作數(shù)在堆棧段區(qū)域中,用SS寄存器的內(nèi)容作為段地址。 操作數(shù)物理地址: PA=16d × (SS)+(BP)例: MO

12、V [BP], AX執(zhí)行前: (SS)=1000H , (BP)=3000H , (AX)=1234H執(zhí)行后:PA=13000H (13000H)=1234H,寄存器間接尋址方式 MOV [BP], AX,(五)寄存器相對尋址方式(Register relative addressing) 或變址尋址 (Index Addressing) 操作數(shù)的有效地址是

13、一個基址或變址寄存器的內(nèi)容 與指令中指定的8位或16位位移量(displacement)之和。,8086/8088 CPU 中有兩個變址寄存器 : 源變址寄存器 SI ; 目的變址寄存器 DI 。 操作數(shù)一般在內(nèi)存的數(shù)據(jù)段中,但允許段跨越。除有段跨越前綴之外,形成物理地址有二種方式:,例: MOV AX, COUNT [BP]或MOV AX, [COUNT+BP]或MOV

14、 AX, COUNT+[BP] COUNT為16位位移量。指令執(zhí)行前: (SS)=5000H, (BP)=3000H,COUNT=2040H,(AX)=1234H指令執(zhí)行后:EA=5040HPA=55040H(55040H)=5548H(AX)=5548H,寄存器相對尋址方式MOV AX,COUNT[BP],(六) 基址加變址尋址方式 (Based ind

15、exed addressing) 操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容之和,基址寄存器名和變址寄存器名均有指令指定。,除有段跨越前綴之外,形成物理地址有二種方式:,例: MOV AX, [BX][SI]或 MOV AX, [BX+SI]執(zhí)行指令前: (DS)=3200H, (BX)=0456H, (SI) =1094H (334EAH)=4567H執(zhí)行指令后:

16、 EA=14EAH PA=334EAH (AX)=4567H,基址加變址尋址方式 MOV AX,[BX+SI],(七)相對基址加變址尋址方式(Relative based indexed addressing)操作數(shù)有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容和8位或16位位移量之和 。,除有段跨越前綴之外,形成物理地址有二種方式:,例:MOV AX, MASK[BX][DI]MOV AX,

17、MASK [BX+DI]MOV AX,[MASX+BX+DI]執(zhí)行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H執(zhí)行指令后:EA=2A7AHPA=32A7AH(AX)=4050H,相對基址加變址MOV AX, MASK+[BX+DI],段內(nèi)轉(zhuǎn)移只需改變 (IP)段內(nèi)轉(zhuǎn)移包括兩種尋址方式:直接 ,間接。段間轉(zhuǎn)移改變(CS)(IP)

18、段間轉(zhuǎn)移包括兩種尋址方式: 直接 ,間接。功能:用來確定轉(zhuǎn)移指令及CALL指令的轉(zhuǎn)移地址。以轉(zhuǎn)移指令為對象來分析各種轉(zhuǎn)移地址尋址方式。,三、與轉(zhuǎn)移地址有關(guān)的尋址方式,(一)段內(nèi)直接尋址(Intrasegment direct addressing),轉(zhuǎn)向有效地址EA是(IP)當(dāng)前和指令中指定的8位或16位位移量之和。 位移量:位移量=轉(zhuǎn)向有效地址-(IP)當(dāng)前值之差。 對于近轉(zhuǎn),16位位移量可正可負(fù),一般范圍是-

19、32768~+32767 對于短轉(zhuǎn),8位位移量可正可負(fù), 范圍是 -128~+127,這種尋址方式適用于條件轉(zhuǎn)移及無條轉(zhuǎn)移指令。 當(dāng)用于條件轉(zhuǎn)移指令時,位移量只允許 8 位; 用于無條件轉(zhuǎn)移指令時,位移量 8 位時稱為 短跳轉(zhuǎn)。,指令匯編語言格式: JMP NEAR PTR PROGIA;(IP)←(IP)當(dāng)前+16位位移量 JMP SHORT QUEST;

20、 (IP)←(IP)當(dāng)前+8位位移量調(diào)用指令(CALL)也適用。 PROGIA均為轉(zhuǎn)向符號地址,機(jī)器中用 位移量表示。 QUEST匯編指令中16位位移量,則在符號地址前加操作符 NEAR PTR。 8位位移量 :前引用標(biāo)號(標(biāo)號后定義 ),則在符號地址前加操作符SHORT。 后引用標(biāo)號(標(biāo)號先定義 ),則在符號地址前不必加操作符 SHORT。,JMP NEAR PTR P

21、ROGIA; (IP)←(IP)當(dāng)前+16位位移量,段內(nèi)直接尋址JMP NEAR PTR PROGIA,,當(dāng)前地址,(二)段內(nèi)間接尋址(Intrasegment indirect addressing)段內(nèi)間接尋址:轉(zhuǎn)向有效地址是一個寄存器或一個存儲單元的內(nèi)容,這內(nèi)容可以用數(shù)據(jù)尋址方式中除立即數(shù)以外的任何一種尋址方式取得。得到的轉(zhuǎn)向有效地址用來取代IP寄存器的內(nèi)容。這種尋址方式和以下二種段間尋址方式都不能用于條件轉(zhuǎn)移指

22、令。* 條件轉(zhuǎn)移指令只能適用段內(nèi)直接尋址的8位位移量。,匯編格式:JMP BX JMP WORD PTR [BP + TABLE]其中: WORD PTR——操作符, (BP)+TABLE 尋址所得地址是一個字的有效地址,由有效地址形成物理地址里的內(nèi)容即為轉(zhuǎn)向有效地址IP。轉(zhuǎn)向物理地址的計算公式:PA=16d?(CS)+(IP),段內(nèi)間接尋址方式

23、的轉(zhuǎn)移指令中轉(zhuǎn)移的有效地址的計算方法:舉例: 指令執(zhí)行前:設(shè):(DS)=2000H,(BX)=1256H,(SI)=528FH,TABLE=20A1H,(232F7H)=3280H,(264E5H)=2450H 例1、JMP BX 指令執(zhí)行后: (IP)=1256H 例2、JMP [BX+TABLE] 指令執(zhí)行后: (IP)=?,(三)

24、段間直接尋址(Intersegment direct addressing)指令中直接提供了轉(zhuǎn)向段地址和偏移地址。用指令中指定的偏移地址 (IP)用指令中指定的段地址 (CS)完成了從一段到另一段的轉(zhuǎn)移操作指令匯編語言格式:JMP FAR PTR NEXTROUTINTNEXTROUTINT —— 轉(zhuǎn)向的符號地址 FAR PTR

25、 —— 段間轉(zhuǎn)移操作符OFFSET NEXTROUTINT? (IP) SEG NEXTROUTINT? (CS),例:JMP FAR PTR CCC,(四)段間間接尋址(Intersegment inderect addressing)用存儲器中二個相繼字的內(nèi)容取代IP、CS以達(dá)到段間轉(zhuǎn)移目的。存儲單元的地址是由指令指定除立即數(shù)方式和寄存器方式以外的任何一種尋址

26、方式取得。指令匯編語言格式:JMP DWORD PTR [INTERS+BX]DWORD PTR——雙字操作符,轉(zhuǎn)向地址雙字(段間轉(zhuǎn)移)[INTERS+BX]——數(shù)據(jù)尋址方式為直接變址尋址方式* 段間轉(zhuǎn)移必須是無條件轉(zhuǎn)移。,例:JMP DWORD PTR [BX]指令執(zhí)行前:設(shè):(DS)=4000H,(BX)=1212H(41212H)=1000H(41214H) =4A00

27、H指令執(zhí)行后:(IP)=1000H (CS)=4A00H,思考題,1、已知(BX)=356DH, (SI)=2A6BH, 位移量=3246H,試確定在以下各種尋址方式下的有效地址是什么?(1)直接尋址:(2)使用BX的間接尋址:(3)使用BX的寄存器相對尋址:(4)變址尋址:(5)相對變址尋址:(6)使用BX和SI的基址變址尋址:(7)使用BX和SI的相對的基址變址尋址2、設(shè)(IP)=2BCOH,(CS)

28、=0200H,位移量為5119H,(BX)=1200H,(DS)=212AH,(224A0H)=0600H,(275B9H)=098AH,求使用下列尋址方式的轉(zhuǎn)移指令的轉(zhuǎn)移目的地址。(1)段內(nèi)直接尋址;(2)用BX寄存器和寄存器相對尋址的段內(nèi)間接尋址方式,3-2 8086/8088的指令系統(tǒng),8086/8088的指令系統(tǒng)中共有92種基本指令??梢苑殖?個功能組:1.?dāng)?shù)據(jù)傳送(Data transfer)2.算術(shù)運(yùn)

29、算(Arithmetic)3.邏輯運(yùn)算和移位指令(Logic& Shift)4.串操作(String manipulation)5.控制轉(zhuǎn)移(Control Transfer)6.處理器控制(Processor Control),1、 數(shù)據(jù)傳送指令(Data transfer)(一)通用傳送指令(General Purpose Transfer)(二)輸入輸出指令(Input and Output)(三

30、)目的地址傳送指令(Address-object transfer)(四)標(biāo)志傳送指令(Flag register transfer),1、數(shù)據(jù)傳送指令功能: 負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳 送到寄存器或存儲單元。特點(diǎn): 它是計算機(jī)最基本、最重要的一種操作,使用比例最高。種類(分四種): 通用傳送指令包括: MOV, PUSH, POP ,XCHG, XLAT。 輸入輸出指令包括: IN, OUT。

31、 目的地址傳送指令包括: LEA, LDS, LES 標(biāo)志傳送指令包括 : LAHF, SAHF, PUSHF, POPF 除 SAHF和POPF指令外,對標(biāo)志位沒有影響。,(一)通用傳送指令(General Purpose Transfer)8086提供方便靈活的通用的傳送操作,適用于大多數(shù)操作數(shù)。通用傳送指令(除了XCHG以外)是唯一允許以段寄存器為操作數(shù)指令。通用傳送指令包括:1、MO

32、V (Movement)2、PUSH (Push word onto stack) POP (Pop word off stack)3、XCHG (Exchange)4、XLAT (Translate),1.MOVdest,src ; (dest) ? (src) 目的源目的 ? 源功能: 把一個字節(jié)(B)

33、或一個字(W)操作數(shù)由源傳送至目的。 實現(xiàn):寄存器 ? 寄存器/存儲器之間;立即數(shù)?寄存器/存儲器寄存器/存儲器?段寄存器之間的數(shù)據(jù)傳送。,MOV DS, AX ;DS ?AX MOV CH, 20 ;CH ?20 MOV BL, AH ;BL?AH

34、 MOV AX, [BX] ;AX?[BX] MOV [BX], AX ;[BX]?AX MOV AX, [BX+0060H],例:,? 注意:(1)不能用一條MOV指令實現(xiàn)以下傳送。 存儲單元之間的傳送MOV MEM2 , MEM1 錯。MOV AX , MEM1M

35、OV MEM2 , AX 對。 立即數(shù)送段寄存器 例 : MOV DS,2000H 錯。MOV AX, 2000HMOV DS , AX 對。,,,,,段寄存器之間的傳送MOV ES , DS ; 錯MOV AX , DSMOV ES , AX ; 對 。? 注意CS和IP的使用 CS和IP不能作為

36、目標(biāo)操作數(shù),可以作為源操作數(shù)。例:MOV CS,AX ; 錯 MOV AX,CS ;對 。 MOV IP, AX ;錯 MOV AX, IP ; 對。,,,(2)段地址的默認(rèn)BX、SI、DI間址默認(rèn)段地址為DS,BP間址默認(rèn)段地址SS。(3)凡是遇到給SS賦值指令,系統(tǒng)自動禁止外部中斷,執(zhí)行完本條指令和下條指令后,恢

37、復(fù)對SS寄存器賦值前的中斷開放情況。這樣做為了允許程序員連續(xù)用兩條指令分別對SS和SP寄存器賦值,同時又防止堆??臻g變動過程出現(xiàn)中斷。*在修改SS和SP的指令之間不要插入其他指令。(4)所有通用傳送指令不影響標(biāo)志位(除SAHF、POPF以外)。,? MOV指令應(yīng)用例:實現(xiàn)將AREA1開始的100個數(shù)據(jù)傳送到AREA2開始的單元。,…,…,,分析題意: ①可以用200條MOV指令來完成100個數(shù)據(jù)傳送,

38、 指令操作重復(fù),每個數(shù)據(jù)傳送后的地址是變化的。 ② 可以利用循環(huán),但每循環(huán)一次要修改地址(源地址和目的地址),必須把地址放在寄存器當(dāng)中,用寄存器間接尋址來尋找操作數(shù).,得到如下程序:…MOV SI,OFFSET AREA1 MOV DI,OFFSET AREA2 MOV CX,100AGAIN :MOV AL,[SI]MOV [DI],

39、AL INC SI ;修改地址指針 INC DI ;修改地址指針 DEC CX;修改個數(shù) JNZ AGAIN…,2. PUSH (Push word onto stack) POP (Pop word off stack) 這是兩條堆棧操作指令。(1) 先介紹一下什么是堆棧,為什么需

40、要堆棧堆?!凑障冗M(jìn)后出原則組織的一段內(nèi)存區(qū)域,特點(diǎn): 下推式地(規(guī)定堆棧設(shè)置在堆棧段內(nèi))改變SP的內(nèi)容, 隨著推入堆棧內(nèi)容增加,SP的值減少。 先進(jìn)后出工作原則(Last In First Out 簡稱LIFO) 堆棧在內(nèi)存中的情況:,堆棧在內(nèi)存中的情況: 可以用一條立即數(shù)傳送指令給SP賦值,確定SP在SS段中的初始位置。例:設(shè): (SS)=9000H ,

41、 堆棧段為64KB MOV SP,0E200H;(SP)=0E200H則: 整個堆棧段的物理地址范圍為:90000H~9FFFFH 棧頂?shù)奈锢淼刂窞椋?E200H堆棧在內(nèi)存中的情況如右圖所示:,堆棧用途: 存放CPU寄存器或存儲器中暫時不使用的數(shù)據(jù), 使用數(shù)據(jù)時將其彈出; 調(diào)用子程序, 響應(yīng)中斷時都要用到堆棧。 調(diào)用子程序(或過程)或發(fā)生中斷時要保護(hù)斷點(diǎn)的地址,

42、子程序或中斷返回時恢復(fù)斷點(diǎn)。,注意:SP——堆棧指針,始終指向棧頂。SP初值用MOV SP,i m來設(shè)定。,注意:SP——堆棧指針,始終指向棧頂。SP初值用MOV SP,i m來設(shè)定。下邊詳細(xì)說明一下堆棧用途:,存放CPU寄存器或存儲器中暫時不使用的數(shù)據(jù), 使用數(shù)據(jù)時將其彈出: PUSH AX; 將(AX)入棧,(AX),(AX),使用數(shù)據(jù)時將其彈出:POP BX,調(diào)用子程

43、序(或過程)或發(fā)生中斷時要保護(hù)斷點(diǎn)的地址, 子程序或中斷返回時恢復(fù)斷點(diǎn)。,子程序嵌套,斷點(diǎn)地址壓入和彈出情況,(2) 堆棧操作指令 (堆棧操作指令有兩條):? 入棧指令格式:PUSH src ; (SP) ? (SP)-2 ((SP)+1,(SP)) ? (src) 把一個字從源操作數(shù)?由SP指向堆棧頂部。操作如:PUSH

44、 AX? 出棧指令格式:POP dest ;(dest) ? ((SP)+1,(SP)) (SP) ? (SP)+2把現(xiàn)行SP所指向堆棧頂部的一個字 ? 指定的目的操作數(shù),同時進(jìn)行修改堆棧指針的操作。操作如: POP BX,應(yīng)用時注意: 堆棧操作都按字操作。 PUSH , POP 指令的操作數(shù)可能有三種:寄存器(

45、通用寄存器,地址指針,變址寄存器),段寄存器(CS除外,PUSH CS 合法,POP CS 非法),存儲器。 執(zhí)行PUSH 指令, (SP)-2 ? (SP),低字節(jié)放在低地址,高字節(jié)放在高地址。隨著推入堆棧內(nèi)容增加,堆棧就擴(kuò)展,SP的值減少, 但SP總是指向棧頂, 堆棧工作原則后進(jìn)先出。 PUSH ,POP指令應(yīng)該成對使用,保持堆棧原有狀態(tài)。 堆棧最大容量即為SP的初值與SS

46、之間的差。,堆棧應(yīng)用舉例:,例:用BP的基址指令 代替POP指令…MOV BP,SPPUSH AXPUSH BXPUSH CX…MOV CX,[BP-6] MOV BX,[BP-4]MOV AX,[BP-2]…ADD SP, 6,例 : 壓入堆棧的內(nèi)容與彈出內(nèi)容順序相反…PUSH AXPUSH BXPUSH CX…POP CXPOP B

47、X POP AX,3、交換指令(Exchange)格式:XCHG dest , src;(dest) ?(src)執(zhí)行操作: 把一個字節(jié)或一個字的源操作數(shù)與目的操作數(shù)相交換。 可以 實現(xiàn): 寄存器之間 寄存器和存儲器之間注意: 存儲器之間不能交換,兩個操作數(shù)中必須有一個在寄存器中; 段寄存器不能作為一個操作數(shù); 允許字或字節(jié)操作,不影響標(biāo)志位。,應(yīng)用舉例:XCHG

48、BL,DLXCHG AX,SIXCHG COUNT[DI], AXXCHG [BX],[DI](錯)XCHG DS, AX (錯),XLAT(Trans late)換碼指令:該指令不影響標(biāo)志位。格式: XLAT str_table;(AL)←((BX )+(AL)) 或 XLAT str_table——表格符號地址(首地址),

49、 只是為了提高可讀性而設(shè)置,匯編時仍用BX。,XLAT指令使用方法: 先建立一個字節(jié)表格; 表格首偏移地址存入BX; 需要轉(zhuǎn)換代碼的序號(相對與表格首地址位移量)存入AL; (表中第一個元素的序號為0) 執(zhí)行XLAT指令后,表中指定序號的元素存于AL中。 (AL)為轉(zhuǎn)換的代碼。,XLAT指令應(yīng)用: 若把字符的掃描碼轉(zhuǎn)換成ASCII碼; 或數(shù)字0~9

50、轉(zhuǎn)換成7段數(shù)碼所需要的相應(yīng)代碼(字形碼)等就要用XLAT指令。例:內(nèi)存的數(shù)據(jù)段中有一張十六進(jìn)制數(shù)字的ASCII碼表。 首地址為:Hex_table ,欲查出表中第10個元素(‘A’),(二)輸入輸出指令(Input and Output)輸入輸出指令共兩條: 1、IN (Input byte or word) 2 、OUT (Output byte or word) 輸入指令用于CPU從外設(shè)端口

51、接受數(shù)據(jù), 輸出指令用于CPU向外設(shè)端口發(fā)送數(shù)據(jù)。 無論接受還是發(fā)送數(shù)據(jù),必須通過累加器AX(字)或AL(字節(jié)),又稱累加器專用傳送指令 。 輸入、輸出指令不影響標(biāo)志位。,每個外設(shè)要占幾個端口:數(shù)據(jù)口,狀態(tài)口和控制口。,1、IN (Input byte or word) 輸入指令格式:IN acc, port ;(acc) ? (port)具體形式有四種:IN AL, d

52、ata8 ; 端口地址8位,輸入一個字節(jié)IN AX, data8 ;端口地址8位,輸入一個字IN AL, DX ;端口地址16位,輸入一個字節(jié)IN AX, DX ;端口地址16位,輸入一個字 必須通過累加器AX(字)或AL(節(jié))輸入數(shù)據(jù)。,2 、OUT(Output byte or word) 輸出指令格式: OUT port,

53、 acc ;(port) ? (acc)具體形式有四種: OUT data8 , AL ; 端口地址8位,輸出一個字節(jié)OUT data8, AX ;端口地址8位,輸出一個字OUT DX , AL ;端口地址16位,輸出一個字節(jié) OUT DX , AX ;端口地址16位,輸出一個字 必須通過累加器AX(字)或AL(節(jié))輸出數(shù)據(jù)。,例1:實現(xiàn)(2

54、9H)(28H)→(DATA_WORD) IN AX,28H MOV DATA_WORD,AX例2:從端口3FCH 送一個字到AX寄存器MOV DX,3FCH IN AX,DX ; (AL)←(3FCH), (AH)←(3FDH) 例3:實現(xiàn)將(AL) →(05H) OUT 05H,AL;(05H)←(AL),(三)目的地址傳送指令(Address-obj

55、ect transfer) 8086 /8088 提供三條:地址指針寫入指定寄存器或寄存器對指令。1、LEA(Load Effective Address)2、LDS (Load pointer using DS)3、LES (Load pointer using ES),1、LEA(Load Effective Address)格式: LEA reg16 , mem16 ;EA

56、?(reg16)功能:加載有效地址,用于寫近地址指針。把指令中指定的存儲器操作數(shù)有效地址裝入指定的寄存器 。例:設(shè)(BX)=0400H,(SI)=003CHLEA BX,[BX+SI+0F62H]執(zhí)行指令后: EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH(BX)=139EH,注意:設(shè) (DS)=3000HBUFFER=1000H(31000H)=00

57、40H(1) LEA 指令與MOV 的區(qū)別LEA BX , BUFFER ;(BX)=1000HMOV BX , BUFFER ; (BX)=0040H LEA 指令與MOV等價LEA BX , BUFFER ; (BX)=1000HMOV BX , OFFSET BUFFER ; (BX)=1

58、000H,(2)LEA 指令中的目標(biāo)寄存器必須是16位的通用寄存器, 源操作數(shù)必須是一個存儲器。(3)請思考下列指令的正、誤LEA DX ,BETA[BX][SI]LEA DX , AX,2、LDS (Load pointer using DS)格式:LDS reg16, mem32 ;(reg16)←(EA) (DS)←((EA)+2))

59、功能:將指令指定32位地址指針?biāo)椭噶钪付拇嫫骱虳S。將指令指定mem32單元的前兩個單元內(nèi)容(16位偏移量)裝入指定通用寄存器,把后兩個單元內(nèi)容(段地址) 裝入到DS段寄存器。用于寫遠(yuǎn)地址指針。,例: 假設(shè): (DS)=C 000H指令:LDS SI, [0010H]執(zhí)行指令后: (SI)=0180H (DS)=2000H,3、LES (Load pointer using ES)格式:LES

60、 reg16, mem32 ;(reg16)←(EA) (ES)←((EA)+2))功能:把源操作數(shù)指定的4個相繼字節(jié)送指令指定的寄存器 及ES寄存器中。 此指令常常指定DI寄存器。將指令指定mem32單元的前兩個單元內(nèi)容(16位偏移量)裝入指定通用寄存器,把后兩個單元內(nèi)容(段地址) 裝入到ES段寄存器。用于寫遠(yuǎn)地址指針。,例: 假設(shè): (DS)=

61、B 000H (BX)=080AH指令:LES DI, [BX]執(zhí)行指令后: (DI)=05A2H (ES)=4000H,綜合舉例:設(shè): (DS)=5000H TABLE=1000H分析下列指令執(zhí)行結(jié)果: MOV BX,TABLE ;(BX)=0040H MOV BX,OFFSET TABLE ;(BX)=1000H LEA BX,TA

62、BLE ;(BX)=1000H LES BX,TABLE ;(BX)=0040H,(ES)=3000H LDS BX,TABLE ;(BX)=0040H,(DS)=3000H,,,,,,(四)標(biāo)志傳送指令(Flag register transfer)采用了隱含寄存器(AH、Flags)操作數(shù)方式。 8086有四條標(biāo)志傳送操作指令:1.LAHF(Load AH from flags)2

63、.SAHF(Store AH into flags) 3.PUSH F(Push flags onto stack)4.POP F(Pop flags off stack),2.SAHF(Store AH into flags)格式:SAHF ;(PSW的低字節(jié))←(AH)功能:(AH)送標(biāo)志寄存器低八位。3.PUSH F(Push flags onto stack)格式:PUSH

64、F;(SP)←(SP)-2 ((SP)+1,(SP))←(PSW)功能 : 標(biāo)志進(jìn)棧。4.POP F(Pop flags off stack) 格式:POP F;(PSW)←((SP)+1,(SP)) (SP)←(SP)+2 功能 :標(biāo)志出棧。,注意:(1) 標(biāo)志位的影響LAHF、PUSHF不影響標(biāo)志位,SAHF、POPF由裝入的值確定標(biāo)志位

65、的值, 即影響標(biāo)志位。(2)PUSH F、POPF用于保護(hù)調(diào)用過程前(PSW),過程返回后恢復(fù)。例:…PUSHAXPUSH CXPUSH FCALL TRANS,二、 8086/8088的指令系統(tǒng)(續(xù)),2.算術(shù)運(yùn)算指令(Arithmetic)內(nèi)容: 8086/8088提供加、減、乘、除、轉(zhuǎn)換五種基本算術(shù)操作; 利用十進(jìn)制調(diào)整指令和ASCII調(diào)整指令對BCD碼表示的

66、 十進(jìn)制數(shù)進(jìn)行算術(shù)運(yùn)算; 對帶符號數(shù)與無符號數(shù)進(jìn)行乘、除運(yùn)算。(一)加法指令(Arithmetic)(二)減法指令(Subtraction)(三)乘法指令(Multiplication)(四)除法指令(Division)(五)轉(zhuǎn)換指令,(一)加法指令(Arithmetic) 8086具有5種加法操作指令: 1、 ADD(Addition)加法指令 2、 ADC(Add with

67、carry)帶進(jìn)位加法指令 3、 INC(Increment by 1)加 1指令 4、AAA(ASCII adjust for addition)加法ASCII調(diào)整指令 5、DAA(Decimal adjust for addition)加法十進(jìn)制調(diào)整指令,1、 ADD(Addition)加法指令指令格式:ADD dest , src ;(dest) ?(dest)+(src)Src:

68、立即數(shù),寄存器,存儲器。dest:寄存器,存儲器。例:ADD CL,10;寄存器+立即數(shù)ADD DX,SI;寄存器+寄存器ADD AX, MEM;寄存器+存儲器ADD DATA[BX], AL;存儲器+寄存器ADD BYTE PTRALPHA[DI],30H;存儲器+立即數(shù),2、 ADC(Add with carry)帶進(jìn)位加法指令格式:ADC dest,src ;(d

69、est)←(dest)+(src)+CF CF: 進(jìn)位標(biāo)志CF的現(xiàn)行值(上條指令CF值)特點(diǎn): 與ADD同。用途:主要用于多字節(jié)運(yùn)算中。類型舉例:ADC CX, 300 ;寄存器+立即數(shù)+CFADC AL, BL;寄存器+寄存器+CFADC DX, COUNT[SI];寄存器+存儲器+CFADC BLOCK[DI], BX;存儲器+寄存器+CFADC B

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論