第3章80X86的指令系統(tǒng)和尋址方式_第1頁(yè)
第3章80X86的指令系統(tǒng)和尋址方式_第2頁(yè)
第3章80X86的指令系統(tǒng)和尋址方式_第3頁(yè)
第3章80X86的指令系統(tǒng)和尋址方式_第4頁(yè)
第3章80X86的指令系統(tǒng)和尋址方式_第5頁(yè)
已閱讀5頁(yè),還剩143頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本章主要內(nèi)容:數(shù)據(jù)類型80X86的尋址方式80X86的指令系統(tǒng)本章重點(diǎn):80X86尋址方式、指令系統(tǒng)第3章80x86的指令系統(tǒng)和尋址方式指令系統(tǒng)一組指令的集合

操作碼操作數(shù)...操作數(shù)指令尋址方式與數(shù)據(jù)有關(guān)的尋址方式與轉(zhuǎn)移地址有關(guān)的尋址方式第3章80x86的指令系統(tǒng)和尋址方式物理地址的形成80X86微機(jī)在其內(nèi)部定點(diǎn)處理單元微處理器和浮點(diǎn)單元FPU的支持下,可處理7種類型數(shù)據(jù):無(wú)符號(hào)二進(jìn)制數(shù)帶符號(hào)二進(jìn)制數(shù)浮點(diǎn)數(shù)BCD碼串?dāng)?shù)據(jù)ASCII碼數(shù)據(jù)指針類數(shù)據(jù)3.1數(shù)據(jù)類型80X86微機(jī)中,存儲(chǔ)器既存放數(shù)據(jù)也存放程序即指令80X86的尋址方式包括程序?qū)ぶ贩绞胶蛿?shù)據(jù)尋址方式3.280X86的尋址方式80X86指令中所需的操作數(shù)來(lái)自以下三個(gè)方面

1.操作數(shù)包含在指令中MOVAX,3069H2.操作數(shù)包含在微處理器的某個(gè)內(nèi)部寄存器中MOVAL,BH3.操作數(shù)包含在存儲(chǔ)器中MOVAX,[2000H]3.2.180X86的尋址方式80X86微機(jī)系統(tǒng)中,任何內(nèi)存單元的地址由段基址和偏移地址(又稱偏移量)組成,段基址由段寄存器提供,偏移量由以下四個(gè)基本部分組成

1.基址寄存器

2.變址(間址)寄存器

3.比例因子

4.位移量有效地址EA=基址+變址*比例因子+位移量當(dāng)采用16位尋址方式時(shí),80X86使用8位或16位的位移量,用BX或BP作基址寄存器,SI和DI變址寄存器,比例因子為1;3.2.180X86的尋址方式當(dāng)采用32位尋址方式時(shí),使用8位或16位的位移量,所有32位通用寄存器都可作為基址寄存器,除ESP外的所有通用寄存器都可作變址寄存器,并采用2、4、8幾種不同的比例因子?!?6位和32位尋址的差異地址成分16位尋址32位尋址基址寄存器BX、BP任何32位通用寄存器變址寄存器SI、DI除ESP外的任何32位通用寄存器比例因子11、2、4、8

立即尋址

MOVAX,3069H寄存器尋址

MOVAL,BH直接尋址

MOVAX,[2000H]寄存器間接尋址

MOVAX,[BX]

基址尋址MOVAX,[AX+24]變址尋址ADDAX,TABLE[SI]帶比例因子的變址尋址

MOVAX,TABLE[SI*4],7

基址變址尋址

MOVAX,[BP][DI]基址帶比例因子的變址尋址

MOVAX,[EI*4][EA]相對(duì)基址變址尋址

ADDAX,[SI][BP+00FFH]相對(duì)、比例因子變址基址尋址

MOVAX,[DI*4][BP+80H]3.2.1數(shù)據(jù)尋址方式指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用于SRC字段MOV40H,AL

*SRC和DST的字長(zhǎng)一致

MOVAH,3064H

(1)立即尋址方式*——操作數(shù)在指令中給出(2)寄存器尋址方式*—操作數(shù)在指定的寄存器中

MOVAX,BXMOVAL,BHMOVAX,3064H*

字節(jié)寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字長(zhǎng)一致MOVAH,BX*

CS不能用MOV指令改變

MOVCS,AX

例:MOVAX,[2000H]

EA=2000H,假設(shè)(DS)=3000H,那么PA=32000H*

隱含的段為數(shù)據(jù)段DS*

可使用段跨越前綴

MOVAX,ES:[2000H]*操作數(shù)地址可由變量(符號(hào)地址)表示,但要注意VALUEDB10變量的屬性MOVAH,VALUE

MOVAX,VALUEMOVAX,WORDPTRVALUE5030

