第2次課 80x86的指令系統(tǒng)和尋址方式I_第1頁
第2次課 80x86的指令系統(tǒng)和尋址方式I_第2頁
第2次課 80x86的指令系統(tǒng)和尋址方式I_第3頁
第2次課 80x86的指令系統(tǒng)和尋址方式I_第4頁
第2次課 80x86的指令系統(tǒng)和尋址方式I_第5頁
已閱讀5頁,還剩115頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2次

指令系統(tǒng)和尋址方式I2013年4月2日第3章重點(diǎn)(1)

能夠正確使用以下各類指令:1)數(shù)據(jù)傳送指令;2)算術(shù)運(yùn)算指令-加法、減法、乘法、除法;3)邏輯運(yùn)算和移位指令;4)控制轉(zhuǎn)移指令;5)串處理指令;6)處理機(jī)控制指令。第3章重點(diǎn)(2)能夠根據(jù)尋址方式掌握對源操作數(shù)和目的操作數(shù)的物理地址的確定重點(diǎn)掌握算術(shù)運(yùn)算和邏輯運(yùn)算指令執(zhí)行后對狀態(tài)標(biāo)志SF,ZF,CF,OF位的置位和復(fù)位的條件,正確使用跳轉(zhuǎn)指令。能夠正確分析指令序列所完成的功能和運(yùn)行結(jié)果,靈活選用各種指令完成指定的操作。學(xué)習(xí)方法

學(xué)習(xí)時不應(yīng)單純地對各類指令進(jìn)行死記硬背,應(yīng)根據(jù)助記符的英文含義和各類指令的不同功能來靈活掌握重點(diǎn)掌握8086/8088的尋址方式和指令系統(tǒng)然后推廣到80386及后繼機(jī)型的情形,比較對照(自學(xué)與研討)0、指令系統(tǒng)概述機(jī)器指令:以二進(jìn)制代碼表示指令直接,不易讀懂匯編指令:以助記符形式表示指令易讀,需要翻譯(匯編)與CPU相關(guān)指令組成:計(jì)算機(jī)中的指令由操作碼字段和操作數(shù)字段兩部分組成指令格式:操作碼操作數(shù)1…操作數(shù)n指令成分操作碼(操作的性質(zhì))表示指令應(yīng)完成的具體操作以助記符的形式表示操作數(shù)(操作的對象)表示指令的操作對象(參與操作的對象)源操作數(shù)、目的操作數(shù)指令操作碼字段和操作數(shù)字段的表示用助記符表示操作碼,用符號或符號地址表操作數(shù)操作數(shù)字段:情況很多,也很復(fù)雜每個操作最終轉(zhuǎn)化為二進(jìn)制代碼表示操作數(shù)字段指令分類:(按操作數(shù)分)單操作數(shù)指令:操作碼目的操作數(shù)(OPRDEST)如加1操作INCDX雙操作數(shù)指令:OPRDEST,SRC如加法ADDAX,BX三操作數(shù)指令:OPRDEST,SRC,SRC1無操作數(shù):OPR

(隱含操作數(shù))如字節(jié)轉(zhuǎn)換為字CBW示例1:指令、程序初步從鍵盤輸入一個字符,然后從屏幕輸出CODESEGMENTASSUMECS:CODESTART:

MOVAH,1;鍵盤輸入

INT21H;放入ALMOVDL,AL;顯示內(nèi)容

MOVAH,2;設(shè)功能

INT21H;顯示

MOVAH,4CHINT21HCODEENDSENDSTART;返回;DOS匯編程序書寫注意事項(xiàng)字母大小寫不區(qū)分分號“;”所在行后面是注釋符號:用字符A~Z,a~z,數(shù)字0~9專用字符?,點(diǎn).,@,下劃線_,$標(biāo)識符用上述符號構(gòu)成,第一個不能為數(shù)字,有效長31保留字不要用于變量或標(biāo)號變量或標(biāo)號的定義只許出現(xiàn)1次程序中涉及的操作數(shù)與尋址段地址:datarea

段寄存器:DS寄存器:AX、BX、CX、AH、DL 混合形式:str[BX]符號地址:Again、STR 數(shù)字:8、2、4CHDS與AX:傳入數(shù)據(jù)作用:CX與8:傳入數(shù)據(jù)8 BX與0:傳入數(shù)據(jù)0AH與2::傳入數(shù)據(jù)2,設(shè)置功能DL與str[BX]:傳入數(shù)據(jù)BX:自增 CX:自減Again:標(biāo)號地址 AH與4CH:傳入數(shù)據(jù)4CH3.1.1與數(shù)據(jù)有關(guān)的尋址方式8086/80286系列立即尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址基址變址尋址相對基址變址尋址80386及后繼機(jī)型比例變址尋址基址比例變址尋址相對基址比例變址尋址

