




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第3章.教學(xué)重點(diǎn)1.8086尋址方式2.重點(diǎn)掌握常用指令功能及應(yīng)用常用傳送指令算術(shù)運(yùn)算指令〔主要是加減法〕邏輯運(yùn)算和移位指令控制轉(zhuǎn)移指令字符〔串〕輸入輸出功能調(diào)用.3.18086的尋址方式從8086的機(jī)器代碼格式入手,論述:立即數(shù)尋址方式存放器尋址方式存儲(chǔ)器尋址方式進(jìn)而熟悉8086匯編語言指令格式,尤其是其中操作數(shù)的表達(dá)方法;為展開8086指令系統(tǒng)做好準(zhǔn)備建議采用調(diào)試程序DEBUG進(jìn)行實(shí)踐.調(diào)試程序DEBUGDEBUG是常用的匯編語言級(jí)調(diào)試工具,為匯編語言程序員提供了分析指令、跟蹤程序的有效手段常用命令:-A匯編 -U反匯編-T單步執(zhí)行 -G斷點(diǎn)執(zhí)行-D數(shù)據(jù)顯示 -R存放器感性認(rèn)識(shí)因深刻而顯重要.指令的組成指令由操作碼和操作數(shù)兩局部組成操作碼說明計(jì)算機(jī)要執(zhí)行哪種操作,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的組成局部操作數(shù)是指令執(zhí)行的參與者,即各種操作的對象有些指令不需要操作數(shù),通常的指令都有一個(gè)或兩個(gè)操作數(shù),也有個(gè)別指令有3個(gè)甚至4個(gè)操作數(shù)操作碼操作數(shù).指令的操作碼和操作數(shù)每種指令的操作碼:用一個(gè)唯一的助記符表示〔指令功能的英文縮寫〕對應(yīng)著機(jī)器指令的一個(gè)二進(jìn)制編碼指令中的操作數(shù):可以是一個(gè)具體的數(shù)值可以是存放數(shù)據(jù)的存放器或指明數(shù)據(jù)在主存位置的存儲(chǔ)器地址如何指明操作數(shù)呢?.尋址方式指令系統(tǒng)設(shè)計(jì)了多種操作數(shù)的來源尋址就是尋找操作數(shù)的過程操作數(shù)采取哪一種尋址方式,會(huì)影響機(jī)器運(yùn)行的速度和效率如何尋址一個(gè)操作數(shù)對程序設(shè)計(jì)很重要.給出立即尋址方式需要的數(shù)值本身給出某些尋址方式需要的對基地址的偏移量3.1.18086的機(jī)器代碼格式表明采用的尋址方式(表1.7)1/2字節(jié)0/1字節(jié)0/1/2字節(jié)0/1/2字節(jié)操作碼modregr/m位移量立即數(shù)操作數(shù)要求:了解.標(biāo)準(zhǔn)機(jī)器代碼例如 movax,[BP+0];機(jī)器代碼是8B4600前一個(gè)字節(jié)8B是操作碼〔含w=1表示字操作〕中間一個(gè)字節(jié)46〔01000110〕是“modregr/m〞字節(jié)reg=000表示目的操作數(shù)為AXmod=01和r/m=110表示源操作數(shù)為[BP+D8]最后一個(gè)字節(jié)就是8位位移量〔D8=〕001/2字節(jié)0/1字節(jié)0/1/2字節(jié)0/1/2字節(jié)操作碼modregr/m位移量立即數(shù).其它機(jī)器代碼形式moval,05;機(jī)器代碼是B005前一個(gè)字節(jié)B0是操作碼〔隱含一個(gè)操作數(shù)AL〕,后一個(gè)字節(jié)05是立即數(shù)movax,0102H;機(jī)器代碼是B80201前一個(gè)字節(jié)B8是操作碼〔隱含一個(gè)操作數(shù)AX〕,后兩個(gè)字節(jié)0201是16位立即數(shù)〔低字節(jié)02在低地址〕操作碼操作數(shù).指令格式
操作碼操作數(shù)1,操作數(shù)2
;注釋操作數(shù)2,稱為源操作數(shù)src,它表示參與指令操作的一個(gè)對象操作數(shù)1,稱為目的操作數(shù)dest,它不僅可以作為指令操作的一個(gè)對象,還可以用來存放指令操作的結(jié)果分號(hào)后的內(nèi)容是對指令的解釋例如.傳送指令MOV的格式MOV
dest,src
;dest←srcMOV指令的功能是將源操作數(shù)src傳送至目的操作數(shù)dest,例如:MOVAL,05H ;AL←05HMOVBX,AX ;BX←AXMOVAX,[SI] ;AX←DS:[SI]MOVAX,[BP+06H] ;AX←SS:[BP+06H]MOVAX,[BX+SI] ;AX←DS:[BX+SI]演示.傳送指令MOV的功能源操作數(shù)src目的操作數(shù)dest30H30H被傳送的數(shù)據(jù).3.1.2立即數(shù)尋址方式指令中的操作數(shù)直接存放在機(jī)器代碼中,緊跟在操作碼之后〔操作數(shù)作為指令的一局部存放在操作碼之后的主存單元中〕這種操作數(shù)被稱為立即數(shù)imm它可以是8位數(shù)值i8〔00H~FFH〕也可以是16位數(shù)值i16〔0000H~FFFFH〕立即數(shù)尋址方式常用來給存放器賦值.立即數(shù)尋址指令MOVAL,05H ;AL←05HMOVAX,0102H ;AX←0102H立即尋址立即數(shù)尋址的特點(diǎn):1〕取指令時(shí),操作碼與操作數(shù)同時(shí)被取出,不需再訪問存儲(chǔ)器,可提高執(zhí)行速度2〕缺點(diǎn)是操作數(shù)在程序中是固定的,靈活性差,只適用于操作數(shù)固定的情況,如給存放器或存儲(chǔ)器變量賦初值等。例如movcx,1movax,0movx,50h.3.1.3存放器尋址方式操作數(shù)存放在CPU的內(nèi)部存放器reg中,可以是:8位存放器r8:AH、AL、BH、BL、CH、CL、DH、DL16位存放器r16:AX、BX、CX、DX、SI、DI、BP、SP4個(gè)段存放器seg:CS、DS、SS、ES.存放器尋址指令MOVAX,1234H ;AX←1234HMOVBX,AX ;BX←AX存放器尋址設(shè)DH=78H,那么執(zhí)行DECDH的結(jié)果是:DH=?存放器尋址的特點(diǎn):地址碼短、速度快,適用于存放程序中頻繁使用的操作數(shù)缺點(diǎn)是存放器數(shù)量有限.3.1.4存儲(chǔ)器尋址方式指令中給出操作數(shù)的主存地址信息〔偏移地址,稱之為有效地址EA〕,而段地址在默認(rèn)的或用段超越前綴指定的段存放器中8086設(shè)計(jì)了多種存儲(chǔ)器尋址方式1、直接尋址方式2、存放器間接尋址方式3、存放器相對尋址方式〔即變址尋址〕4、基址變址尋址方式5、相對基址變址尋址方式.直接尋址方式指令中直接給出操作數(shù)在存儲(chǔ)器中的偏移地址默認(rèn)的段地址在DS段存放器例如:MOVAX,[2000H];指令代碼:A10020功能:AX←DS:[2000H]MOVAX,ES:[2000H];AX←ES:[2000H]指令代碼:26A10020直接尋址.直接尋址方式另一種格式:用含有變量的表達(dá)式表示操作數(shù)的偏移地址,例如MOVAX,BUFA;將變量BUFA的內(nèi)容送AXMOVDX,A3+2;將數(shù)據(jù)段中偏移地址為A3+2的單元的內(nèi)容送DX舉例:假設(shè)執(zhí)行該指令前(DS)=1000H,變量A3在數(shù)據(jù)段中的定義如下,分析以上兩指令的執(zhí)行結(jié)果:.DATAA1DB0BUFADB12,13,90A3DB20,30,40.直接尋址方式直接尋址的特點(diǎn):可以直接計(jì)算有效地址,只需訪問一次存儲(chǔ)器即可取得操作數(shù),速度較快特別適合處理單個(gè)變量但直接尋址的存儲(chǔ)器范圍有限.存放器間接尋址方式存放器中存放的是操作數(shù)的偏移地址EA可用存放器有:BX、SI、DI、BP提示:當(dāng)存放器為BX、SI、DI時(shí),默認(rèn)的段地址在DS段存放器中;當(dāng)存放器為BP時(shí),默認(rèn)的段存放器是SS;也可使用段超越前綴改變。例如:MOVAX,[SI] ;AX←DS:[SI]間接尋址.存放器間接尋址方式例1:MOVAX,[SI][分析源操作數(shù)的有效地址的計(jì)算]設(shè)執(zhí)行前,(AX)=0050H,(SI)=200H,(DS)=1000H,〔10200H〕=F000H,那么指令的執(zhí)行過程如下:首先計(jì)算有效地址PA=10000H+200H=10200H然后執(zhí)行:(10200H)->AX例2:MOVAX,[BP]設(shè)執(zhí)行前,(AX)=50H,(BP)=100H,(SS)=3000H,(30100H)00FCH,分析執(zhí)行過程.存放器間接尋址方式特點(diǎn):地址碼中的存放器中的內(nèi)容位操作數(shù)的偏移地址用于存取存儲(chǔ)器中的數(shù)據(jù),方便靈活可以有效的縮短指令長度很常用.階段綜合練習(xí)練習(xí)分析前面的幾種尋址方式例題:見尋址綜合練習(xí)1.存放器相對尋址方式
〔即變址尋址〕操作數(shù)的偏移地址是存放器內(nèi)容與有符號(hào)8位或16位位移量之和,存放器可以是BX、BP、SI、DI偏移地址=BX/BP/SI/DI+8/16位位移量BX/SI/DI存放器對應(yīng)的默認(rèn)段存放器是DS,即PA=(DS)左移4位+(EA)BP存放器對應(yīng)的默認(rèn)段存放器是SS也可用段超越前綴改變.存放器相對尋址指令MOVAX,[DI+06H] ;AX←DS:[DI+06H]MOVAX,[BP+06H] ;AX←SS:[BP+06H]MOVCX,[SI-6H]MOVDX,[BX+8H]分析有效地址的計(jì)算相對尋址.存放器相對尋址指令應(yīng)用:常用于訪問數(shù)組例如:求數(shù)組BUF的前10個(gè)元素之和的程序段MOVAX,0MOVBX,0MOVCX,10LOOPA:ADDAX,[BX+BUF]INCBXDECCXJNZLOOPA.基址變址尋址方式偏移地址由基址存放器〔BX或BP〕的內(nèi)容加上變址存放器〔SI或DI〕的內(nèi)容構(gòu)成:偏移地址=BX/BP+SI/DI段地址對應(yīng)BX基址存放器默認(rèn)是DS,對應(yīng)BP基址存放器默認(rèn)是SS;可用段超越前綴改變.基址變址尋址指令MOVAX,[BX+SI]
;AX←DS:[BX+SI]MOVAX,[BP+DI] ;AX←SS:[BP+DI]MOVAX,DS:[BP+DI] ;AX←DS:[BP+DI]基址變址.相對基址變址尋址方式偏移地址是基址存放器〔BX/BP〕、變址存放器〔SI/DI〕與一個(gè)8位或16位位移量之和:偏移地址=BX/BP+SI/DI+8/16位位移量段地址對應(yīng)BX基址存放器默認(rèn)是DS,對應(yīng)BP基址存放器默認(rèn)是SS;可用段超越前綴改變.相對基址變址尋址指令MOVAX,[BX+SI+06H] ;AX←DS:[BX+SI+06H]
位移量可用符號(hào)表示
同一尋址方式有多種表達(dá)形式相對基址變址.用符號(hào)表示位移量在存放器相對尋址或相對基址變址尋址方式中,位移量可用符號(hào)表示:MOVAX,[SI+COUNT];COUNT是事先定義的變量或常量〔就是數(shù)值〕MOVAX,[BX+SI+WNUM];WNUM也是變量或常量.多種表達(dá)形式同一尋址方式可以寫成不同的形式:MOVAX,[BX][SI] ;等同于MOVAX,[BX+SI]MOVAX,COUNT[SI] ;等同于MOVAX,[SI+COUNT]MOVAX,WNUM[BX][SI] ;等同于MOVAX,WNUM[BX+SI] ;等同于MOVAX,[BX+SI+WNUM].指令操作數(shù)的表達(dá)-存放器r8——任意一個(gè)8位通用存放器AHALBHBLCHCLDHDLr16——任意一個(gè)16位通用存放器AXBXCXDXSIDIBPSPreg——代表r8或r16seg——段存放器CS/DS/ES/SS一定要熟悉噢!.指令操作數(shù)的表達(dá)-存儲(chǔ)器m8——一個(gè)8位存儲(chǔ)器操作數(shù)單元〔所有主存尋址方式〕m16——一個(gè)16位存儲(chǔ)器操作數(shù)單元〔所有主存尋址方式〕mem——代表m8或m16一定要熟悉噢!.指令操作數(shù)的表達(dá)-立即數(shù)i8——一個(gè)8位立即數(shù)i16——一個(gè)16位立即數(shù)imm——代表i8或i16dest——目的操作數(shù)src——源操作數(shù)一定要熟悉噢!.尋址方式綜合練習(xí)2見尋址綜合練習(xí)2.什么是指令系統(tǒng)計(jì)算機(jī)的指令系統(tǒng)就是指該計(jì)算機(jī)能夠執(zhí)行的全部指令的集合每種計(jì)算機(jī)都有它支持的指令集合16位8086指令系統(tǒng)是Intel80x86系列微處理器指令系統(tǒng)的根底.8086指令系統(tǒng)概述Intel8086指令系統(tǒng)共有117條根本指令,可分成6個(gè)功能組①數(shù)據(jù)傳送類指令②算術(shù)運(yùn)算類指令③位操作類指令〔含邏輯運(yùn)算指令〕④串操作類指令⑤控制轉(zhuǎn)移類指令⑥處理機(jī)控制類指令說明:重點(diǎn)掌握①~④,其他以后逐漸掌握如何學(xué)習(xí).學(xué)習(xí)指令的要點(diǎn)指令的功能——該指令能夠?qū)崿F(xiàn)何種操作。通常指令助記符就是指令功能的英文單詞或其縮寫形式指令支持的尋址方式——該指令中的操作數(shù)可以采用何種尋址方式指令對標(biāo)志的影響——該指令執(zhí)行后是否對各個(gè)標(biāo)志位有影響,以及如何影響其他方面——該指令其他需要特別注意的地方,如指令執(zhí)行時(shí)的約定設(shè)置、必須預(yù)置的參數(shù)、隱含使用的存放器等.匯編語言指令格式由4局部組成:標(biāo)號(hào):指令助記符目的操作數(shù),源操作數(shù) ;注釋
標(biāo)號(hào)表示該指令在主存中的邏輯地址
每個(gè)指令助記符就代表一種指令
目的和源操作數(shù)表示參與操作的對象
注釋是對該指令或程序段功能的說明其中,標(biāo)號(hào)、操作數(shù)、注釋根據(jù)指令的功能可選.教學(xué)提示全面而準(zhǔn)確地理解每條指令的功能和應(yīng)用,是編寫匯編語言程序的關(guān)鍵逐個(gè)展開指令.2.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令是計(jì)算機(jī)中最根本、最重要、最常使用的一類指令傳送指令把數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置除標(biāo)志存放器傳送指令外,均不影響標(biāo)志位重點(diǎn)掌握MOVXCHGXLATPUSHPOPLEA.2.1.1通用數(shù)據(jù)傳送指令3條指令MOVXCHGXLATMOVXCHGXLAT.1.傳送指令MOV〔move〕把一個(gè)字節(jié)或字的操作數(shù)從源地址傳送至目的地址MOVreg/mem,imm;立即數(shù)送存放器或主存MOV例題2.1MOVreg/mem/seg,reg;存放器送〔段〕存放器或主存例題2.2MOVreg/seg,mem;主存送〔段〕存放器例題2.3MOVreg/mem,seg;段存放器送存放器或主存例題2.5重點(diǎn).例3.1:立即數(shù)傳送moval,4 ;al←4,字節(jié)傳送movcx,0ffh ;cx←00ffh,字傳送movsi,200h ;si←0200h,字傳送movbyteptr[si],0ah;byteptr說明是字節(jié)操作movwordptr[si+2],0bh;wordptr說明是字操作注意立即數(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é)傳送MOV.例3.3:存儲(chǔ)器傳送moval,[bx]movdx,[bp] ;dx←ss:[bp]moves,[si] ;es←ds:[si]不存在存儲(chǔ)器向存儲(chǔ)器的傳送指令MOV.例3.5:段存放器傳送mov[si],dsmovax,es ;ax←esmovds,ax ;ds←ax←es對段存放器的操作有一些限制MOV.MOV指令傳送功能MOV也并非任意傳送立即數(shù)段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存儲(chǔ)器.非法傳送:兩個(gè)操作數(shù)的類型不一致例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或相反兩個(gè)操作數(shù)不能都是存儲(chǔ)器傳送指令很靈活,但主存之間的直接傳送卻不允許段存放器的操作有一些限制段存放器屬專用存放器,對他們的操作能力有限例如例如例如.兩個(gè)操作數(shù)的類型要一致絕大多數(shù)雙操作數(shù)指令,除非特別說明,目的操作數(shù)與源操作數(shù)必須類型一致,否那么為非法指令MOVAL,050AH;非法指令:050Ah為字,而AL為字節(jié)存放器有明確的字節(jié)或字類型,有存放器參與的指令其操作數(shù)類型就是存放器的類型對于存儲(chǔ)器單元與立即數(shù)同時(shí)作為操作數(shù)的情況,必須顯式指明;byteptr指示字節(jié)類型,wordptr指示字類型.兩個(gè)操作數(shù)不能都是存儲(chǔ)器8086指令系統(tǒng)不允許兩個(gè)操作數(shù)都是存儲(chǔ)單元〔除串操作指令〕,要實(shí)現(xiàn)這種傳送,可通過存放器間接實(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;非法指令:不允許段存放器間傳送.2.交換指令XCHG〔exchange〕把兩個(gè)地方的數(shù)據(jù)進(jìn)行互換存放器與存放器之間對換數(shù)據(jù)存放器與存儲(chǔ)器之間對換數(shù)據(jù)不能在存儲(chǔ)器與存儲(chǔ)器之間對換數(shù)據(jù)XCHGXCHGreg,reg/mem;reg
reg/mem例題2.7例題2.6重點(diǎn).例3.6:存放器間交換movax,1234h ;ax=1234hmovbx,5678h ;bx=5678hxchgax,bx;ax=5678h,bx=1234hxchgah,al ;ax=7856hXCHG.例3.7:存放器與存儲(chǔ)器交換xchgax,[2000h] ;字交換;等同于xchg[2000h],axxchgal,[2000h] ;字節(jié)交換;等同于xchg[2000h],al
XCHG.應(yīng)用:換碼指令執(zhí)行前:在主存建立一個(gè)字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼。表格首地址存放于BX,AL存放相對表格首地址的位移量換碼指令執(zhí)行后:將AL存放器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼3.換碼指令XLAT〔translate〕即查表轉(zhuǎn)換指令:將BX指定的緩沖區(qū)中、AL指定的位移處的一個(gè)字節(jié)數(shù)據(jù)取出賦給ALXLATXLAT ;al←ds:[bx+al]例題2.8重點(diǎn).例3.8:代碼轉(zhuǎn)換假設(shè)自數(shù)據(jù)段100h初開始存放一下數(shù)據(jù):10、20、30、40、50、90那么執(zhí)行以下指令后al的值?movbx,100hmoval,03hxlat換碼指令沒有顯式的操作數(shù),但使用了BX和AL;因?yàn)閾Q碼指令使用了隱含尋址方式——采用默認(rèn)操作數(shù)XLAT.2.1.2堆棧操作指令堆棧是一個(gè)“后進(jìn)先出FILO〞〔或說“先進(jìn)后出FILO〞〕的主存區(qū)域,位于堆棧段中;SS段存放器記錄其段地址堆棧只有一個(gè)出口,即當(dāng)前棧頂;用堆棧指針存放器SP指定棧頂是地址較小的一端〔低端〕,棧底不變第2章.堆棧和隊(duì)列堆棧:按照后進(jìn)先出(LIFO)的原那么組織的存儲(chǔ)器空間〔?!酬?duì)列:按照先進(jìn)先出(FIFO)的原那么組織的存儲(chǔ)器空間LIFOFIFO.堆棧的操作堆棧只有兩種根本操作:進(jìn)棧和出棧,對應(yīng)兩條指令PUSH和POPPUSH;進(jìn)棧指令先使堆棧指針SP減2,然后把一個(gè)字操作數(shù)存入堆棧頂部POP;出棧指令把棧頂?shù)囊粋€(gè)字傳送至指定的目的操作數(shù),然后堆棧指針SP加2重點(diǎn).第2章1.進(jìn)棧指令PUSHPUSHpushaxpush[2000h]PUSHr16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/seg.第2章2.出棧指令POPpopaxpop[2000h]POPr16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2POP.堆棧的特點(diǎn)堆棧操作的單位是字,進(jìn)棧和出棧只對字量字量數(shù)據(jù)從棧頂壓入和彈出時(shí),都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)堆棧操作遵循先進(jìn)后出原那么,但可用存儲(chǔ)器尋址方式隨機(jī)存取堆棧中的數(shù)據(jù)堆棧常用來臨時(shí)存放數(shù)據(jù)傳遞參數(shù)保存和恢復(fù)存放器例題2.11.例3.11:現(xiàn)場保護(hù)恢復(fù)pushax ;進(jìn)入子程序后pushbxpushds...popds ;返回主程序前popbxpopax.2.1.3標(biāo)志傳送指令標(biāo)志存放器傳送指令用來傳送標(biāo)志存放器FLAGS的內(nèi)容標(biāo)志位操作指令直接對CF、DF、IF標(biāo)志進(jìn)行復(fù)位或置位.1.標(biāo)志存放器傳送標(biāo)志存放器傳送指令用來傳送標(biāo)志存放器FLAGS的內(nèi)容,方便進(jìn)行對各個(gè)標(biāo)志位的直接操作有2對4條指令低8位傳送:LAHF和SAHF16位傳送:PUSHF和POPF.標(biāo)志低字節(jié)進(jìn)出AH指令LAHF;AH←FLAGS的低字節(jié)LAHF指令將標(biāo)志存放器的低字節(jié)送存放器AHSF/ZF/AF/PF/CF狀態(tài)標(biāo)志位分別送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF;FLAGS的低字節(jié)←AHSAHF將AH存放器內(nèi)容送FLAGS的低字節(jié)用AH的第7/6/4/2/0位相應(yīng)設(shè)置SF/ZF/AF/PF/CF標(biāo)志第2章.標(biāo)志存放器進(jìn)出堆棧指令PUSHF;SP←SP-2;SS:[SP]←FLAGSPUSHF指令將標(biāo)志存放器的內(nèi)容壓入堆棧,同時(shí)棧頂指針SP減2POPF;FLAGS←SS:[SP];SP←SP+2POPF指令將棧頂字單元內(nèi)容送標(biāo)志存放器,同時(shí)棧頂指針SP加2例題2.12第2章思考:將標(biāo)志存放器的內(nèi)容送ax,如何實(shí)現(xiàn)?.例3.12:置位單步標(biāo)志pushf ;保存全部標(biāo)志到堆棧popax ;從堆棧中取出全部標(biāo)志orax,0100h ;設(shè)置D8=TF=1, ;ax其他位不變pushax ;將ax壓入堆棧popf ;FLAGS←AX;將堆棧內(nèi)容取到標(biāo)志存放器.2.標(biāo)志位操作標(biāo)志位操作指令直接對CF、DF、IF標(biāo)志進(jìn)行復(fù)位或置位,常用于特定的情況對標(biāo)志位進(jìn)行設(shè)置的指令CLCSTCCMCCLDSTDCLISTI〔了解〕.進(jìn)位標(biāo)志操作指令用于任意設(shè)置進(jìn)位標(biāo)志CLC
;復(fù)位進(jìn)位標(biāo)志:CF←0STC
;置位進(jìn)位標(biāo)志:CF←1CMC
;求反進(jìn)位標(biāo)志:CF←~CF.方向標(biāo)志操作指令串操作指令中,需要使用CLD
;復(fù)位方向標(biāo)志:DF←0STD
;置位方向標(biāo)志:DF←1.中斷標(biāo)志操作指令在編寫中斷效勞程序時(shí),需要控制可屏蔽中斷的允許和禁止CLI ;復(fù)位中斷標(biāo)志:DF←0STI ;置位中斷標(biāo)志:DF←1.2.1.4地址傳送指令地址傳送指令將存儲(chǔ)器單元的邏輯地址送至指定的存放器偏移地址傳送指令LEA〔重點(diǎn)掌握〕指針傳送指令LDS和LES特別注意:不是獲取存儲(chǔ)器單元的內(nèi)容.有效地址傳送指令LEA〔loadEA〕將存儲(chǔ)器操作數(shù)的偏移地址傳送至指定的16位存放器中例題2.13LEAr16,mem;r16←mem的偏移地址EALEA重點(diǎn).例3.13:獲取偏移地址.dataxdb20hnumdb11h,33h,45h……leabx,num等價(jià)于movbx,offsetnum獲得主存單元的有效地址;不是物理地址,也不是該單元的內(nèi)容LEA.指針傳送指令〔了解〕LDSr16,mem;r16←mem,;DS←mem+2LDS指令將主存中mem指定的字送至r16,并將mem的下一字送DS存放器LESr16,mem;r16←mem,;ES←mem+2LES指令將主存中mem指定的字送至r16,并將mem的下一字送ES存放器例題2.14第2章.例3.14:地址指針傳送movwordptr[3060h],0100hmovwordptr[3062h],1450hlesdi,[3060h] ;es=1450h,di=0100hldssi,[3060h] ;ds=1450h,si=0100hmem指定主存的連續(xù)4個(gè)字節(jié)作為邏輯地址〔32位的地址指針〕,送入DS:r16或ES:r16.2.1.5輸入輸出指令〔熟悉〕8086通過輸入輸出指令與外設(shè)進(jìn)行數(shù)據(jù)交換;呈現(xiàn)給程序員的外設(shè)是端口〔Port〕即I/O地址8086用于尋址外設(shè)端口的地址線為16條,端口最多為216=65536〔64K〕個(gè),端口號(hào)為0000H~FFFFH每個(gè)端口用于傳送一個(gè)字節(jié)的外設(shè)數(shù)據(jù).輸入輸出尋址方式8086的端口有64K個(gè),無需分段,設(shè)計(jì)有兩種尋址方式直接尋址:只用于尋址00H~FFH前256個(gè)端口,操作數(shù)i8表示端口號(hào)間接尋址:可用于尋址全部64K個(gè)端口,DX存放器的值就是端口號(hào)注:對大于FFH的端口只能采用間接尋址方式.輸入指令I(lǐng)N將外設(shè)數(shù)據(jù)傳送給CPU內(nèi)的AL/AXINAL,i8;字節(jié)輸入:AL←I/O端口〔i8直接尋址〕INAL,DX;字節(jié)輸入:AL←I/O端口〔DX間接尋址〕INAX,i8;字輸入:AX←I/O端口〔i8直接尋址〕INAX,DX;字輸入:AX←I/O端口〔DX間接尋址〕IN例題2.15.例3.15:輸入字量;直接尋址,字節(jié)量輸入inal,21hmovah,alinal,20h;直接尋址,字量輸入inax,20h;間接尋址,字量輸入movdx,20hinax,dx兩段功能相同字量數(shù)據(jù)傳送實(shí)際上實(shí)現(xiàn)了連續(xù)的兩個(gè)端口地址的字節(jié)量傳送IN.輸出指令OUT將CPU內(nèi)的AL/AX數(shù)據(jù)傳送給外設(shè)OUTi8,AL;字節(jié)輸出:I/O端口←AL〔i8直接尋址〕OUTDX,AL;字節(jié)輸出:I/O端口←AL〔DX間接尋址〕OUTi8,AX;字輸出:I/O端口←AX〔i8直接尋址〕OUTDX,AX;字輸出:I/O端口←AX〔DX間接尋址〕OUT例題2.16.例3.16:輸出字節(jié)量;間接尋址,字節(jié)量輸出movdx,3fchmoval,80houtdx,alOUT.階段練習(xí)1編寫程序段并用debug調(diào)試:2.12.32.52.26〔1〕至少用2種方法〔作業(yè)〕.2.2算術(shù)運(yùn)算類指令問題:在匯編語言中,數(shù)學(xué)表達(dá)式A*B+C-12如何描述?答案:用算術(shù)運(yùn)算指令實(shí)現(xiàn)二進(jìn)制〔和十進(jìn)制〕數(shù)據(jù)的四那么運(yùn)算學(xué)習(xí)提示:注意算術(shù)運(yùn)算類指令對標(biāo)志的影響重點(diǎn)掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP熟悉:MUL/IMUL、DIV/IDIV、CBW/CWD了解:DAA/DAS、AAA/AAS/AAM/AAD.加法指令A(yù)DDADD指令將源與目的操作數(shù)相加,結(jié)果送到目的操作數(shù)ADD指令影響標(biāo)志位ADDADDreg,imm/reg/mem ;reg←reg+imm/reg/memADDmem,imm/reg ;mem←mem+imm/reg例題2.17a.例3.17a:加法運(yùn)算moval,0fbh ;al=0fbhaddal,07h ;al=02hmovwordptr[200h],4652h;[200h]=4652hmovbx,1feh ;bx=1fehaddal,bl ;al=00haddwordptr[bx+2],0f0f0h;[200h]=3742hADD.帶進(jìn)位加法指令A(yù)DCADC指令將源與目的操作數(shù)相加,再加上進(jìn)位CF標(biāo)志,結(jié)果送到目的操作數(shù)ADC指令影響狀態(tài)標(biāo)志位應(yīng)用:ADC指令主要與ADD配合,實(shí)現(xiàn)多精度加法運(yùn)算〔即多字節(jié)數(shù)相加,如雙字〕ADCADCreg,imm/reg/mem ;reg←reg+imm/reg/mem+CFADCmem,imm/reg ;mem←mem+imm/reg+CF例題2.17bTip:雙字加法中,一般用ax保存低位,dx保存高位.例3.17b:雙字加法movax,4652h ;ax=4652haddax,0f0f0h ;ax=3742h,CF=1movdx,0234h ;dx=0234hadcdx,0f0f0h ;dx=f325h,CF=0;DX.AX=02344652H +F0F0F0F0H =F3253742HADC.增量指令I(lǐng)NC〔increment〕INC指令對操作數(shù)加1〔增量〕INC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志INCINCreg/mem;reg/mem←reg/mem+1incbxincbyteptr[bx].減法指令SUB〔subtract〕SUB指令將目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)SUB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志SUBSUBreg,imm/reg/mem ;reg←reg-imm/reg/memSUBmem,imm/reg ;mem←mem-imm/reg例題2.18a.例3.18a:減法運(yùn)算moval,0fbh ;al=0fbhsubal,07h ;al=0f4h,CF=0movwordptr[200h],4652h;[200h]=4652hmovbx,1feh ;bx=1fehsubal,bl ;al=0f6hsubwordptr[bx+2],0f0f0h;[200h]=5562h,CF=1注:補(bǔ)碼運(yùn)算[X-Y]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)SUB.帶借位減法指令SBBSBB指令將目的操作數(shù)減去源操作數(shù),再減去借位CF〔進(jìn)位〕,結(jié)果送到目的操作數(shù)。SBB指令影響狀態(tài)標(biāo)志應(yīng)用:SBB指令主要與SUB配合,實(shí)現(xiàn)多精度減法運(yùn)算〔即多字節(jié)減法〕SBBSBBreg,imm/reg/mem ;reg←reg-imm/reg/mem-CFSBBmem,imm/reg ;mem←mem-imm/reg-CF例題2.18b.例3.18b:雙字減法movax,4652h ;ax=4652hsubax,0f0f0h ;ax=5562h,CF=1movdx,0234h ;dx=0234hsbbdx,0f0f0h ;dx=1143h,CF=1;DX.AX=02344652H -F0F0F0F0H =11435562HSBB注意AX、DX的使用.減量指令DEC〔decrement〕DEC指令對操作數(shù)減1〔減量〕DEC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志DECDECreg/mem;reg/mem←reg/mem-1deccxdecwordptr[si]
INC指令和DEC指令都是單操作數(shù)指令主要用于對計(jì)數(shù)器和地址指針的調(diào)整.求補(bǔ)指令NEG〔negative〕NEG指令對操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去操作數(shù),然后結(jié)果返回操作數(shù)求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加1影響標(biāo)志位用于求一個(gè)數(shù)的相反數(shù)NEGNEGreg/mem;reg/mem←0-reg/mem例題2.19.例3.19:求補(bǔ)運(yùn)算movax,0ff64hnegal;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1subal,9dh;ax=ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1negax;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1decal;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1negax;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=0NEG.比較指令CMP〔compare〕CMP指令將目的操作數(shù)減去源操作數(shù),但結(jié)果不回送目的操作數(shù)〔與SUB指令不同〕影響狀態(tài)標(biāo)志位CMPreg,imm/reg/mem ;reg-imm/reg/memCMPmem,imm/reg ;mem-imm/reg例題2.20CMP很常用.例3.20:比較AL與100
cmpal,100
;al-100 jbbelow
;al<100,跳轉(zhuǎn)到below執(zhí)行 subal,100
;al≥100, al←al-100 incah
;ah←ah+1below: ...執(zhí)行比較指令之后,可以根據(jù)標(biāo)志判斷兩個(gè)數(shù)是否相等、大小關(guān)系等CMP.2.2.3乘法指令MULr8/m8;無符號(hào)字節(jié)乘法;AX←AL×r8/m8MULr16/m16;無符號(hào)字乘法;DX.AX←AX×r16/m16IMULr8/m8;有符號(hào)字節(jié)乘法;AX←AL×r8/m8IMULr16/m16;有符號(hào)字乘法;DX.AX←AX×r16/m16例題2.21說明第2章.乘法指令的功能乘法指令分無符號(hào)和有符號(hào)乘法指令乘法指令的源操作數(shù)顯式給出,隱含使用另一個(gè)操作數(shù)AX和DX字節(jié)量相乘:AL與r8/m8相乘,得到16位的結(jié)果,存入AX字量相乘:AX與r16/m16相乘,得到32位的結(jié)果,其高字存入DX,低字存入AX乘法指令利用OF和CF判斷乘積的高一半是否具有有效數(shù)值.乘法指令對標(biāo)志的影響乘法指令影響OF和CF標(biāo)志:MUL指令——假設(shè)乘積的高一半〔AH或DX〕為0,那么OF=CF=0;否那么OF=CF=1IMUL指令——假設(shè)乘積的高一半是低一半的符號(hào)擴(kuò)展,那么OF=CF=0;否那么均為1乘法指令對其他狀態(tài)標(biāo)志沒有定義對標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測〔就是誰也不知道是0還是1〕對標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)了解.例3.21:乘法運(yùn)算moval,0b4h ;al=b4h=180movbl,11h ;bl=11h=17mulbl ;ax=Obf4h=3060;OF=CF=1,AX高8位不為0moval,0b4h ;al=b4h=-76movbl,11h ;bl=11h=17imulbl ;ax=faf4h=-1292;OF=CF=1,AX高8位含有效數(shù)字.2.2.4除法指令DIVr8/m8
;無符號(hào)字節(jié)除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余數(shù)DIVr16/m16
;無符號(hào)字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余數(shù)IDIVr8/m8 ;有符號(hào)字節(jié)除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余數(shù)IDIVr16/m16 ;有符號(hào)字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余數(shù)例題2.22說明第2章.除法指令的功能除法指令分無符號(hào)和有符號(hào)除法指令除法指令的除數(shù)顯式給出,隱含使用另一個(gè)操作數(shù)AX和DX作為被除數(shù)字節(jié)量除法:AX除以r8/m8,8位商存入AL,8位余數(shù)存入AH字量除法:DX.AX除以r16/m16,16位商存入AX,16位余數(shù)存入DX除法指令對標(biāo)志沒有定義除法指令會(huì)產(chǎn)生結(jié)果溢出.除法錯(cuò)中斷——溢出中斷當(dāng)被除數(shù)遠(yuǎn)大于除數(shù)時(shí),所得的商就有可能超出它所能表達(dá)的范圍。如果存放商的存放器AL/AX不能表達(dá),便產(chǎn)生溢出,8086CPU中就產(chǎn)生編號(hào)為0的內(nèi)部中斷——除法錯(cuò)中斷對DIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商超過8位,或者在字除時(shí)商超過16位,那么發(fā)生除法溢出對IDIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商不在-128~127范圍內(nèi),或者在字除時(shí)商不在-32768~32767范圍內(nèi),那么發(fā)生除法溢出.例3.22:除法運(yùn)算movax,0400h ;ax=400h=1024movbl,0b4h ;bl=b4h=180divbl ;商al=05h=5 ;余數(shù)ah=7ch=124movax,0400h ;ax=400h=1024movbl,0b4h ;bl=b4h=-76idivbl ;商al=f3h=-13 ;余數(shù)ah=24h=36.問題:當(dāng)被除數(shù)與除數(shù)都是8位/16位的數(shù)據(jù)時(shí),如何使用除法指令進(jìn)行運(yùn)算?措施:將被除數(shù)進(jìn)行符號(hào)擴(kuò)展.2.2.5符號(hào)擴(kuò)展指令CBW ;將AL的符號(hào)擴(kuò)展至AH;如AL的最高有效位是0,那么AH=00;AL的最高有效位為1,那么AH=FFH。AL不變CWD ;將AX的符號(hào)擴(kuò)展至DX;如AX的最高有效位是0,那么DX=00;AX的最高有效位為1,那么DX=FFFFH。AX不變什么是符號(hào)擴(kuò)展符號(hào)擴(kuò)展指令常用于獲得倍長的數(shù)據(jù)不影響標(biāo)志位例題2.23例題2.24第2章.符號(hào)擴(kuò)展的概念符號(hào)擴(kuò)展是指用一個(gè)操作數(shù)的符號(hào)位〔即最高位〕形成另一個(gè)操作數(shù),后一個(gè)操作數(shù)中擴(kuò)展后的各位是全0〔正數(shù)〕或全1〔負(fù)數(shù)〕。符號(hào)擴(kuò)展不改變數(shù)據(jù)大小對于數(shù)據(jù)64H〔表示數(shù)據(jù)100〕,其最高位D7為0,符號(hào)擴(kuò)展后高8位都是0,成為0064H〔仍表示數(shù)據(jù)100〕對于數(shù)據(jù)0f7H〔表示有符號(hào)數(shù)-9〕,其最高位D7為1,符號(hào)擴(kuò)展后高8位都是1,成為fff7H〔仍表示有符號(hào)數(shù)-9〕.例3.23:符號(hào)擴(kuò)展moval,80h ;al=80hcbw
;ax=ff80haddal,255 ;al=7fhcbw
;ax=007fh.例3.24:AX÷BXcwd
;DX.AX←AXidivbx ;AX←DX.AX÷BX對于有符號(hào)數(shù):利用符號(hào)擴(kuò)展指令得到除法指令所需要的倍長于除數(shù)的被除數(shù)對無符號(hào)數(shù):應(yīng)該采用直接使高8位或高16位清0的方法,獲得倍長的被除數(shù).2.2.6十進(jìn)制調(diào)整指令壓縮BCD碼就是通常的8421碼;它用4個(gè)二進(jìn)制位表示一個(gè)十進(jìn)制位,一個(gè)字節(jié)可以表示兩個(gè)十進(jìn)制位,即00~99非壓縮BCD碼用8個(gè)二進(jìn)制位表示一個(gè)十進(jìn)制位,只用低4個(gè)二進(jìn)制位表示一個(gè)十進(jìn)制位0~9,高4位任意,通常默認(rèn)為0十進(jìn)制數(shù)調(diào)整指令對二進(jìn)制運(yùn)算的結(jié)果進(jìn)行十進(jìn)制調(diào)整,以得到十進(jìn)制的運(yùn)算結(jié)果分成壓縮BCD碼和非壓縮BCD碼調(diào)整第2章.BCD碼〔BinaryCodedDecimal〕二進(jìn)制編碼的十進(jìn)制數(shù):一位十進(jìn)制數(shù)用4位二進(jìn)制編碼來表示8086支持壓縮BCD碼和非壓縮BCD碼的調(diào)整運(yùn)算真值 8 64二進(jìn)制編碼 08H
40H壓縮BCD碼 08H
64H非壓縮BCD碼 08H
0604H區(qū)分:壓縮BCD碼和非壓縮BCD碼.壓縮BCD碼加、減調(diào)整指令〔ADDAL,i8/r8/m8〕〔ADCAL,i8/r8/m8〕DAA;AL←將AL的加和調(diào)整為壓縮BCD碼〔SUBAL,i8/r8/m8〕〔SBBAL,i8/r8/m8〕DAS;AL←將AL的減差調(diào)整為壓縮BCD碼使用DAA或DAS指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加法或減法指令DAA和DAS指令對OF標(biāo)志無定義,按結(jié)果影響其他標(biāo)志,例如CF反映壓縮BCD碼相加或減的進(jìn)位或借位狀態(tài)第2章例題2.25a例題2.25b例題2.26.例3.25a:壓縮BCD加法moval,68h;al=68h,壓縮BCD碼表示真值68movbl,28h;bl=28h,壓縮BCD碼表示真值28addal,bl;二進(jìn)制加法:al=68h+28h=90hdaa ;十進(jìn)制調(diào)整:al=96h;實(shí)現(xiàn)壓縮BCD碼加法:68+28=96.例3.25b:壓縮BCD減法moval,68h;al=68h,壓縮BCD碼表示真值68movbl,28h;bl=28h,壓縮BCD碼表示真值28subal,bl;二進(jìn)制減法:al=68h-28h=40hdas ;十進(jìn)制調(diào)整:al=40h;實(shí)現(xiàn)壓縮BCD碼加法:68-28=40.例3.26:壓縮BCD減法movax,1234hmovbx,4612hsubal,bldas ;34-12=22,CF=0xchgal,ahsbbal,bhdas ;12-46=66,CF=1xchgal,ah ;11234-4612=6622.非壓縮BCD碼加、減調(diào)整指令〔ADDAL,i8/r8/m8〕〔ADCAL,i8/r8/m8〕AAA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 品牌推廣活動(dòng)的創(chuàng)新方法計(jì)劃
- 質(zhì)量管理體系在商業(yè)領(lǐng)域的實(shí)施案例
- 高效辦公環(huán)境中的教室布局設(shè)計(jì)
- 貴州2025年02月貴州省赤水市公開招考113名事業(yè)單位工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 高校學(xué)子眼中的西安特色小吃
- 超聲科醫(yī)學(xué)教育的國際化趨勢與挑戰(zhàn)
- 2025年02月泰安泰山區(qū)事業(yè)單位初級(jí)綜合類崗位工作人員(68人)筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 高中語文情感美文我跟一片森林打賭
- 柳州專版2025版中考?xì)v史奪分復(fù)習(xí)第02部分七下第1課隋朝的統(tǒng)一與滅亡實(shí)戰(zhàn)演練
- 跨境電商平臺(tái)醫(yī)療類產(chǎn)品運(yùn)營策略分析
- GB/T 24804-2023提高在用電梯安全性的規(guī)范
- 人教版PEP五年級(jí)英語上冊全冊課件
- 【重慶長安汽車公司績效管理現(xiàn)狀、問題及優(yōu)化對策(7600字論文)】
- 家鄉(xiāng)-延安課件
- Codesys中文編程手冊
- 教育系統(tǒng)后備干部筆試試題及參考答案
- 無人機(jī)導(dǎo)航與通信技術(shù)PPT完整全套教學(xué)課件
- 六年級(jí)奧數(shù)(學(xué)生版)
- 鋼結(jié)構(gòu)設(shè)計(jì)原理全套PPT完整教學(xué)課件
- 《植物學(xué)教學(xué)資料》第2章細(xì)胞與組織2馬煒梁版
- ISO9001-2015質(zhì)量手冊及程序文件模板
評(píng)論
0/150
提交評(píng)論