32000AHAL3050(AX)=3050H直接尋址方式*(直接--可以理解為在編譯階段已經(jīng)確定的地址)—EA在基址寄存器(BX/BP)或變址寄存器(SI/DI)中

MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允許使用AX、CX、DX存放EAMOVAX,[CX]*

SRC和DST的字長(zhǎng)一致

MOVDL,[BX];[BX]指示一個(gè)字節(jié)單元MOVDX,[BX];[BX]指示一個(gè)字單元*

適于數(shù)組、字符串、表格的處理(4)寄存器間接尋址*

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量指令格式:MOVAX,COUNT[SI]或MOVAX,[COUNT+SI]

假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,則:PA=35000H

假設(shè)(35000H)=1234H,那么(AX)=1234H*適于數(shù)組、字符串、表格的處理寄存器相對(duì)尋址方式*

(變址尋址)指令格式:

MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*適于數(shù)組、字符串、表格的處理*必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合

MOVAX,[BX][BP]MOVAX,[SI][DI]有效地址=(BX)(SI)(BP)(DI)+(6)基址變址尋址方式*

基址變址尋址

MOVAX,MASK[BX][SI]

或MOVAX,MASK[BX+SI]或MOVAX,[MASK+BX+SI]

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量(7)相對(duì)基址變址尋址方式相對(duì)基址變址尋址EA=(基址寄存器)+(變址寄存器)比例因子+位移量(1)比例變址尋址方式

例:MOVEAX,COUNT[ESI4]80386新增的尋址方式(2)基址比例變址尋址方式

例:MOVECX,[EAX][EDI4]

(3)相對(duì)基址比例變址尋址方式

例:MOVEAX,TABLE[EBP][EDI4](4)帶位移量的基址變址尋址

例:addedx,[esi][ebp+00fffff0h](5)帶位移量、帶比例因子變址基址尋址

例:moveax,[edi*4][ebp+80]

段內(nèi)尋址段內(nèi)直接尋址JMP1000H

段內(nèi)間接尋址JMPBX

段間尋址

段間直接尋址JMP2500H:3600H

段間間接尋址JMPDWORDPTR[DI]3.2.2程序?qū)ぶ贩绞綗o(wú)條件轉(zhuǎn)移指令為例只要執(zhí)行無(wú)條件轉(zhuǎn)移指令JMP,就使程序轉(zhuǎn)到指定的目標(biāo)地址處,從目標(biāo)地址處開(kāi)始執(zhí)行那里的指令操作數(shù)label是要轉(zhuǎn)移到的目標(biāo)地址(目的地址、轉(zhuǎn)移地址)JMP指令分成4種類型:⑴段內(nèi)轉(zhuǎn)移、直接尋址⑵段內(nèi)轉(zhuǎn)移、間接尋址⑶段間轉(zhuǎn)移、直接尋址⑷段間轉(zhuǎn)移、間接尋址JMPlabel ;程序轉(zhuǎn)向label標(biāo)號(hào)指定的地址目標(biāo)地址的尋址方式直接尋址方式轉(zhuǎn)移地址象立即數(shù)一樣,直接在指令的機(jī)器代碼中,就是直接尋址方式間接尋址方式轉(zhuǎn)移地址在寄存器或主存單元中,就是通過(guò)寄存器或存儲(chǔ)器的間接尋址方式目標(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)移代碼段代碼段JMP目標(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)移程序員可用操作符short、nearptr

或farptr

強(qiáng)制段間轉(zhuǎn)移、直接尋址JMPfarptrlabel ;IP←label的偏移地址 ;CS←label的段地址將標(biāo)號(hào)所在段的段地址作為新的CS值,標(biāo)號(hào)在該段內(nèi)的偏移地址作為新的IP值;這樣,程序跳轉(zhuǎn)到新的代碼段執(zhí)行jmpfarptrotherseg;遠(yuǎn)轉(zhuǎn)移到代碼段2的otherseg段間轉(zhuǎn)移、間接尋址JMPfarptrmem ;IP←[mem],CS←[mem+2]用一個(gè)雙字存儲(chǔ)單元表示要跳轉(zhuǎn)的目標(biāo)地址。這個(gè)目標(biāo)地址存放在主存中連續(xù)的兩個(gè)字單元中的,低位字送IP寄存器,高位字送CS寄存器movwordptr[bx],0movwordptr[bx+2],1500hJMPfarptr[bx];轉(zhuǎn)移到1500h:0JMP段內(nèi)轉(zhuǎn)移、直接尋址JMPlabel ;IP←IP+位移量位移量是緊接著JMP指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移當(dāng)向地址增大方向轉(zhuǎn)移時(shí),位移量為正;向地址減小方向轉(zhuǎn)移時(shí),位移量為負(fù)

jmp

again

;轉(zhuǎn)移到again處繼續(xù)執(zhí)行

……again:

deccx