3.180x86的尋址方式

尋址方式及操作數(shù)類型尋找指令中所需操作數(shù)的方法所需的操作數(shù)立即數(shù)操作數(shù)寄存器操作數(shù)存儲器操作數(shù)輸入/輸出端口操作數(shù)1、立即尋址操作數(shù):直接存放在指令中,緊跟在操作碼之后,作為指令的一部分存放在代碼段里8086/8088:立即數(shù)是8或16位常數(shù)80386:立即數(shù)可以是8或32位常數(shù)僅用作源操作數(shù)的尋址如MOVAL,5==>(AL)=05H立即數(shù)的高位字(節(jié))放在高地址中,低位字(節(jié))放在低地址中立即尋址舉例MOVCX,2A50H==>(CX)=3064H

即(CX)=(CH,CL)=(30H,64H)MOVEAX,12345678H==>(EAX)=12345678H…6430…MOVCX,8被編譯成二進(jìn)制代碼B90800MOVAH,2被編譯成二進(jìn)制代碼B402MOVAH,4CH被編譯成二進(jìn)制代碼B44C…B90008…MOVCX,2A50H注意下列指令錯MOVAH,500MOV50,AL不能直接給段寄存器和標(biāo)志寄存器賦予立即數(shù)。下面的指令是錯誤的:

MOVDS,1250H2.寄存器尋址指令指定寄存器號/名稱,操作數(shù)在寄存器中對16位操作數(shù):寄存器用AX、BX、CX、DX、SI、DI、SP和BP對8位操作數(shù):寄存器用AL、AH、BL、BH、CL、CH、DL和DH對32位操作數(shù):寄存器用EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP寄存器號操作數(shù)從寄存器取寄存器寄存器尋址舉例設(shè)(AX)=3064H,(BX)=1234H,執(zhí)行MOVAX,BX==>(AX)=1234H,(BX)保持不變設(shè)(ECX)=0123454H,(EBX)=12349876H,執(zhí)行

MOVECX,EBX==>(ECX)=12349876H,(EBX)保持不變注意寄存器尋址時要弄清針對哪個寄存器而言源、目的寄存器是什么?MOVAL,BX對嗎?MOVAX,BH對嗎?MOVAL,AH對嗎?源寄存器和目的寄存器的位數(shù)必須一致。3.直接尋址所需的操作數(shù)在存儲器中。指令中直接給出操作數(shù)所在單元的有效地址(段內(nèi)偏移地址),它放在操作碼之后有效地址EA:操作數(shù)的偏移地址EA操作數(shù)段基地址+存儲器操作數(shù):(1)如操作數(shù)在數(shù)據(jù)段中,則:操作數(shù)物理地址=16d

(DS)+EA(2)如數(shù)據(jù)存放在數(shù)據(jù)段以外的其他段中,此時應(yīng)在指令中指定段跨越前綴直接尋址舉例如MOVDX,A被編譯成8B1609

又如右圖,如(DS)=3000H執(zhí)行MOVAX,[2000H]結(jié)果為:(AX)=3050H符號地址與段跨越前綴以下兩指令等效MOVAX,VALUEMOVAX,[VALUE]當(dāng)VALUE在附加段中,應(yīng)指定段跨越前綴:

MOVAX,ES:VALUE或MOVAX,ES:[VALUE]規(guī)定:雙操作數(shù)指令除立即方式外必須有一個操作數(shù)使用寄存器方式。MOVVAL1,VAL2錯所需的操作數(shù)在存儲器中。操作數(shù)所在單元的有效地址存放在寄存器中,指令中給出寄存器的名稱僅限于BX、BP、SI、DI-基址/變址寄存器中4.寄存器間接尋址EA操作數(shù)段基地址+存儲器寄存器MOVAX,[BX]例:如果(DS)=2000H,(BX)=1000H,執(zhí)行MOVAX,[BX]則因物理地址=20000+1000=21000H,結(jié)果為:(AX)=50A0H…A050…000010002000H:寄存器間接尋址(續(xù))對16位尋址,寄存器可為BX、BP、SI、DI對32位尋址,寄存器可為:EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI注意用相對應(yīng)的默認(rèn)段寄存器寄存器間接尋址物理地址(1)16位寄存器:指令如MOVAX,[SI]指令中指定的寄存器BX、SI、DI,則操作數(shù)在現(xiàn)行數(shù)據(jù)段中,用段寄存器DS,

