




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
微機(jī)原理及應(yīng)用B第3章8086/8088指令系統(tǒng)與尋址方式(第1-2講)1第3章8086/8088指令系統(tǒng)與尋址方式3.1概述3.2數(shù)據(jù)尋址方式3.3指令格式及指令執(zhí)行時(shí)間3.48086/8088指令系統(tǒng)【本章重點(diǎn)】掌握指令的的基本格式,指令系統(tǒng)的操作功能及使用方法【本章難點(diǎn)】8086的尋址方式,數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令的使用2(1)指令的內(nèi)涵指令(Instruction)是計(jì)算機(jī)能夠識(shí)別和執(zhí)行的指揮計(jì)算機(jī)進(jìn)行操作的命令,而指令系統(tǒng)就是微處理器所能執(zhí)行的所有指令的集合。3.1概述(一)指令與高級(jí)語言相比,微處理器的指令系統(tǒng)就相當(dāng)于高級(jí)語言中的關(guān)鍵字的集合,同時(shí)又是高級(jí)語言中的語句。這就是說,每條指令都對(duì)應(yīng)一個(gè)獨(dú)立的操作,而復(fù)雜的操作常常需要用多條指令才能完成。3(2)指令的表示計(jì)算機(jī)的指令有兩種表示方法:機(jī)器碼和助記符。①微處理器的指令系統(tǒng)均是用二進(jìn)制形式給出的,稱為機(jī)器碼。②為了方便人類的使用,微處理器生產(chǎn)廠商還為指令系統(tǒng)規(guī)定了助記符。注意:助記符與人類的自然語言相似,用助記符書寫的程序必須經(jīng)過編譯器編譯成二進(jìn)制的機(jī)器碼后計(jì)算機(jī)才可能識(shí)別。000033BDXORBX,BX0002D80001START:MOVAX,1000503C3ADDAX,BX
;(P91)45(3)指令碼的組成指令碼由操作碼(Operator)字段和操作數(shù)(Operand)字段兩部分組成。操作碼操作數(shù)10110而該指令的助記符為MOVAL,26H;將數(shù)值26H存入8位寄存器AL中。例【3-1】一條指令的機(jī)器碼為0B026H,其二進(jìn)制形式為:欲執(zhí)行的操作(即作什么事情)操作的對(duì)象(即對(duì)誰進(jìn)行操作)6操作數(shù)可以有一個(gè)、兩個(gè)或更多,通常稱為一地址指令、二地址指令或單操作數(shù)指令、雙操作數(shù)指令等。INCAL;(AL)←(AL)+1ADDCL,BL;(CL)←(BL)+(CL)在二地址指令格式中,提供兩個(gè)操作數(shù)地址,分別為目標(biāo)操作數(shù)和源操作數(shù),當(dāng)指令執(zhí)行時(shí),兩個(gè)操作數(shù)同時(shí)參與運(yùn)算,并把運(yùn)算結(jié)果返回目標(biāo)操作數(shù),即目標(biāo)操作數(shù)原有內(nèi)容在運(yùn)算后將會(huì)丟失。指令的書寫格式
標(biāo)號(hào):指令助記符操作數(shù) ;注釋7(二)操作數(shù)操作數(shù)是指令的操作對(duì)象。8086/8088指令系統(tǒng)中的操作數(shù)分為兩大類:數(shù)據(jù)操作數(shù)和轉(zhuǎn)移地址操作數(shù)。(1)數(shù)據(jù)操作數(shù)4)I/O操作數(shù)——指令中操作的數(shù)據(jù)來自或送到I/O端口。2)寄存器操作數(shù)—操作對(duì)象是寄存器中的內(nèi)容。例:MOVAL,BL3)內(nèi)存操作數(shù)—操作對(duì)象是內(nèi)存中的數(shù),也稱存儲(chǔ)器操作數(shù)。例:MOVAL,[1000H]1)立即數(shù)——指令中直接給出操作數(shù)本身。例:MOVAX,8745H8符號(hào)意義imm立即數(shù)i1616位立即數(shù)i88位立即數(shù)reg通用寄存器r1616位寄存器r88位寄存器seg段寄存器mem存儲(chǔ)器操作數(shù)m1616位存儲(chǔ)器操作數(shù)m88位存儲(chǔ)器操作數(shù)dest目標(biāo)操作數(shù)(distance)src源操作數(shù)(source)portI/O端口號(hào)9(2)轉(zhuǎn)移地址操作數(shù)這類操作數(shù)出現(xiàn)在程序跳轉(zhuǎn)或程序調(diào)用指令中,指出程序要轉(zhuǎn)移的目的地址。它可以分為:立即數(shù)、寄存器操作數(shù)、存儲(chǔ)器操作數(shù),即要轉(zhuǎn)移的目標(biāo)地址包含在指令中或放在寄存器、內(nèi)存儲(chǔ)器中。10操作碼指出了要求CPU執(zhí)行什么樣的操作,而操作數(shù)則指出了對(duì)誰進(jìn)行指定的操作。確定操作數(shù)存放在何處的手段就叫做尋址方式(AddressingMethod)。一種CPU所提供的尋址方式越多,編程越靈活。當(dāng)然,其缺點(diǎn)是增加了程序員的記憶負(fù)擔(dān)。3.2數(shù)據(jù)尋址方式8086CPU提供了7種尋址方式:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、寄存器相對(duì)尋址、基址變址尋址和相對(duì)基址變址尋址。11
立即尋址(ImmediateAddressing)是指操作數(shù)本身就是數(shù)據(jù),叫做立即數(shù)。所謂“立即”,是指源操作數(shù)為一立即數(shù)(即一個(gè)數(shù)值),而目標(biāo)操作數(shù)則必須為一寄存器。其主要功能用來給寄存器或存儲(chǔ)器賦值。在這種尋址方式中,操作數(shù)直接跟在操作碼之后,參加指令所規(guī)定的操作,并且操作數(shù)與操作碼一起放在代碼段區(qū)域中。(1)立即尋址操作碼…立即數(shù)高位字節(jié)立即數(shù)低位字節(jié)…代碼段12注意事項(xiàng):1)立即尋址通常用于二地址指令中,且只能用作源操作數(shù)。2)數(shù)據(jù)傳送應(yīng)理解為復(fù)制傳送,源操作數(shù)不會(huì)因?yàn)閭魉投?shù)據(jù)。3)數(shù)據(jù)傳送方式:數(shù)據(jù)高位→高地址;數(shù)據(jù)低位→低地址操作碼00H20HAHALROM代碼段......AX20H00H例【3-2】
MOVAX,2000H;AX←2000H13
寄存器尋址(RegisterAddressing)是指源數(shù)據(jù)存放在CPU中某個(gè)寄存器中。例如:MOV DX,AX
對(duì)16位操作數(shù)來說,寄存器可以為AX、BX,CX,DX、SI、DI、SP或者BP,對(duì)于8位操作數(shù)來說,寄存器可為AH,AL、BH,BL,CH,CL、DH,DL。(2)寄存器尋址****DX34H12HAX34H12H34H12H14特點(diǎn):1)操作數(shù)在寄存器中,寄存器在CPU內(nèi)部,執(zhí)行指令時(shí),操作就在CPU內(nèi)部進(jìn)行,不需要訪問存儲(chǔ)器取得操作數(shù),因此執(zhí)行速度快。2)寄存器號(hào)比內(nèi)存地址短,匯編后機(jī)器碼長度最短。3)該尋址方式可用于源操作數(shù),也可用于目標(biāo)操作數(shù),二者皆可。注意:1)源操作數(shù)和目標(biāo)操作數(shù)均為寄存器時(shí),二者長度必須相同。2)兩個(gè)操作數(shù)不能同時(shí)為段寄存器。3)目標(biāo)操作數(shù)不能是代碼段寄存器。4)不能通過立即尋址對(duì)段寄存器賦值。15段寄存器寫入方法:
MOVAX,3000H;MOVCS,AX;MOVSS,DS;
MOVSS,1000H;MOVCS,3000H;MOVDI,1000HMOVSS,DI;錯(cuò)!功能正確但在使用中不允許隨便修改CS的內(nèi)容!錯(cuò)!兩操作數(shù)不能同時(shí)為段寄存器錯(cuò)!不能通過立即尋址對(duì)段寄存器賦值錯(cuò)!不能通過立即尋址對(duì)段寄存器賦值正確16
直接尋址(DirectAddressing)是指在指令中直接給出欲訪問存儲(chǔ)單元的地址偏移量(也叫有效地址EA,EffectiveAddress),而段地址一般為DS寄存器中的值。例如:MOV BX,DS:[0100H] 表示偏移地址或邏輯地址的值必須用方括號(hào)括起來。MOVBX00H01H……CS34H12H……DSDS:0100HBX1234H(3)直接尋址17由于直接尋址通常總是相對(duì)數(shù)據(jù)段的,所以上述語句中的段地址前綴DS:可以省略:MOV BX,[0100H]然而在實(shí)際應(yīng)用中,數(shù)據(jù)也常常存放在附加段ES中,在這種情況下,段地址ES一定是不能省略的,如:MOV BX,ES:[0100H]比較下列指令:MOV BX,[0100H]MOV BX,0100HMOV BX,ES:[0100H]18存儲(chǔ)器DS段8AF5XX存儲(chǔ)器CS段操作碼0020操作碼0120代碼段MOVAL,[2000H]MOVAH,[2001H]數(shù)據(jù)段DS:2000DS:2001AL=8AHAH=0F5H字節(jié)尋址方式
AL=8AHAH=0F5H代碼段數(shù)據(jù)段DS:2000DS:2001存儲(chǔ)器DS段8AF5XX存儲(chǔ)器CS段操作碼0020字尋址方式
MOVAX,[2000H]19在匯編語言指令中,通常采用符號(hào)地址代替數(shù)值地址。例如:
VALUEDB12H,34H,56HMOVAL,VALUE或MOVAL,[VALUE]34H56H……12HVALUEAL=12H20
寄存器間接尋址(RegisterIndirectAddressing)是指將有效地址存放在寄存器中,CPU首先從某個(gè)寄存器中取出有效地址,然后再將該值與數(shù)據(jù)段DS或棧段SS中的值組合成一個(gè)20位的物理地址,最后對(duì)該物理地址進(jìn)行訪問。1234H34H12H……DS0100HAXDI0100H(4)寄存器間接尋址例【3-3】
MOVAX,[DI]21說明:(1)存儲(chǔ)器中的內(nèi)容不是操作數(shù),而是操作數(shù)地址的16位偏移量。(2)寄存器間接尋址時(shí),有效地址可以存放在BX、SI、DI和BP等寄存器中。物理地址=SS×10H+BP2)若使用其它寄存器間接尋址,則段地址存放在數(shù)據(jù)段寄存器DS中。物理地址=DS×10H+BX(或SI或DI)1)若使用BP間接尋址,則段地址使用的是棧段寄存器SS中的值;22例【3-4】
MOVAX,[SI]執(zhí)行過程如下圖所示?!僮鞔a…A0H50H…代碼段數(shù)據(jù)段2000+)
SI1000
21000H21000H21001H500A0AXDS23
寄存器相對(duì)尋址(RegisterRelativeAddressing)也叫直接變址尋址,是指欲訪問的存儲(chǔ)單元有效地址由兩部分內(nèi)容組成—某個(gè)寄存器中的值與一個(gè)8位或16位的值(叫做偏移量)之和,而段地址則存放在DS或SS中。1234H34H12H……1100HDSBXDI0100HARR=1000H(5)寄存器相對(duì)尋址例【3-5】
MOVBX,ARR[DI]或MOVBX,[DI+ARR]24說明:
寄存器相對(duì)尋址時(shí),有效地址可以存放在BX、SI、DI和BP等寄存器中,寄存器前的數(shù)字或符號(hào)常量為偏移量,為符號(hào)數(shù)。物理地址=SS×10H+BP+disp物理地址=DS×10H+BX(或SI或DI)+disp(2)若使用其它寄存器間接尋址,則段地址存放在數(shù)據(jù)段寄存器DS中。(1)若使用BP間接尋址,則段地址使用的是棧段寄存器SS中的值;25
基址變址尋址(BasedIndexedAddressing)是指欲訪問的存儲(chǔ)單元有效地址是兩寄存器中數(shù)據(jù)之和,這兩個(gè)寄存器一個(gè)叫做基址寄存器(一般為BX和BP),另一個(gè)叫做變址寄存器(一般為DI和SI),而段地址則存放在DS或SS中。1234H34H12H……SS1100HAXSI0100H1000HBP(6)基址變址尋址例【3-6】MOVAX,[BP][SI]或MOVAX,[BP+SI]26說明:
寄存器基址變址尋址時(shí),基址寄存器(BX或BP)+變址寄存器(DI或SI)物理地址=SS×10H+BP+DI/SI物理地址=DS×10H+BX+DI/SI(2)若使用BX,則段地址存放在數(shù)據(jù)段寄存器DS中。(1)若使用BP,則段地址使用的是棧段寄存器SS中的值;27
相對(duì)基址變址尋址(RelativeBasedIndexedAddressing)相當(dāng)于基址加變址尋址與寄存器相對(duì)尋址的組合,該尋址方式的有效地址由三部分構(gòu)成:基地址(存放在基地址寄存器中)、變址(存放在變址寄存器中)和8位或16位的位移量。例如:
MOVAX,ARR[BP][SI]MOVAX,ARR[BP+SI]MOVAX,[BP+SI+ARR](7)相對(duì)基址變址尋址28尋址方式物理地址立即尋址MOVAX,100H
操作數(shù)由指令給出寄存器尋址ADDAX,BX
操作數(shù)在寄存器中直接尋址MOVAX,[1000H]操作數(shù)的有效地址由指令直接給出寄存器間接尋址
MOVAX,[BX]
PA=(DS)×10H+(BX)或(SI)或(DI)PA=(SS)×10H+(BP)寄存器相對(duì)尋址MOVAX,VAR[BX]PA=(DS)×10H+(BX)或(SI)或(DI)+位移量PA=(SS)×10H+(BP)+位移量基址變址尋址MOVBX,[BX+DI]PA=(DS)×10H+(BX)+(SI)或(DI)PA=(SS)×10H+(BP)+(SI)或(DI)相對(duì)基址變址尋址MOVBX,[BP+SI+VAR]PA=(DS)×10H+(BX)+(SI)或(DI)+位移量PA=(SS)×10H+(BP)+(SI)或(DI)+位移量291)MOVAX,[BX]例【3-7】
BX=3010HSI=3011H3010H內(nèi)存數(shù)據(jù)段DS執(zhí)行后AX=1234H12H34H56H78H9AHBCHEFH2DH3011H3012H3013H3014H6020H6021H6022H2)MOVAX,[BX+3]執(zhí)行后AX=9A78H3)MOVAX,[SI]執(zhí)行后AX=BC2DH4)MOVAX,[BX][SI]
執(zhí)行后AX=5612HBX+SI=6021H303.3指令格式及指令執(zhí)行時(shí)間(不做要求)31尋址方式物理地址立即尋址寄存器尋址直接尋址寄存器間接尋址
寄存器相對(duì)尋址
基址變址尋址
相對(duì)基址變址尋址
323.48086/8088指令系統(tǒng)8086CPU的指令系統(tǒng)從功能上可以分為以下六類: (1)數(shù)據(jù)傳送(DataTransfer)類指令; (2)算術(shù)運(yùn)算(ArithmeticOperation)類指令; (3)邏輯運(yùn)算(LogicOperation)類指令; (4)串操作(StringManipulation)類指令; (5)程序控制(ProgramControl)類指令; (6)處理器控制(ProcessorControl)類指令。33通用數(shù)據(jù)傳送指令MOV指令堆棧操作指令數(shù)據(jù)交換指令換碼指令壓棧指令出棧指令3.4.1數(shù)據(jù)傳送指令一、通用數(shù)據(jù)傳送指令34 (1)數(shù)據(jù)傳送指令MOV助記符MOV實(shí)際上代表的是英文單詞Move,該指令指示CPU將源地址中的數(shù)據(jù)傳送到目標(biāo)地址中。其一般格式為:把SRC的內(nèi)容復(fù)制到DEST中,執(zhí)行操作后SRC的內(nèi)容不變!MOV dest,src這里,src表示的是源地址,它可以是imm、reg、mem、seg;dest表示的是目標(biāo)地址,它可以是reg、mem、seg。35應(yīng)當(dāng)說明的是,在MOV指令中:dest不得是imm,例如MOV1000H,AX;dest不得是CS,例如MOVCS,1000H;不允許兩個(gè)操作數(shù)均為mem,例如MOV[DI],[SI];不允許兩個(gè)操作數(shù)均為seg,例如MOVES,DS;不能通過立即尋址對(duì)段寄存器賦值,例如MOVDS,1000H。該指令對(duì)標(biāo)志寄存器無影響。36幾個(gè)不能傳送的解決辦法:用AX作橋梁 存儲(chǔ)器←存儲(chǔ)器:MOVAX,MEM1 MOVMEM2,AX段寄存器←段寄存器:MOVAX,DS MOVES,AX段寄存器←立即數(shù):MOVAX,DATA MOVDS,AX37例【3-8】若CX=2233H,執(zhí)行如下指令MOVAL,CLMOVDL,CHMOVCH,AL則AL=
;
DL=
;CL=
;
CH=
;ZF=
。33H22H33H33H不變38 (2)堆棧操作指令所謂堆棧(Stack,簡稱棧)是指一塊連續(xù)的存儲(chǔ)單元,對(duì)該存儲(chǔ)區(qū)的訪問尊循“后進(jìn)先出”(LIFO,LastInFirstOut)的原則,且總是以字進(jìn)行的。有一個(gè)稱作“棧頂指針”的變量存放在SP寄存器中,其初值為棧段的段底(相對(duì)于棧段的偏移量。對(duì)于系統(tǒng)棧而言,為0FFFFH。而對(duì)于用戶自定義的棧,則為棧的大小)。39棧頂SP......棧底SS棧頂SPSS+64KSS40當(dāng)向棧中存入一個(gè)字的數(shù)據(jù)(稱作入棧操作)時(shí),CPU自動(dòng)將SP的值減2;而當(dāng)從棧中取出一個(gè)字的數(shù)據(jù)(稱作出棧操作)時(shí),CPU將SP的值加2。這樣,就使得SP永遠(yuǎn)“指著”棧頂。棧操作指令的操作數(shù)必須為字型的,該操作對(duì)標(biāo)志寄存器無影響。SP中的值就叫做“棧頂”。若某一時(shí)刻(SP)20或SP所指存儲(chǔ)單元已經(jīng)被其它數(shù)據(jù)占據(jù),就叫做?!吧弦绯觥?;若(SP)+264KB,則稱為?!跋乱绯觥?。41 a.進(jìn)棧指令PUSH該指令將數(shù)據(jù)壓入堆棧,其一般形式為
PUSH src 這時(shí)里的操作數(shù)src可以是reg、mem和seg。該指令所執(zhí)行的操作實(shí)際上有兩步:(SP)(SP)–2(SP+1,SP)(src) 可以看出,每次壓入堆棧的一定是16位的數(shù)據(jù)。若操作數(shù)是一個(gè)8位數(shù)據(jù),必須將其擴(kuò)充為16位。42例【3-9】設(shè)AL中存有一個(gè)八位數(shù)據(jù),現(xiàn)欲將該數(shù)據(jù)入棧。 MOV AH,0 PUSH AXSS+64KSP…SSxx34HAX00H34H…34H00HSP……43
b.出棧指令POP該指令將棧頂數(shù)據(jù)彈出,其一般形式為:
POP dest 這里的操作數(shù)dest可以是reg、mem和seg。該指令所執(zhí)行的操作實(shí)際上也有兩步:(dest)(SP+1,SP)(SP)(SP)+2 由于該指令從堆棧中彈出一個(gè)16位數(shù)據(jù),所以操作數(shù)必須是一個(gè)r16或m16。
從棧操作指令的工作方式可以看出,操作數(shù)不得是imm。44POPAX(dest)(SP+1
,SP)(SP)(SP)+2AX=1234H…34H12HSPSSSS+64K78H56H34H56H…34H12HSPSS78H56H34H56HSS+64K45 (3)數(shù)據(jù)交換指令XCHG該指令助記符實(shí)際上是由單詞Exchange演變來的,表示將兩個(gè)操作數(shù)相互交換,其一般形式為XCHG dest,src其中:dest可以是reg和mem;src也可以是reg或mem。XCHG AX,BXXCHG[2000H],CL46例【3-10】設(shè)CX=1234H,SI=1050H,而存儲(chǔ)單元DS:1050H和DS:1051H中的數(shù)據(jù)分別為78H和56H。則在執(zhí)行指令后: XCHG CX,[SI]CX1234H…34H78HDS:78H56H34H56H104FH104EH1051H1050H1052HCX=
;(DS:[1050H])=
;(DS:[1051H])=
。5678H
34H12H47但是,XCHG指令不允許同時(shí)對(duì)兩個(gè)存儲(chǔ)單元進(jìn)行操作。MOVAX,[0100H]XCHGAX,[0102H]MOV[0100H],AX(DS:[0100H]
)←(DS:[0102H]
)48
(4)換碼指令XLAT格式:XLAT
源操作數(shù)、目標(biāo)操作數(shù)均隱含!功能:把數(shù)據(jù)段DS中偏移量為BX+AL的內(nèi)存單元的內(nèi)容送到AL中;即:AL←(BX+AL)換碼指令常用于代碼轉(zhuǎn)換。49例【3-11】設(shè)BX=100H,AL=03H,以DS:BX為首地址的一段內(nèi)存單元內(nèi)容如圖所示。BX=100H,AL=03H,BX+AL=103H…31H32HDS:30H34H33H101H100H103H102H104H…執(zhí)行指令XLAT之后AL=33HAL=(DS:BX+AL)=(DS:103H)=33H50 (1)取有效地址指令LEA該助記符是由英文LoadEffectiveAddress演變而來。即,將一個(gè)有效地址存入某個(gè)寄存器中。其一般形式為:LEA r16,mem二、地址目標(biāo)傳送指令 這里,mem是某個(gè)存儲(chǔ)單元的地址偏移量,通常采用寄存器間接尋址或基址變址尋址方式給出。該指令對(duì)標(biāo)志寄存器無影響。功能:r16←EA(mem)51…34H78H78H56H34H56H104FH104EH1051H1050H1052HDS:0000H例【3-12】設(shè)BX=1000H,DI=004FH。則執(zhí)行指令之后; LEADX,[BX+DI]LEAAX,[BX]DX=
;(DX)=
;AX=
。104FH7834H1000H52例【3-13】若BX=1000H,有如下指令
MOVAX,[BX+50H]
LEA BX,[BX+50H]
MOVAX,[BX+50H]
執(zhí)行之后,BX=
;(BX
)=
;AX=
。1050H3456H…34H78H78H56H34H…1050H10A0HDS:0000H12H…1234H53 (2)地址指針裝入DS指令LDS該助記符是由單詞LoadDataSegment演變而來。即,將一個(gè)地址號(hào)碼的高16位存入DS寄存器中,結(jié)果就是設(shè)置了數(shù)據(jù)段首地址,同時(shí)將該地址號(hào)碼的低16位存入指定的寄存器中。該指令對(duì)標(biāo)志寄存器無影響。其一般形式為:LDS r16,m32其中:r16為一個(gè)16位的通用寄存器,m32為一個(gè)符號(hào)表示的32位地址。功能:r16←m32低16位DS←m32高16位54例【3-14】
MOVBX,1000HMOVSI,004EHLDSBX,ES:[BX+SI]執(zhí)行完上述指令后,DS=
;BX=
?!?4H78H78H56H34H56H104FH104EH1051H1050H1052H01A0H:0000H…34H78H78H56H34H56H104FH104EH1051H1050H1052HBX=3456HDS=5678H55
(3)地址指針裝入ES指令LES該指令與LDS相似,只是它所設(shè)置的段為附加段(ES)。功能:r16←m32低16位ES←m32高16位LES r16,m32其中:r16為一個(gè)16位的通用寄存器,m32為一個(gè)符號(hào)表示的32位地址。56
(1)取標(biāo)志指令LAHF該助記符是由英文LoadAHwithFlags演變而來。即,將標(biāo)志寄存器中的低8位存入AH寄存器。其一般形式為:LAHF 從表面上看,該指令沒有操作數(shù)。但實(shí)際上,該指令隱含AH為目標(biāo)操作數(shù),而以標(biāo)志寄存器中的低8位(D7-D0)為源操作數(shù),如下圖所示。三、標(biāo)志傳送指令CFPFAFZFSFTFIFDFOFAH57
(2)置標(biāo)志指令SAHF該助記符是由英文SavetoAHwithFlags演變而來。即,將AH寄存器中的內(nèi)容存入F寄存器的低8位中,即指令LAHF的逆操作。其一般形式為:SAHFCFPFAFZFSFTFIFDFOFAH58例【3-15】利用LAHF、SAHF把標(biāo)志位CF求反,其他位不變。LAHF;取標(biāo)志寄存器的低8位XORAH,01H;最低位求反,其它位不變SAHF;送入標(biāo)志寄存器的低8位CFPFAFZFSFTFIFDFOFAH59 (3)標(biāo)志入棧指令PUSHF該助記符是由英文PushFlagsintostack演變而來。即,將F寄存器的中的16位數(shù)據(jù)壓入堆棧。其一般形式為:PUSHF源操作數(shù)隱含為標(biāo)志寄存器,目標(biāo)操作數(shù)隱含為堆棧區(qū)。功能:標(biāo)志寄存器入棧①SP←SP-2②(SP+1,SP)←FLAG60 (4)標(biāo)志出棧指令POPF該助記符是由英文PopFlagsfromstack演變而來。即,將棧頂?shù)?6位數(shù)據(jù)彈出到F寄存器中。其一般形式為:POPF源操作數(shù)隱含為堆棧區(qū),目標(biāo)操作數(shù)隱含為標(biāo)志寄存器功能:數(shù)據(jù)出棧到標(biāo)志寄存器
①FLAG←(SP+1,SP)②SP←SP+2注意:PUSHF不會(huì)影響標(biāo)志寄存器的值,而POPF則會(huì)改變標(biāo)志寄存器的值。另外,由于這兩條指令均涉及到棧操作,它們必然會(huì)影響棧頂指針SP的值。61例【3-16】把標(biāo)志寄存器SF位置1,其他標(biāo)志位不變。CFPFAFZFSFTFIFDFOFAH;標(biāo)志寄存器入棧;取出標(biāo)志寄存器的內(nèi)容;SF位置1,其他位不變;新值入棧;送入標(biāo)志寄存器PUSHFPOPAXORAX,0080HPUSHAXPOPF62四、I/O指令I(lǐng)/O指令用于CPU與輸入、輸出設(shè)備端口之間的數(shù)據(jù)傳送。(1)直接尋址指令中直接給出端口地址,其格式如下:INAL/AX,port;8位的端口號(hào)256個(gè),地址為0~FFHOUTport,AL/AX;(2)間接尋址端口地址存于DX寄存器中,其格式如下:INAL/AX,DX;DX表示可尋址64K個(gè)端口,0~FFFFHOUTDX,AL/AX63在使用間接尋址的IN/OUT指令時(shí),要事先用傳送指令把I/O端口號(hào)設(shè)置到DX寄存器,如:
MOVDX,220HINAL,DX;將220H端口內(nèi)容讀入AL(1)寄存器的選擇AL/AX注意事項(xiàng):選擇依據(jù)是操作數(shù)的類型!(2)尋址方式的選擇直接還是間接?端口地址在0-255(0FFH)兩種方式均可!>0FFH只能用間接尋址,DX64例【3-17】請(qǐng)實(shí)現(xiàn)以下操作:從端口60H讀字節(jié),把它低4位清零后,再從61H輸出。(1)直接尋址INAL,60HANDAL,0F0HOUT61H,AL(2)間接尋址MOVDX,60H
INAL,DXANDAL,0F0HINCDXOUTDX,AL;源端口地址送DX寄存器中
;從60H讀8位數(shù);低4位清零;DX寄存器內(nèi)容改為目標(biāo)端口地址;從61H輸出數(shù)據(jù)65(一)概述8086/8088算術(shù)運(yùn)算指令大致可以分為3類:輔助運(yùn)算、算術(shù)運(yùn)算和BCD數(shù)算術(shù)運(yùn)算調(diào)整指令。算術(shù)運(yùn)算指令的操作數(shù)有4類:無符號(hào)二進(jìn)制數(shù)、有符號(hào)二進(jìn)制數(shù)、無符號(hào)壓縮BCD碼和無符號(hào)非壓縮BCD碼。其中,無符號(hào)壓縮BCD碼僅能作為加、減運(yùn)算的操作碼。應(yīng)當(dāng)強(qiáng)調(diào)的是,幾乎所有算術(shù)運(yùn)算操作均對(duì)標(biāo)志寄存器的值產(chǎn)生影響,而可能受影響的標(biāo)志位如下圖所示:CFPFAFZFSFOF3.4.2算術(shù)運(yùn)算指令66(二)輔助運(yùn)算指令擴(kuò)展規(guī)則:當(dāng)AL<80H時(shí),就向AH中填入00H;而當(dāng)AL80H時(shí),則向AH中填入0FFH。從而保證了符號(hào)位不發(fā)生變化。(課本中表3.12)功能:將AL寄存器中的8位數(shù)據(jù)擴(kuò)展到16位,結(jié)果存放在AX寄存器中。
(1)字?jǐn)U展指令CBW該助記符是由英文ConvertBytetoWord演變而來,它隱含地使用AX寄存器。其一般形式為:CBW該指令對(duì)標(biāo)志寄存器無影響。67
(2)雙字?jǐn)U展指令CWD該助記符是由英文ConvertWordtoDoubleword演變而來,它隱含地使用AX和DX寄存器。其一般形式為:CWD
功能:將AX寄存器中的16位數(shù)據(jù)擴(kuò)展到32位,結(jié)果的低位字存放在AX寄存器中,高位字存放在DX寄存器中。
擴(kuò)展規(guī)則:當(dāng)AX<8000H時(shí),就向DX中填入0000H;而當(dāng)AX8000H時(shí),則向DX中填入0FFFFH。從而保證了符號(hào)位不發(fā)生變化。(課本中表3.12)該指令對(duì)標(biāo)志寄存器無影響。68例【3-19】
MOV AX,7CA3H ;31907D CWD ;例【3-18】
MOV AL,A3H ;89D CBW ;執(zhí)行上述指令后,AX=
。0FFA3H執(zhí)行上述指令后,AX=
,DX=
。7CA3H
0000H69
(1)加1指令I(lǐng)NC該助記符是由單詞Increment演變而來,它將操作數(shù)的值加1。其一般形式為:INC dest 其中:dest可以是reg和mem;可以是8位數(shù)據(jù),也可以是16位數(shù)據(jù)。該指令對(duì)除CF標(biāo)志位以外的其它標(biāo)志位均有影響。(三)加、減指令7011111111+0000000100000000OF=SF=ZF=AF=PF=CF=00111不影響例【3-20】
MOV AL,0FFH INC AL ;AL=00H71
(2)減1指令DEC該助記符是由單詞Decrement演變而來,它將操作數(shù)的值減1。其一般形式為:
DECdest 該指令除了是對(duì)操作數(shù)執(zhí)行減法運(yùn)算外,與INC指令完全相同。72 (3)加法指令A(yù)DD指令的一般形式為:ADD dest,src 該指令對(duì)兩個(gè)操作數(shù)實(shí)施加法運(yùn)算,和存到dest中。其中:dest可以是reg或mem,而src還可以是imm,但這兩個(gè)操作數(shù)不得同時(shí)為mem。該指令影響上述所有6位標(biāo)志位。ADDAL,30HADDSI,[BX+20H]ADDCX,SIADD[DI],200H73D75FH=11100111010111118046H=10000000010001101111110110011110100101結(jié)果:CF=,ZF=,PF=,AF=,OF=,SF=例【3-21】已知(BX)=D75FH指令A(yù)DDBX,8046H執(zhí)行后的狀態(tài)標(biāo)志:10011074
(4)帶進(jìn)位加法指令A(yù)DC該助記符是由單詞AddwithCarry演變而來,其一般形式為:ADC dest,src 它與ADD指令的區(qū)別在于:除了被加數(shù)和加數(shù)外,參與加法運(yùn)算的還有標(biāo)志寄存器中CF(進(jìn)位標(biāo)志,簡稱CY,Carry)的值。該指令影響上述所有6個(gè)標(biāo)志寄位。BXAXDXCXBXAX+CFADDAX,CXADCBX,DX75多字節(jié)加法示意圖A3H79H10H06HBUF1BUF201H07H7EH4FH被加數(shù)加數(shù)數(shù)據(jù)段......程序段如下:MOVAX,BUF2 ADDBUF1,AX;低字相加MOVAX,BUF2+2 ADCBUF1+2,AX;高字相加,;包括低字的進(jìn)位76例【3-22】求兩個(gè)32位數(shù)據(jù)的和。設(shè)被加數(shù)和加數(shù)分別存放在數(shù)據(jù)段中以(SI)和(DI)起始的4個(gè)連續(xù)的存儲(chǔ)單元中,而和的低16位存放在DX寄存器中,高16位存放在AX寄存器中。低16位數(shù)據(jù)相加低16位數(shù)據(jù)相加的和存放在DX寄存器高16位數(shù)據(jù)及CF相加的和存放在AX寄存器(1)被加數(shù)的低16位→AX(2)加數(shù)的低16位+AX→AX(4)被加數(shù)的高16位→AX(5)加數(shù)的高16位+AX+CF→AX(3)AX→DX34H12H34H12H66H0FFH88H66H……SIDI7734H12H34H12H66H0FFH88H66H……SIDIAX=DX=1234H119AH119AH1234H78BDHAX=AX=AX=CF1CF0 MOVAX,[SI] ;1 ADD AX,[DI] ;2 MOVDX,AX ;3 MOVAX,[SI+2] ;4 ADC AX,[DI+2] ;578 (5)減法指令SUB該助記符是由單詞Subtraction演變而來,其一般形式為:
SUB dest,src 該指令除了執(zhí)行的是減法操作外,其它性質(zhì)與ADD完全指令相同。應(yīng)當(dāng)指出的是,SUB指令執(zhí)行后,若標(biāo)志寄存器的CF位為1,則說明是由于被減數(shù)不夠減而產(chǎn)生了借位。79 (6)帶進(jìn)位減法指令SBB該助記符是由單詞SubtractwithBorrow演變而來,其一般形式為:SBB dest,src 該指令除了執(zhí)行的是減法操作外,其它性質(zhì)與ADC完全指令相同。對(duì)于多字節(jié)的減法運(yùn)算,從第二次減法操作開始,必須使用該指令,以防“溢出”發(fā)生。BXAXSIDIBXAX—CFSUBAX,DISBBBX,SI80加、減法指令(包括增、減量指令)本身并不區(qū)分其操作數(shù)為無符號(hào)數(shù)還是有符號(hào)數(shù),這一點(diǎn)由程序員控制。為了區(qū)分無符號(hào)數(shù)和有符號(hào)數(shù)的“溢出”,程序員應(yīng)遵循以下的規(guī)則:
無符號(hào)數(shù)CF=1,溢出;CF=0,正常 有符號(hào)數(shù)OF=1,溢出;OF=0,正常81例【3-23】
x、y、z均為32位數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)wx+y+24-z,結(jié)果放在W,W+2單元中。MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+y
ADDAX,24ADCDX,0;x+y+24
SUBAX,ZSBBDX,Z+2;x+y+24-z
MOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元82 (7)比較指令CMP該助記符是由單詞Compare演變而來的。該指令比較兩個(gè)操作的大小,其一般形式為:CMP dest,src 其中兩個(gè)操作數(shù)的意義與加法指令相似。只所以將它歸為減法,是由于其實(shí)際操作為(dest)(src),但不保留差值。該指令影響上述所有6個(gè)標(biāo)志寄位。83 在CMP指令執(zhí)行后,若ZF=1(意味著相減的結(jié)果為0),則說明兩個(gè)操作數(shù)相等。若ZF0,則說明兩個(gè)操作數(shù)不相等。這時(shí),若參與比較的兩個(gè)操作數(shù)是無符號(hào)數(shù)時(shí),CF=1說明(dest)<(src);否則說明(dest)>(src)。若參與比較的兩個(gè)操作數(shù)是有符號(hào)數(shù)時(shí),問題將變得復(fù)雜化,可以分為四種情況。當(dāng)OF=0時(shí): 若SF=0,則(dest)>(src) 若SF=1,則(dest)<(src) 當(dāng)OF=1時(shí): 若SF=0,則(dest)<(src) 若SF=1,則(dest)>(src)84 (8)求補(bǔ)指令NEG該助記符是由單詞Negative演變而來的,該指令的一般形式為:NEG dest 其中:dest可以是reg或mem。該指令對(duì)操作數(shù)求補(bǔ)。該指令影響上述所有6個(gè)標(biāo)志位。例【3-24】MOVDL,78H;NEGDL;DL=01111000BDL=10001000B85例【3-25】將變量A1進(jìn)行求反和求補(bǔ)后,結(jié)果分別存入變量A2和A3中。方法一:先求反,在取補(bǔ)MOVAX,A1NOTAXMOVA2,AXINCAXMOVA3,AX方法二:先取補(bǔ),在求反MOVAX,A1NEGAXMOVA3,AXDECAXMOVA2,AX變量逐位取反+1=變量求補(bǔ)86 (1)無符號(hào)數(shù)乘法指令MUL該助記符是由單詞Multiplication演變而來。該指令的一般形式為:MUL src 其中:src可以是reg或mem,但絕不能是imm。如:MOVAX,0024H MUL05H ;錯(cuò)誤ALsrc×ALAHAXsrc×AXDX(四)乘、除指令87例【3-26】MOV DX,0000H MOV AX,23B1H ;AX=9137D MOV CX,2002H ;CX=8194D MUL CX0010001110110001
0010000000000010×0010001110110001
00100
0111
0110
0110
0111
0110
001004766762運(yùn)算結(jié)果為DX=0476H,AX=6762H,將它們組合起來即為十進(jìn)制的74868578D。0010001110110001
88(2)有符號(hào)數(shù)乘法指令I(lǐng)MUL該指令的一般形式為:IMUL src在執(zhí)行指令時(shí),1)將操作數(shù)變?yōu)樵a,并去掉符號(hào)位;2)將兩數(shù)(絕對(duì)值)相乘,3)結(jié)果的符號(hào)按兩數(shù)符號(hào)位異或運(yùn)算確定。結(jié)果(積)的符號(hào)位若為1(負(fù)數(shù)),應(yīng)在取其補(bǔ)碼。89例【3-27】MOV AX,9023H ;28637D MOV CX,0020H ;32D IMUL CX1001000000100011取反1110111111011100加1111011111101110111101111110111010000000000100000×11011111101110100000110111111011101
1000
0000
0000
1101
1111
1011
1010
0000取反11111111111100100000010001011111加111111111111100100000010001100000運(yùn)算結(jié)果為DX=0FFF2H,AX=0460H,將它們組合起來即為十進(jìn)制的916384D。90例【3-28】(AL)=0A5H,(BL)=11H(2)IMULBL;(AX)(AL)×(BL);A5×11-5B×11=-060B0F9F5H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村唱大戲合同范本
- 個(gè)人房屋銷售合同范本
- 修路增加補(bǔ)充合同范本
- 全款 房屋 合同范本
- 2024年新媒體市場深度評(píng)估及行業(yè)投資前景咨詢報(bào)告
- 萬事達(dá)合同范本
- 現(xiàn)代城市休閑商業(yè)街區(qū)的規(guī)劃策略
- 科技產(chǎn)品電商平臺(tái)的營銷實(shí)戰(zhàn)經(jīng)驗(yàn)
- pvc地板清洗合同范本
- 農(nóng)技推廣基地服務(wù)合同范本
- 咖啡店合同咖啡店合作經(jīng)營協(xié)議
- 2025年山東鋁業(yè)職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 全套電子課件:技能成就夢(mèng)想
- 2024年教育公共基礎(chǔ)知識(shí)筆記
- 2025年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 異構(gòu)數(shù)據(jù)融合技術(shù)-深度研究
- 北京市朝陽區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 《銷售合同執(zhí)行》課件
- 2025年春新外研版(三起)英語三年級(jí)下冊(cè)課件 Unit4第2課時(shí)Speedup
- 山東2024年山東經(jīng)貿(mào)職業(yè)學(xué)院第二批招聘102人歷年參考題庫(頻考版)含答案解析
- 急性呼吸窘迫綜合征的護(hù)理課件(演示)
評(píng)論
0/150
提交評(píng)論