;標(biāo)號(hào)again的指令

……

jmp

output

;轉(zhuǎn)向output

……output:

movresult,al

;標(biāo)號(hào)output的指令段內(nèi)轉(zhuǎn)移、間接尋址JMPr16/m16

;IP←r16/m16將一個(gè)16位寄存器或主存字單元內(nèi)容送入IP寄存器,作為新的指令指針,但不修改CS寄存器的內(nèi)容jmpax ;IP←AXjmpwordptr[2000h] ;IP←[2000h]

8086和80286的操作數(shù)寬度和尋址寬度都是16位的

32位處理器的操作數(shù)寬度和尋址寬度可以是16位的,也可以是32位的。

1.W域與操作數(shù)寬度

2.默認(rèn)的操作數(shù)寬度和尋址寬度

3.指令的操作數(shù)寬度和尋址寬度前綴3.2.3操作數(shù)寬度和尋址寬度的確定

16位端口對(duì)齊于偶數(shù)地址

32位端口對(duì)齊于能被4整除的地址

I/O地址空間的尋址方式很簡(jiǎn)單,僅有兩種

1.直接尋址例:inal,32h

2.DX間接尋址例:inax,dx3.2.4I/O地址空間訪問(wèn)存儲(chǔ)器的方式默認(rèn)的段寄存器可跨越的段寄存器偏移地址取指令CS無(wú)IP堆棧操作SS無(wú)SP一般數(shù)據(jù)訪問(wèn)DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無(wú)DI注:段寄存器的使用規(guī)定3.2.5段寄存器的確定數(shù)據(jù)傳送指令算術(shù)指令

邏輯指令移位與循環(huán)移位指令位操作指令位串操作指令串操作指令與重復(fù)前綴轉(zhuǎn)移指令調(diào)用與返回指令3.380X86的指令系統(tǒng)指令的匯編格式指令的基本功能指令支持的尋址方式指令的執(zhí)行對(duì)標(biāo)志位的影響指令的特殊要求操作的上下文環(huán)境對(duì)于每一條指令重點(diǎn)關(guān)注:

通用數(shù)據(jù)傳送指令

MOV、PUSH、POP、XCHG

累加器專用傳送指令I(lǐng)N、OUT、XLAT地址傳送指令LEA、LDS、LES標(biāo)志寄存器傳送指令LAHF、SAHF、PUSHF、POPF類型轉(zhuǎn)換指令CBW、CWD3.3.1數(shù)據(jù)傳送指令:重點(diǎn)掌握

數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最重要的一種操作傳送指令也是最常使用的一類指令傳送指令把數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位重點(diǎn)掌握MOVXCHGXLATPUSHPOPLEA傳送指令:MOVDST,SRC執(zhí)行操作:(DST)(SRC)注意:*DST、SRC不能同時(shí)為段寄存器MOVDS,ES*立即數(shù)不能直接送段寄存器

MOVDS,2000H*DST不能是立即數(shù)和CS*DST、SRC不能同時(shí)為存儲(chǔ)器尋址*不影響標(biāo)志位MOVAX,DSEGMOVDS,AX1、通用數(shù)據(jù)傳送指令1)傳送指令MOV(move)把一個(gè)字節(jié)或字的操作數(shù)從源地址傳送至目的地址MOVreg/mem,imm;立即數(shù)送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存例3.1:立即數(shù)傳送moval,4 ;al←4,字節(jié)傳送movcx,0ffh ;cx←00ffh,字傳送movsi,200h ;si←0200h,字傳送movbyteptr[si],0ah;byteptr說(shuō)明是字節(jié)操作movwordptr[si+2],0bh;wordptr說(shuō)明是字操作注意立即數(shù)是字節(jié)量還是字量明確指令是字節(jié)操作還是字操作MOV例3.2:寄存器傳送movax,bx ;ax←bx,字傳送movah,al ;ah←al,字節(jié)傳送movds,ax ;ds←ax,字傳送mov[bx],al ;[bx]←al,字節(jié)傳送例3.3:存儲(chǔ)器傳送moval,[bx]movdx,[bp] ;dx←ss:[bp]moves,[si] ;es←ds:[si]不存在存儲(chǔ)器向存儲(chǔ)器的傳送指令例3.4:段寄存器傳送mov[si],dsmovax,es ;ax←esmovds,ax ;ds←ax←es對(duì)段寄存器的操作有一些限制MOV指令傳送功能MOV并非任意傳送立即數(shù)段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存儲(chǔ)器非法傳送種種兩個(gè)操作數(shù)的類型不一致例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或相反兩個(gè)操作數(shù)不能都是存儲(chǔ)器傳送指令很靈活,但主存之間的直接傳送卻不允許段寄存器的操作有一些限制段寄存器屬專用寄存器,對(duì)他們的操作能力有限兩個(gè)操作數(shù)的類型要一致絕大多數(shù)雙操作數(shù)指令,除非特別說(shuō)明,目的操作數(shù)與源操作數(shù)必須類型一致,否則為非法指令MOVAL,050AH;非法指令:050Ah為字,而AL為字節(jié)寄存器有明確的字節(jié)或字類型,有寄存器參與的指令其操作數(shù)類型就是寄存器的類型對(duì)于存儲(chǔ)器單元與立即數(shù)同時(shí)作為操作數(shù)的情況,必須顯式指明;byteptr指示字節(jié)類型,wordptr指示字類型兩個(gè)操作數(shù)不能都是存儲(chǔ)器8086指令系統(tǒng)不允許兩個(gè)操作數(shù)都是存儲(chǔ)單元(除串操作指令),要實(shí)現(xiàn)這種傳送,可通過(guò)寄存器間接實(shí)現(xiàn)movax,buffer1;ax←buffer1(將buffer1內(nèi)容送ax)movbuffer2,ax;buffer2←ax;這里buffer1和buffer2是兩個(gè)字變量;實(shí)際表示直接尋址方式要小心段寄存器的操作不允許立即數(shù)傳送給段寄存器MOVDS,100H;非法指令:立即數(shù)不能傳送段寄存器不允許直接改變CS值MOVCS,[SI] ;不允許使用的指令不允許段寄存器之間的直接數(shù)據(jù)傳送MOVDS,ES;非法指令:不允許段寄存器間傳送