物理地址=16dx(DS)十(BX)或物理地址=16dx(DS)十(SI)或物理地址=16dx(DS)十(DI)指令中指定BP寄存器,操作數(shù)在堆棧段中,用段寄存器SS,物理地址=16d

(SS)十(BP)練習(xí)如果(DS)=4000H,(SS)=3000H,(BP)=2000H(BX)=3000H,(32000H)=1234H,(42000H)=5678H,(53000H)=9876H,(ES)=5000H,執(zhí)行MOVAX,[BP]結(jié)果為:(AX)=?注:指令中也可指定段跨越前綴來取得其他段中的數(shù)據(jù)。如:MOVAX,ES:[BX]5.寄存器相對尋址所需的操作數(shù)在存儲器中操作數(shù)的有效地址是一個基址或變址寄存器的內(nèi)容和指令中指定的8位、16位、32位位移量之和地址操作數(shù)段基地址+存儲器寄存器位移量+EA例3.9MOVAX,COUNT[SI]下列兩指令等價:MOVAX,COUNT[SI]MOVAX,[COUNT+SI]例:COUNT=3000H,設(shè)(DS)=3000H,(SI)=2000H,這里COUNT為16位位移量的符號地址。對指令MOVAX,COUNT[SI]源操作數(shù)物理地址30000+2000+3000=35000H執(zhí)行結(jié)果是:(AX)=1234HMOVAX,COUNT[SI]執(zhí)行圖8086/8088:有效地址計(jì)算(1)8086/8088物理地址計(jì)算(1)8086/8088:物理地址=16dx(DS)+(BX)+8位位移量或(SI)或16位位移量或(DI)或物理地址=16dx(SS)+(BP)+8位位移量或16位位移量6.基址變址尋址所需的操作數(shù)在存儲器中。操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容之和兩個寄存器均由段與寄存器間的默認(rèn)關(guān)系確定例3.10:

MOVAX,[BX][DI](也可寫成:MOVAX,[BX+DI])基址變址尋址(圖例)基址值操作數(shù)段基地址+存儲器基址寄存器變址值+變址寄存器EA基址變址尋址物理地址8086/8088基址寄存器為BX時,段寄存器使用DS基址寄存器為BP時,段寄存器則用SS物理地址=16d

(DS)+(BX)+(SI)

或(DI)物理地址=16d

(SS)+(BP)+(SI)

或(DI)這種尋址方式同樣適用于數(shù)組或表格處理MOVAX,[BX][DI]操作圖設(shè)(DS)=2100H,(BX)=0158H,(DI)=10A5H基址變址尋址(續(xù))段跨越前綴時的格式為:MOVAX,ES:[BX][SI]設(shè)(DS)=4000H,(SS)=3000H,(ES)=5000H,(SI)=2000H,(BX)=3000H,(32000H)=1234H,(42000H)=5678H,(53000H)=9876H,(55000H)=56A0H求(AX)=?7.相對基址變址尋址操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容和一個位移量之和基址值操作數(shù)段基地址+存儲器基址寄存器變址值+變址寄存器EA位移量相對基址變址尋址物理地址例3.11MOVAX,MASK[BX][SI]8086/8088:當(dāng)基址寄存器為BX時,使用DS為段寄存器當(dāng)基址寄存器為BP時,使用SS為段寄存器物理地址=16d

(DS)+(BX)+(SI)+8位位移量或(DI)或16位位移量或物理地址=16d

(SS)+(BP)+(SI)+8位位移量或(DI)或16位位移量