進(jìn)棧指令:PUSHSRC執(zhí)行操作:(SP)(SP)–2((SP)+1,(SP))(SRC)

出棧指令:POPDST執(zhí)行操作:(DST)((SP)+1,(SP)) (SP)(SP)+2堆棧:‘先進(jìn)后出’的存儲(chǔ)區(qū),段地址存放在SS中,

SP在任何時(shí)候都指向棧頂,進(jìn)出棧后自動(dòng)修改SP。

注意:

*堆棧操作必須以字為單位。

*不影響標(biāo)志位

*不能用立即尋址方式PUSH1234H

*DST不能是CSPOPCS2)進(jìn)、出棧指令進(jìn)棧指令PUSHpushaxpush[2000h]PUSHr16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/seg出棧指令POPpopaxpop[2000h]POPr16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2堆棧的特點(diǎn)堆棧操作的單位是字,進(jìn)棧和出棧只對(duì)字量字量數(shù)據(jù)從棧頂壓入和彈出時(shí),都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)堆棧操作遵循先進(jìn)后出原則,但可用存儲(chǔ)器尋址方式隨機(jī)存取堆棧中的數(shù)據(jù)堆棧常用來(lái)臨時(shí)存放數(shù)據(jù)傳遞參數(shù)保存和恢復(fù)寄存器例:假設(shè)(AX)=2107H,執(zhí)行PUSHAX********(SP)PUSHAX執(zhí)行前(SP)********07H21H低地址

高地址PUSHAX執(zhí)行后進(jìn)棧方向(SP)********07H21HPOPBX執(zhí)行前(SP)********07H21H低地址

高地址POPBX執(zhí)行后(BX)=2107H例:POPBX出棧方向例3.5:現(xiàn)場(chǎng)保護(hù)恢復(fù)pushax ;進(jìn)入子程序后pushbxpushds...popds ;返回主程序前popbxpopax

交換指令:XCHGOPR1,OPR2執(zhí)行操作:(OPR1)(OPR2)注意:

*不影響標(biāo)志位*不允許使用段寄存器例:XCHGBX,[BP+SI]XCHGAL,BH3)交換指令XCHG把兩個(gè)地方的數(shù)據(jù)進(jìn)行互換寄存器與寄存器之間對(duì)換數(shù)據(jù)寄存器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)不能在存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)XCHGreg,reg/mem;regreg/mem3)交換指令XCHG例3.6:寄存器間交換movax,1234h ;ax=1234hmovbx,5678h ;bx=5678hxchgax,bx;ax=5678h,bx=1234hxchgah,al ;ax=7856h例3.7:寄存器與存儲(chǔ)器交換xchgax,[2000h] ;字交換;等同于xchg[2000h],axxchgal,[2000h] ;字節(jié)交換;等同于xchg[2000h],al

輸入指令I(lǐng)N(I/OCPU)

長(zhǎng)格式:INAL,PORT(字節(jié))INAX,PORT(字)執(zhí)行操作:(AL)(PORT)(字節(jié))(AX)(PORT+1,PORT)(字)短格式:INAL,DX(字節(jié))INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))(AX)((DX)+1,(DX))(字)

2、累加器專用傳送指令(只限使用AX或AL)輸出指令OUT(CPUI/O)長(zhǎng)格式:OUTPORT,AL(字節(jié))OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字節(jié))OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))((DX)+1,(DX))(AX)(字)注意:*不影響標(biāo)志位*

前256個(gè)端口號(hào)00H~FFH可直接在指令中指定(長(zhǎng)格式)*如果端口號(hào)256,端口號(hào)

DX(短格式)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:測(cè)試某狀態(tài)寄存器(端口號(hào)27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,轉(zhuǎn)ERROR處理例:Sound程序

movdx,100inal,61handal,11111100bsound:xoral,2;101out61h,al;ONOFFONmovcx,140h;脈寬(發(fā)聲時(shí)間間隔)Wait1:loopwait1decdxjnesound設(shè)備控制寄存器端口61H1/00控制其它外部設(shè)備與門(mén)放大器2號(hào)定時(shí)器門(mén)控10換碼指令執(zhí)行前:在主存建立一個(gè)字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼表格首地址存放于BX,AL存放相對(duì)表格首地址的位移量換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼3.換碼指令XLAT(translate)將BX指定的緩沖區(qū)中、AL指定的位移處的一個(gè)字節(jié)數(shù)據(jù)取出賦給ALXLAT ;al←ds:[bx+al](BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H換碼指令:XLAT或XLATOPR執(zhí)行操作:(AL)((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE指令執(zhí)行后(AL)=33H注意:

*不影響標(biāo)志位*字節(jié)表格(長(zhǎng)度不超過(guò)256)

首地址(BX)*需轉(zhuǎn)換的代碼位移量(AL)

4、地址傳送指令地址傳送指令將存儲(chǔ)器單元的邏輯地址送至指定的寄存器有效地址傳送指令LEA指針傳送指令LDS和LES注意不是獲取存儲(chǔ)器單元的內(nèi)容

有效地址送寄存器指令:LEAREG,SRC執(zhí)行操作:(REG)SRC

指針?biāo)图拇嫫骱虳S指令:LDSREG,SRC執(zhí)行操作:(REG)(SRC)(DS)(SRC+2)

相繼二字寄存器、DS

指針?biāo)图拇嫫骱虴S指令:LESREG,SRC執(zhí)行操作:(REG)(SRC)(ES)(SRC+2)

相繼二字寄存器、ES有效地址傳送指令LEA(loadEA)將存儲(chǔ)器操作數(shù)的有效地址傳送至指定的16位寄存器中LEAr16,mem;r16←mem的有效地址EA例3.7:獲取有效地址movbx,0400hmovsi,3chleabx,[bx+si+0f62h];BX=0400h+003ch+0f62h=139EH獲得主存單元的有效地址;不是物理地址,也不是該單元的內(nèi)容可以實(shí)現(xiàn)計(jì)算功能指針傳送指令LDSr16,mem;r16←mem,;DS←mem+2LDS指令將主存中mem指定的字送至r16,并將mem的下一字送DS寄存器LESr16,mem;r16←mem,;ES←mem+2LES指令將主存中mem指定的字送至r16,并將mem的下一字送ES寄存器例3.8:地址指針傳送movwordptr[3060h],0100hmovwordptr[3062h],1450hlesdi,[3060h] ;es=1450h,di=0100hldssi,[3060h] ;ds=1450h,si=0100h

mem指定主存的連續(xù)4個(gè)字節(jié)作為邏輯地址(32位的地址指針),送入DS:r16或ES:r16例:LEABX,[BX+SI+0F62H]

LDSSI,[10H]

LESDI,[BX]40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H

;(DS)=3000HLESBX,TABLE;(BX)=0040H

;(ES)=3000H注意:

*不影響標(biāo)志位*REG不能是段寄存器*SRC必須為存儲(chǔ)器尋址方式標(biāo)志送AH指令:LAHF執(zhí)行操作:(AH)(FLAGS的低字節(jié))

AH送標(biāo)志寄存器指令:SAHF執(zhí)行操作:(FLAGS的低字節(jié))(AH)

標(biāo)志進(jìn)棧指令:PUSHF執(zhí)行操作:(SP)(SP)-2((SP)+1,(SP))(FLAGS)

標(biāo)志出棧指令:POPF執(zhí)行操作:(FLAGS)((SP)+1,(SP))(SP)(SP)+2*影響標(biāo)志位5、標(biāo)志寄存器傳送指令

CBWALAX

執(zhí)行操作:若(AL)的最高有效位為0,則(AH)=00H若(AL)的最高有效位為1,則(AH)=FFH

CWDAX(DX,AX)

執(zhí)行操作:若(AX)的最高有效位為0,則(DX)=0000H若(AX)的最高有效位為1,則(DX)=FFFFH

例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意:*無(wú)操作數(shù)指令*隱含對(duì)AL或AX進(jìn)行符號(hào)擴(kuò)展*不影響條件標(biāo)志位6、符號(hào)擴(kuò)展指令

加法指令

ADD、ADC、INC

減法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV

十進(jìn)制調(diào)整指令

DAA、DAS、AAA、AAS、AAM、AAD3.3.2算術(shù)指令:

加法指令:ADDDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)

帶進(jìn)位加法指令:ADCDST,SRC執(zhí)行操作:(DST)(SRC)+(DST)+CF

加1指令:INCOPR執(zhí)行操作:(OPR)(OPR)+1注意:*除INC指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。1、加法指令例:雙精度數(shù)的加法

(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=8100H指令序列

ADDAX,CX;(1)ADCDX,BX;(2)

(1)執(zhí)行后,(AX)=7465H

CF=1OF=1SF=0ZF=0(2)執(zhí)行后,(DX)=0008HCF=0OF=0SF=0ZF=0減法指令:SUBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)帶借位減法指令:SBBDST,SRC執(zhí)行操作:(DST)(DST)-(SRC)-CF減1指令:DECOPR執(zhí)行操作:(OPR)(OPR)-1求補(bǔ)指令:NEGOPR執(zhí)行操作:(OPR)-(OPR)比較指令:CMPOPR1,OPR2執(zhí)行操作:(OPR1)-(OPR2)注意:*除DEC指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。2、減法指令

例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)wx+y+24-z,并用W,W+2單元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元