例3.11MOVAX,MASK[BX][SI]設(shè)(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H,小結(jié)16/32位尋址時有效地址四種的組成:位移量、基址寄存器、變址寄存器、比例因子默認(rèn)段與寄存器的選擇8086有效地址的求法:基址+變址+位移量物理地址的求法:掌握16位尋址8.比例變址尋址-自學(xué)有效地址:是一個變址寄存器的內(nèi)容乘以指令中指定的比例因子和位移量之和(32位)(變址x比例因子)+位移量因子為2、4、8例:MOVEAX,COUNT[ESI*4],(ESI)=3;例:MOVECX,TABLE[EDX*2];(EDX)=2;9.基址比例變址尋址-自學(xué)有效地址:是一個基址寄存器和一個變址寄存器的內(nèi)容乘以指令中指定的比例因子之和基址+(變址x比例因子)例:MOVEAX,[EBX][EDI*4]10.相對基址比例變址尋址-自學(xué)有效地址:是一個基址寄存器和一個變址寄存器的內(nèi)容乘以指令中指定的比例因子和位移量之和基址+(變址x比例因子)+位移量例:MOVEAX,TABLE[EBX][EDI*4]編程舉例從鍵盤輸入2個一位數(shù),求他們的和,并存放在變量sum中。DatareasegmentsumDB?datareaendscodesegment;定義代碼段

assumeCS:code,DS:datareastart:

MOVAX,datareaMOVDS,AXMOVAH,1INT21HSUBAL,30H

MOVBL,ALMOVAH,1INT21HSUBAL,30HADDAL,BLMOVSUM,AL

MOVAH,4CHINT21HCodeENDSENDstart;鍵盤輸入鍵盤輸入;轉(zhuǎn)換;另存;轉(zhuǎn)換;相加;保存尋址方式總結(jié)16/32位尋址方式有效地址組成:位移量、基址寄存器、變址寄存器、比例因子有效地址:

EA=基址值+(變址值*比例因子)+位移量物理地址求法:(段基地址)*16d+EA注意寄存器的對應(yīng)使用數(shù)據(jù)定義及存儲器分配3.1.2與轉(zhuǎn)移地址有關(guān)的尋址方式:延后一周控制轉(zhuǎn)移指令初步循環(huán)程序的結(jié)構(gòu)形式條件轉(zhuǎn)移指令JZOPR(或JEOPR)結(jié)果為零(或相等),ZF=1,則跳轉(zhuǎn)。JNZOPR(或JNEOPR)結(jié)果不為零(或不相等),ZF=0,則轉(zhuǎn)移。JSOPR結(jié)果為負(fù),SF=l,則轉(zhuǎn)移JNSOPR結(jié)果為正,SF=0,則轉(zhuǎn)移JOOPR

溢出,OF=1,則轉(zhuǎn)移JNOOPR不溢出,OF=0,則轉(zhuǎn)移JP(或JPE)OPRJP(或JPE)奇偶位為1,PF=l,則轉(zhuǎn)移。JNP(或JPO)奇偶位為0,PF=0,則轉(zhuǎn)移。JB(或JNAE,JC)低于;或者不高于或等于;或進(jìn)位為1,CF=1,則轉(zhuǎn)移。JNB(或JAE,JNC)不低于,或者高于或等于,或進(jìn)位為零,CF=0,則轉(zhuǎn)移。按帶符號數(shù)比較結(jié)果轉(zhuǎn)移JL(或JNGE)小于,或者不大于或者等于則轉(zhuǎn)移。格式:JL(或JNGE)OPR測試條件:SF

OF=1JNL(或JGE)不小于,或者大于或等于則轉(zhuǎn)移。格式:JNL(或JGE)OPR測試條件,SF

OF=0JLE(或JNG)小于或等于,或者不大于則轉(zhuǎn)移。格式:JLE(或JNG)OPR測試條件,(SF

OF)∨ZF=1JNLE(或JG)不小于或等于,或者大于則轉(zhuǎn)移。格式:JNLE(或JG)OPR測試條件,(SF

OF)∨ZF=0舉例例1:求數(shù)據(jù)區(qū)中變量為array的n個字節(jié)數(shù)據(jù)的和,并把和存放于sum中。例2:輸出數(shù)據(jù)區(qū)中一個字符串“Hello,world!”,用dos功能調(diào)用2.絕對跳轉(zhuǎn)JMP簡介跳轉(zhuǎn)方式與范圍:段內(nèi)、跨段1.段內(nèi)直接尋址2.段內(nèi)間接尋址3.段間直接尋址4.段間間接尋址格式:JMP地址地址的書寫有多種如JMPnext;next為一個標(biāo)號JMParray[BX];array為數(shù)組變量名跳轉(zhuǎn)的幾個例子JMPSHORTADDR1JMPNEARPTRADDR2JMPTABLE[BX]JMPFARPTRADDR3JMPDWORDPTR[AGAIN+BX]JMPBXJMP[BX+DI]3.2指令的執(zhí)行時間-自學(xué)

一條指令的執(zhí)行時間是取指令、取操作數(shù)、執(zhí)行指令及傳送結(jié)果各個階段所需時間的總和指令的基本執(zhí)行時間因指令的不同而異當(dāng)需要訪問存儲器取得操作數(shù)時還需要考慮計(jì)算有效地址EA所需要的時間機(jī)器語言指令的組成

段前綴、操作碼、操作數(shù)、字/字節(jié)、寄存器…信息段前綴字節(jié)(8位),3、4位(SEG)分別表示4個段前綴,其它位表示段前綴標(biāo)志

SEGPIXOPCODEMODEData/DispDataDataData/Disp段前綴操作碼尋址方式數(shù)據(jù)/偏移量數(shù)據(jù)/偏移量數(shù)據(jù)數(shù)據(jù)指令的長度為1~6個字節(jié)機(jī)器語言指令的組成操作碼字節(jié):一個字節(jié),或加下一個字節(jié)的3位。高6位是操作碼,它來自于機(jī)器指令表尋址方式字節(jié):第二個字節(jié)表示尋址方式及有無位移量,mod域與r/m域組合,表示指令的另一個尋址方式Mod=00存儲器尋址,無偏移量

01存儲器尋址,8位偏移量

10存儲器尋址,16位偏移量

11寄存器尋址modregr/m233MOVSP,BX指令編碼MOVWordptr[BX+2100H],0FA50HPTR是類型屬性操作符Wordptr指向字?jǐn)?shù)據(jù),Byteptr指向字節(jié)數(shù)據(jù)有強(qiáng)制類型轉(zhuǎn)換成分3.3指令系統(tǒng)指令系統(tǒng)可分為6組:數(shù)據(jù)傳送指令算術(shù)指令邏輯指令控制轉(zhuǎn)移指令串處理指令處理機(jī)控制指令3.3.1數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令累加器專用傳送指令地址傳送指令標(biāo)志寄存器傳送指令類型轉(zhuǎn)換指令數(shù)據(jù)傳送指令數(shù)據(jù)傳送的類型:字/字節(jié)類型傳送寄存器←→寄存器寄存器←→存儲器累加器←→I/O端口1.通用數(shù)據(jù)傳送指令傳送:MOV ;一般傳送MOVSX、MOVZX ;特殊進(jìn)棧:PUSH ;一般進(jìn)棧PUSHA、PUSHAD ;所有Reg按序進(jìn)棧出棧:POP ;一般出棧POPA、POPAD ;所有Reg按序出棧XCHG交換MOV傳送指令格式為:MOVDST,SRC

執(zhí)行操作,(DST)

(SRC)

其中DST表示目的操作數(shù),SRC表示源操作數(shù)MOV指令不影響標(biāo)志位。MOV指令傳送方式MOV指令的機(jī)器語言的7種格式MOVmem/regl,mem/reg2;(mem,mem)錯MOVreg,dataMOVac,mem

Mov

mem,acMOVsegreg,mem/reg

MOVmem/reg,segreg

MOVmem/reg,dataMem:存儲器,reg:寄存器,ac:累加器Data:數(shù)據(jù),segreg:段寄存器MOV規(guī)則立即數(shù)不能作目的操作數(shù)DEST立即數(shù)不能傳至段寄存器存儲器之間不能交互(雙操作數(shù)時)(串除外),即:不允許在兩個存儲單元之間直接傳送數(shù)據(jù)。段寄存器之間不能交互CS不能作為目的操作數(shù)DESTIP不能參與傳送DEST和SRC的類型必須一致注意錯誤指令MOVDS,32543DMOVDS,[32543H]MOVDS,DATA ;如DATA為段名注意:如DATA為變量名或標(biāo)號地址,則指令MOVDS,DATA是正確的MOVCS,AXMOVSS,DSMOV[SI],TABLEMOV舉例

例:DATA1、data為字?jǐn)?shù)據(jù)變量名MOVAX,DATA1MOVAX,DXMOVSI,[DI]MOVAX,-32543DMOVDS,BXMOVDATA,DSMOVAX,DSMOVAX,CSMOVSX--符號擴(kuò)展傳送MOVSXDST,SRC執(zhí)行操作,(DST)

符號擴(kuò)展(SRC)SRC的位數(shù)比DST小符號擴(kuò)展方法:按SRC的最高位定最高位1,則擴(kuò)展位全1;最高位0,則擴(kuò)展位全0不影響標(biāo)志位MOVZX--零擴(kuò)展傳送MOVZXDST,SRC執(zhí)行操作,(DST)

零擴(kuò)展(SRC)擴(kuò)展方法:高位擴(kuò)零不影響標(biāo)志位例設(shè)(AL)=96H,(BH)=7AH分別執(zhí)行下列指令后,求CX內(nèi)容MOVCX,AL;錯MOVSXCX,ALMOVZXCX,ALMOVCX,BH;錯MOVSXCX,BHMOVZXCX,BHPUSH/POP字操作,針對棧操作,先進(jìn)后出(FILO)16位操作數(shù)(8086)通用寄存器段寄存器(CS不能用于POP)存儲器SP指向棧頂?shù)撞扛叩刂?頂部低地址PUSH進(jìn)棧指令格式為PUSHSRC執(zhí)行操作:16位:

(SP)

(SP)-2

((SP)+1,(SP))

(SRC)32位:

(ESP)

(ESP)-4

((ESP)+3,(ESP)+2,(ESP)+1,(ESP))