無(wú)符號(hào)數(shù)乘法指令:MULSRC帶符號(hào)數(shù)乘法指令:IMULSRC執(zhí)行操作:字節(jié)操作數(shù)(AX)(AL)*(SRC)字操作數(shù)(DX,AX)(AX)*(SRC)注意:

*AL(AX)為隱含的乘數(shù)寄存器。*AX(DX,AX)為隱含的乘積寄存器。*SRC不能為立即數(shù)。*除CF和OF外,對(duì)條件標(biāo)志位無(wú)定義。3、乘法指令乘法指令對(duì)CF/OF的影響:例:(AX)=16A5H,(BX)=0611H

(1)

IMULBL

;(AX)(AL)*(BL)

;A5*115B*11=060BF9F5

;

(AX)=0F9F5H

CF=OF=1(2)

MULBX

;(DX,AX)(AX)*(BX)

;16A5*0611=00895EF5

;

(DX)=0089H(AX)=5EF5H

CF=OF=1-128*-128<32767;-128*127>-327670,0乘積的高一半為零1,1否則MUL指令:CF,OF=0,0乘積的高一半是低一半的符號(hào)擴(kuò)展1,1否則

IMUL指令:CF,OF=1010010101011011

無(wú)符號(hào)數(shù)除法指令:DIVSRC帶符號(hào)數(shù)除法指令:IDIVSRC執(zhí)行操作:字節(jié)操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余數(shù)字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余數(shù)注意:

*AX(DX,AX)為隱含的被除數(shù)寄存器。*AL(AX)為隱含的商寄存器。*AH(DX)為隱含的余數(shù)寄存器。*SRC不能為立即數(shù)。*對(duì)所有條件標(biāo)志位均無(wú)定義。如何判別結(jié)果有效?4、除法指令例:x,y,z,v均為16位帶符號(hào)數(shù),計(jì)算(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX) 余數(shù)→(DX)(1)壓縮的BCD碼調(diào)整指令●DAA加法的十進(jìn)制調(diào)整指令●DAS減法的十進(jìn)制調(diào)整指令(2)非壓縮的BCD碼調(diào)整指令●AAA加法的ASCII碼調(diào)整指令●AAS減法的ASCII碼調(diào)整指令●AAM乘法的ASCII碼調(diào)整指令●AAD除法的ASCII碼調(diào)整指令本部分不做要求壓縮BCD運(yùn)算舉例:(1)MOVAL,BCD1

;BCD1=34H

ADDAL,BCD2

;BCD2=59H,(AL)=8DH

DAA;8DH+06H=93H

MOVBCD3,AL;BCD3=93H(2)MOVAL,BCD1;BCD1=34H

SUBAL,BCD2

;BCD2=59H,(AL)=0DBH

DAS;0DBH-60H-06H=75H

MOVBCD3,AL;BCD3=75=-25(10n’補(bǔ)碼)非壓縮BCD運(yùn)算舉例:(1)MULBL;(AX)=(AL)×(BL)=08×09

AAM;(AL)/0AH=48H/0AH→0702(2)AAD;(AX)→(AH)×0AH+(AL)=48H

DIVBL;(AL)=(AX)/(BL)=48H/4=12HAAM;(AL)/0AH=12H/0AH=0108

邏輯運(yùn)算指令

AND、OR、NOT、XOR、TEST循環(huán)、移位指令

SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR3.3.3邏輯運(yùn)算指令

3.3.4移位與循環(huán)移位指令邏輯非指令:NOTOPR*OPR不能為立即數(shù)執(zhí)行操作:(OPR)

(OPR)*不影響標(biāo)志位

邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)異或指令:XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)測(cè)試指令:TESTOPR1,OPR2

執(zhí)行操作:(OPR1)(OPR2)CFOFSFZFPFAF00***無(wú)定義

根據(jù)運(yùn)算結(jié)果設(shè)置1邏輯運(yùn)算指令例:屏蔽AL的第0、1兩位

ANDAL,0FCH例:置AL的第5位為1

ORAL,20H

例:使AL的第0、1位變反

XORAL,3例:測(cè)試某些位是0是1

TESTAL,1JZEVEN

********OR00100000**1*****

******01XOR00000011

******10

********AND11111100******00********AND000000010000000*邏輯左移SHLOPR,CNT邏輯右移SHROPR,CNT算術(shù)左移SALOPR,CNT(同邏輯左移)算術(shù)右移SAROPR,CNT

CF0

0CFCF2邏輯、算術(shù)移位指令循環(huán)左移ROLOPR,CNT循環(huán)右移ROROPR,CNT帶進(jìn)位循環(huán)左移RCLOPR,CNT帶進(jìn)位循環(huán)右移RCROPR,CNTCF

CFCFCF3循環(huán)移位注意:

*OPR可用除立即數(shù)以外的任何尋址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例*條件標(biāo)志位:

CF=移入的數(shù)值

1CNT=1時(shí),最高有效位的值發(fā)生變化0CNT=1時(shí),最高有效位的值不變移位指令:

SF、ZF、PF根據(jù)移位結(jié)果設(shè)置,AF無(wú)定義循環(huán)移位指令:

不影響SF、ZF、PF、AFOF=例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234H例:(BX)=84F0H(1)(BX)為無(wú)符號(hào)數(shù),求(BX)/2

SHRBX,1

;(BX)=4278H(2)(BX)為帶符號(hào)數(shù),求(BX)×2

SALBX,1

;(BX)=09E0H,OF=1(3)(BX)為帶符號(hào)數(shù),求(BX)/4MOVCL,2 SARBX,CL;(BX)=0E13CHMOVCL,8ROLAX,CLADDAX,BXMOVCH,4;循環(huán)次數(shù)MOVCL,4;移位次數(shù)NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F0000(SP)(3)(BX)=84F0H,把

(BX)

中的16位數(shù)每4位壓入堆棧

設(shè)置方向標(biāo)志指令

CLD、STD

串處理指令

串重復(fù)前綴(串傳送)MOVSB/MOVSWREP(串存儲(chǔ))STOSB/STOSW(串讀取)LODSB/LODSW(串比較)CMPSB/CMPSWREPE/REPZ或REPNE/REPNZ(串掃描)SCASB/SCASW

3.3.7串操作指令與重復(fù)前綴

REP執(zhí)行操作:(1)如(CX)=0則退出REP,否則轉(zhuǎn)(2)(2)(CX)(CX)-1(3)執(zhí)行MOVS/STOS/LODS(4)重復(fù)(1)~(3)與REP配合工作的MOVS?/STOS?/LODS?MOVS串傳送指令:MOVSDST,SRCMOVSB(字節(jié))MOVSW(字)例:MOVSES:BYTEPTR[DI],DS:[SI]執(zhí)行操作:

(1)((DI))←((SI))(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2

方向標(biāo)志DF=0時(shí)用+,DF=1時(shí)用-。REPMOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。源串(數(shù)據(jù)段)→目的串(附加段)執(zhí)行REPMOVS之前,應(yīng)先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串長(zhǎng)度→CX(4)建立方向標(biāo)志(CLD使DF=0,STD使DF=1)(SI)(DI)

DF=0DF=1數(shù)據(jù)段附加段(SI)(DI)

將‘personal_computer’這一字符串由數(shù)據(jù)段傳到附加段leasi,mess1leadi,mess2

movcx,17cld

repmovsb

leasi,mess1+16leadi,mess2+16movcx,17stdrepmovsbSTOSDSTSTOSB(字節(jié))STOSW(字)執(zhí)行操作:

字節(jié)操作:((DI))←(AL),(DI)←(DI)±1字操作:((DI))←(AX),(DI)←(DI)±2

例:把附加段中的10個(gè)字節(jié)緩沖區(qū)置為20Hleadi,mess2moval,20Hmovcx,10cldrepstosbleadi,mess2movax,2020Hmovcx,5cldrepstoswSTOS存入串指令:LODSSRC

LODSB(字節(jié))LODSW(字)執(zhí)行操作:字節(jié)操作:(AL)←((SI)),(SI)←(SI)±1字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不與REP聯(lián)用*源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來(lái)修改),目的串必須在附加段中*不影響條件標(biāo)志位LODS從串取指令:REPE/REPZREPNE/REPNZ