(SRC)POP出棧指令格式為

POPDST執(zhí)行操作16位:(DST)

((SP)+1,(SP))

(SP)

(SP)+232位:

(DST)

((SP)+3,(SP)+2,(SP)+1,(SP))(SP)

(SP)+4例:進(jìn)棧與出棧例1:設(shè)(SP)=3015H,(AX)=2107H求執(zhí)行指令PUSHAX后,AX及SP的值例2:設(shè)(SP)=3015H,(AX)=1234H求執(zhí)行指令POPAX后,AX及SP的值PUSHAX執(zhí)行情況301530153013POPAX執(zhí)行情況301530153017注意SP的內(nèi)容在任何時候都指向當(dāng)前的棧頂堆棧的存取必須以字為單位(16位機(jī))、用SP;或以雙字為單位(32位機(jī))、用ESP這兩條堆棧指令不影響標(biāo)志位POP指令不允許用CS寄存器,POPCS錯286機(jī)型起,PUSH45H成立,但程序中需指明,如.286或.386等其他PUSH、POPPUSHA:按序壓入8個16位寄存器內(nèi)容到棧PUSHAD:按序壓入8個32位寄存器內(nèi)容到棧POPA:從棧彈出8個數(shù)據(jù)到8個16位寄存器POPAD:從棧彈出8個數(shù)據(jù)到8個32位寄存器注意壓入、彈出次序,及SP變化序:AXCXDXBXSPBPSIDI出棧次序相反XCHG交換指令格式為

XCHGOPRl,OPR2執(zhí)行操作:(OPRG1)←→(OPR2)8位/16位操作數(shù)交換:寄存器←→寄存器;寄存器←→存儲器段寄存器不能參與OPRl、OPR2至少一個是寄存器練習(xí)分析下面程序段,回答指定問題

MOVAX,O123HMOVBX,0321HPUSHAXPUSHBXPOPAXPOPBX問AX=

,BX=

。例假設(shè)(DS)=1000H,(SS)=4000H,(SP)=100H,(BX)=2100H,(12100)=00A8H,指出連續(xù)執(zhí)行下列各條指令后,出現(xiàn)的有關(guān)寄存器、存儲單元以及堆棧的情況。

PUSH

DS

PUSH

BX

PUSH

[BX]

POP

DI

POP

WORDPTR[DI+2]

POP

DSXCHG使用舉例1例:MOVAX,5678H;(AX)=5678HMOVBX,0FFFFH;(BX)=0FFFFHXCHGAX,BX;執(zhí)行后(AX)=0FFFFH,(BX)=5678HXCHG的使用舉例2例已知(AX)=6634H,(BX)=0F24H,(SI)=0012H,(DS)=1200H,(12F36H)=2500H,寫出下列指令執(zhí)行的結(jié)果。

XCHG

AX,[BX+SI];執(zhí)行前:(AX)=6634H,(12F36H)=2500H

;執(zhí)行后:(AX)=2500H,(12F36H)=6634HH2.累加器專用傳送指令I(lǐng)N:輸入(I/O

CPU)OUT:輸出(CPU

I/O)以后介紹IN與OUT的用法XLAT:換碼XLAT:換碼格式為:XLATOPR或XLAT功能:查表,將(BX)為首址/表首,以(AL)為表內(nèi)偏移值(自變量),對應(yīng)的存儲單元中的數(shù)據(jù)送AL寄存器,即([BX+AL])→AL。執(zhí)行的操作:16位:(AL)←((BX)+(AL))32位:

(AL)←((EBX)+(AL))操作針對字節(jié)表格,首地址放入BX或EBX不影響標(biāo)志位

XLAT換碼舉例例(BX)=0040H,(AL)=0FH,(DS)=F000H

執(zhí)行XLATF0000+0040+0F=0F004FH的內(nèi)容2CH送AL問題在數(shù)據(jù)區(qū)的變量array開始的若干個字節(jié)中存放字節(jié)數(shù)據(jù),后面接著一個字節(jié)變量sum?,F(xiàn)要求將array中的數(shù)據(jù)相加,和存放在sum中。Datasegment Arraydb100,3,5,8,12h,9,125,0a9h,56h,200 Sumdb?Dataends如換為字?jǐn)?shù)據(jù),又該如何?3.地址傳送指令-延后