執(zhí)行操作:(1)如(CX)≠0且ZF=1(或(CX)≠0且ZF=0

)轉(zhuǎn)(2)否則退出串操作(2)(CX)←(CX)-1(3)執(zhí)行CMPS/SCAS(4)重復(fù)(1)~(3)與REPE/REPZ(REPNE/REPNZ)配合工作的

CMPS和SCAS

CMPSSRC,DSTCMPSB(字節(jié))CMPSW(字)執(zhí)行操作:兩個(gè)串進(jìn)行比較

(1)((SI))-((DI))根據(jù)比較結(jié)果置條件標(biāo)志位:相等ZF=1不等ZF=0(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2

CMPS串比較指令:

SCASDSTSCASB(字節(jié))SCASW(字)執(zhí)行操作:

字節(jié)操作:(AL)-((DI)),(DI)←(DI)±1字操作:(AX)-((DI)),(DI)←(DI)±2SCAS串掃描指令:

例:從一個(gè)字符串中查找一個(gè)指定的字符messdb‘COMPUTER’

moves,segmess;scans隱含使用擴(kuò)展段leadi,messmoval,‘T’movcx,8cldrepnescasbCOMPUTER(di)

(di)(CX)=2(di):相匹配字符的下一個(gè)地址(cx):剩下還未比較的字符個(gè)數(shù)例:比較兩個(gè)字符串,找出它們不相匹配的位置例:反向傳送leasi,mess1leadi,mess2movcx,8cldrepecmpsbleasi,mess1+7leadi,mess2+7movcx,8STdrepmovsb

無(wú)條件轉(zhuǎn)移指令JMP

條件轉(zhuǎn)移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ

循環(huán)指令LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

子程序調(diào)用和返回指令CALL、RET

中斷與中斷返回指令I(lǐng)NT、INTO、IRET3.3.8控制轉(zhuǎn)移指令

3.3.9調(diào)用與返回指令段內(nèi)直接短轉(zhuǎn)移:JMPSHORTOPR執(zhí)行操作:(IP)←(IP)+8位位移量

例:jmp20段內(nèi)直接近轉(zhuǎn)移:JMPNEARPTROPR執(zhí)行操作:(IP)←(IP)+16位位移量例:jmp100段內(nèi)間接轉(zhuǎn)移:JMPWORDPTROPR執(zhí)行操作:(IP)←(EA)

例:jmpax(寄存器間接尋址的轉(zhuǎn)移只可能是段內(nèi)轉(zhuǎn)移)段間直接遠(yuǎn)轉(zhuǎn)移:JMPFARPTROPR執(zhí)行操作:(IP)←OPR的段內(nèi)偏移地址(CS)←OPR所在段的段地址

例:jmp0ae3:3段間間接轉(zhuǎn)移:JMPDWORDPTROPR執(zhí)行操作:(IP)←(EA)(CS)←(EA+2)1、無(wú)條件轉(zhuǎn)移指令:例:jmpdwordptrbuf[bx]執(zhí)行前:ds=3000h,bx=0020h,buf=0100h,(30120)=1234h,(30122h)=5678其物理地址=30000h+0020h+0100h=30120執(zhí)行后:cs=5678,ip=1234例3.59JMPNEARPTRTABLE[BX];為段內(nèi)轉(zhuǎn)移, IP←[BX+TABLE][BX+TABLE+1]JMPFARPTRTABLE[BX];為段間轉(zhuǎn)移, IP←[BX+TABLE][BX+TABLE+1]; CS←[BX+TABLE+2][BX+TABLE+3]在16位尋址方式下,可以用WORD和DWORD來(lái)區(qū)分不帶標(biāo)號(hào)的轉(zhuǎn)移是段內(nèi)轉(zhuǎn)移還是段間轉(zhuǎn)移。例3.60JMPWORDPTR[BX];為段內(nèi)轉(zhuǎn)移,IP←[BX][BX+1]JMPDWORDPTR[BX];為段間轉(zhuǎn)移,IP←[BX][BX+1], CS←[BX+2][BX+3]例3.61DRVTBLLABELWORDDWDRV$INITDWMEDI$CHK ┇DWENTRY ┇ENTRY:┇MOVAX,SEGDRVTBLMOVDS,AXMOVSI,NUMBER;NUMBER為表中ENTRY存儲(chǔ)地址相對(duì) ;DRVTBL的偏移量JMPNEARPTRDRVTBL[SI]注意:只能使用段內(nèi)直接尋址的8位位移量(所有的條件轉(zhuǎn)移指令均為短轉(zhuǎn)移)(1)根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移

格式測(cè)試條件JZ(JE)lableZF=1JNZ(JNE)lableZF=0JS lableSF=1JNSlable

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論