LEA:有效地址送寄存器LDS:指針?biāo)图拇嫫骱虳SLES:指針?biāo)图拇嫫骱虴SLFS:指針?biāo)图拇嫫骱虵SLGS:指針?biāo)图拇嫫骱虶SLSS:指針?biāo)图拇嫫骱蚐SLEAREG,SRCLDSREG,SRCLESREG,SRCLFSREG,SRCLGSREG,SRCLSSREG,SRC4.標(biāo)志寄存器傳送指令LAHF:標(biāo)志送AHSAHF:AH送標(biāo)志寄存器PUSHF/PUSHFD:標(biāo)志進(jìn)棧POPF/POPFD:標(biāo)志出棧注:隱含操作數(shù);影響標(biāo)志位除了SAHF/POPF外,均不影響FLAGSLAHF與SAHFLAHF:標(biāo)志送AH指令格式為:

LAHF執(zhí)行的操作:(AH)←(FLAGS的低字節(jié))

目的:取出低字節(jié)標(biāo)志位SAHFAH送標(biāo)志寄存器指令格式為:SAHF執(zhí)行的操作:(FLAGS的低字節(jié))←(AH)

目的:修改低字節(jié)標(biāo)志位例:設(shè)(FLAGS)=0485H,(AX)=1234H,執(zhí)行指令:LAHF,問AX=?PUSHF/PUSHFD標(biāo)志進(jìn)棧格式為:PUSHF執(zhí)行的操作:(SP)←(SP)-2((SP)+1,(SP))←(FLAGS)設(shè)(FLAGS)=9A78H123456789ABCDE操作前SP16位

SP操作后

123456D334BCDEPUSHFD格式為:PUSHFD

執(zhí)行的操作:(ESP)←(ESP)-4((ESP)+3,(ESP)+2,(ESP)+1,(ESP))←(FLAGSand0FCFFFFH)清除VM、RF位123456789ABCDE操作前ESP32位

操作后

1258A3D334BCDEESPPOPF標(biāo)志出棧指令

格式為:POPF執(zhí)行的操作:(FLAGS)←((SP)+1,(SP))(SP)←(SP)+2格式為:POPFD執(zhí)行的操作:(FLAGS)←((ESP)+3,(ESP)+2,(ESP)+1,(ESP))(ESP)←(ESP)+4類型轉(zhuǎn)換指令CBW字節(jié)轉(zhuǎn)換為字指令CWD/CWDE字轉(zhuǎn)換為雙字指令CDQ雙字轉(zhuǎn)換為4字指令BSWAP字節(jié)交換指令CBW字節(jié)轉(zhuǎn)換為字指令符號擴(kuò)展方法:仿照MOVSXDST,SRC中(SRC)的符號擴(kuò)展方法僅對AL擴(kuò)展到AX即如(AL)的最高有效位為0,則(AH)=00;如(AL)的最高有效位為1,則(AH)=0FFHCWDE字轉(zhuǎn)換為雙字指令擴(kuò)展方法類似于CBW僅對AX擴(kuò)展到EAXCWD字轉(zhuǎn)換為雙字指令格式:CWD僅對AX符號擴(kuò)展到(DX,AX)執(zhí)行的操作:AX的內(nèi)容符號擴(kuò)展到DX。即如(AX)的最高有效位為0,則(DX)=0000;如(AX)的最高有效位為1,則(DX)=0FFFFH。CDQ雙字轉(zhuǎn)換為4字指令擴(kuò)展方法類似于CWD僅對EAX符號擴(kuò)展到(EDX,EAX)BSWAP字節(jié)交換指令格式:BSWAPr32僅對486及后繼機(jī)型,r32為32位寄存器例:設(shè)(EDX)=12345678H,則執(zhí)行BSWAPEDX后,(EDX)=78563412H3.3.2算術(shù)指令算術(shù)運(yùn)算指令:包括二進(jìn)制運(yùn)算及十進(jìn)制運(yùn)算指令十進(jìn)制運(yùn)算指令:-自學(xué)與討論壓縮BCD碼十進(jìn)制調(diào)整指令非壓縮BCD碼十進(jìn)制調(diào)整指令1.加法指令

ADD:加法,ADDDST,SRC執(zhí)行的操作:(DST)←(SRC)+(DST)

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

INC:加1,INCOPR執(zhí)行的操作:(OPR)←(OPR)+1

XADD:交換并相加,ADDDST,SRCDST放SRC,和放DST條件標(biāo)志位最主要:CF、ZF、SF、OF四位CF位:有進(jìn)位,CF=l;無進(jìn)位時CF=0OF位:若兩個操作數(shù)的符號相同,而結(jié)果的符號與之相反時OF=1;否則OF=0CF位可表示無符號數(shù)的溢出

OF位表示帶符號數(shù)的溢出8位二進(jìn)制數(shù):無符號數(shù)為0~255,帶符號數(shù)為-128~+12716位二進(jìn)制數(shù):無符號數(shù)為0~65535,帶符號數(shù)為-32768~+327678位數(shù)運(yùn)算的溢出情況(1)二進(jìn)制加法看作無符號數(shù)看作帶符號數(shù)000001004+4+00001011+11+(+11)

0000111115+15CF=0OF=0000001117+7+11111011+251+(-5)

00000010258+21CF=1OF=0

現(xiàn)為2,結(jié)果錯8位數(shù)運(yùn)算的溢出情況(2)二進(jìn)制加法看作無符號數(shù)看作帶符號數(shù)

000010019+9+01111100+124+(+124)

10000101133+133CF=0OF=1

現(xiàn)為-123,結(jié)果錯

10000111135(-121)

+11110101+245+(-11)

01111100380-132CF=lOF=1

現(xiàn)為124,結(jié)果錯現(xiàn)為124,結(jié)果錯例3.45ADDDX,0F0F0H如指令執(zhí)行前(DX)=4652H,則

46520100011001010010+F0F0+111100001111000000110111010000101指令執(zhí)行后(DX)=3742H,ZF=0,SF=0,CF=1,OF=0;結(jié)果正確練習(xí):求數(shù)據(jù)區(qū)中若干個十進(jìn)制數(shù)的和。求數(shù)據(jù)區(qū)中若干個十進(jìn)制數(shù)的和Datareasegment

arrdb12,34,56,0a9H,45Hsumdb?datareaendscodesegment;定義代碼段

assumeCS:code,DS:datareastart:MOVAX,datareaMOVDS,AXMOVBL,0MOVSi,0

MOVCL,sum-arrAgain:ADDBL,arr[SI] INCSI DECCL JNZagain MOVsum,BLMOVAH,4CHINT21HCodeENDSENDSTART雙精度數(shù)的加法(例)設(shè)目的操作數(shù)存放在DX和AX寄存器中,其中DX存放高位字。源操作數(shù)存放在BX、CX中,其中BX存放高位字。如指令執(zhí)行前,(DX)=0002H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H指令序列為:

ADDAX,CX;SF=?,ZF=?,CF=?,OF=?

ADCDX,BX;SF=?,ZF=?,CF=?,OF=?

XADD-自學(xué)可作字節(jié)、字、雙字運(yùn)算例:設(shè)(AX)=6A56H,(DX)=30B7HXADDAH,DL;(AH)=?,(DL)=?答案:(AH)=21H,(DL)=6AHXADDDX,AX;(AX)=?,(DX)=?答案:(AX)=30B7H,(DX)=9B0DH2.減法指令

SUB:減法,(DST)←(DST)-(SRC)SBB:帶借位減法,(DST)←(DST)-(SRC)-CFDEC:DECOPR減1NEG:NEGOPR求補(bǔ),(OPR)←0FFFFH-(OPR)+l

CMP:CMPOPR1,OPR2比較

CMPXCHG:比較并交換CMPXCHG8B:比較并交換8字節(jié)注意

前六種指令均可作字或字節(jié)運(yùn)算,且除DEC不影響CF標(biāo)志外,它們都影響條件標(biāo)。減法運(yùn)算的條件碼情況與加法類似減法的OF位的設(shè)置方法為:若兩個數(shù)的符號相反,而結(jié)果的符號與減數(shù)相同,則OF=1,否則OF=0NEGoper:如(oper)=0,則CF=0,否則CF=1;如(oper)=80H,作字節(jié)運(yùn)算;或(oper)=8000,作字運(yùn)算,則OF=1,否則OF=0MOVal,123NEGal

CF=1OV=0MOVal,0NEGal

CF=0OV=0MOVal,80HNEGal

CF=1OV=1例3.48SUB[SI+14H],0136H指令執(zhí)行前(DS)=3000H,(SI)=0040H,(30054H)=4336H則指令執(zhí)行后

43360100001100110110-0136=>-0000000100110110↓0100001100110110+111111101100101001000010000000001↙有進(jìn)位時CF=0

所以,(30054H)=4200H,SF=0,ZF=0,CF=0,OF=0例3.49SUBDH,[BP+4]如指令執(zhí)行前(DH)=41H,(SS)=0000H,(BP)=00E4H,(000E8)=5AH則指令執(zhí)行后

410100000101000001-5A=>-01011010=>+1010011011100111所以,(DH)=0E7H,SF=1,ZF=0,CF=1,OF=0例3.50設(shè)X,Y,Z均為雙精度數(shù),分別放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲單元中,存放時高位字在高地址中,低位字在低地址中。下列指令實(shí)現(xiàn):W←X+Y+24-Z,用W、W+2單元放運(yùn)算結(jié)果。M0VAX,MOVDX,X+2ADD

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論