資源描述:
《80x86匯編指令詳解》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、80x86匯編指令詳解(上)2008年01月15日星期二15:0580x86指令系統(tǒng),指令按功能可分為以下七個(gè)部分?! ?1)數(shù)據(jù)傳送指令?! ?2)算術(shù)運(yùn)算指令?! ?3)邏輯運(yùn)算指令?! ?4)串操作指令?! ?5)控制轉(zhuǎn)移指令?! ?6)處理器控制指令?! ?7)保護(hù)方式指令?! ?.3.1數(shù)據(jù)傳送指令 數(shù)據(jù)傳送指令包括:通用數(shù)據(jù)傳送指令、地址傳送指令、標(biāo)志寄存器傳送指令、符號擴(kuò)展指令、擴(kuò)展傳送指令等?! ∫?、通用數(shù)據(jù)傳送指令 1傳送指令 傳送指令是使用最頻繁的指令,格式:MOVDEST,SRC 功能
2、:把一個(gè)字節(jié),字或雙字從源操作數(shù)SRC傳送至目的操作數(shù)DEST?! 魉椭噶钤试S的數(shù)據(jù)流方向見圖311。圖3.11 傳送指令數(shù)據(jù)流 由上圖可知,數(shù)據(jù)允許流動(dòng)方向?yàn)椋和ㄓ眉拇嫫髦g、通用寄存器和存儲器之間、通用寄存器和段寄存器之間、段寄存器和存儲器之間,另外還允許立即數(shù)傳送至通用寄存器或存儲器。但在上述傳送過程中,段寄存器CS的值不能用傳送指令改變?! ±?.12CPU內(nèi)部寄存器之間的數(shù)據(jù)傳送?! OVAL,DH ;AL←DH (8位) MOVDS,AX ?。籇S←AX (16位) MO
3、VEAX,ESI ?。籈AX←ESI (32位) 例3.13CPU內(nèi)部寄存器和存儲器之間的數(shù)據(jù)傳送。 MOV[BX],AX ??;間接尋址 (16位) MOVEAX,[EBX+ESI] ;基址變址尋址 (32位) MOVAL,BLOCK ?。籅LOCK為變量名,直接尋址(8位)例3.14立即數(shù)送通用寄存器、存儲器?! OVEAX,12345678H ;EAX←12345678H (32位) MOV[BX],12H ??;間接尋址 (8位) MOV
4、AX,1234H;AX←1234H(16位) 使用該指令應(yīng)注意以下問題: ·源和目的操作數(shù)不允許同時(shí)為存儲器操作數(shù); ·源和目的操作數(shù)數(shù)據(jù)類型必須一致; ·源和目的操作數(shù)不允許同時(shí)為段寄存器; ·目的操作數(shù)不允許為CS和立即數(shù); ·當(dāng)源操作數(shù)為立即數(shù)時(shí),目的操作數(shù)不允許為段寄存器; ·傳送操作不影響標(biāo)志位。 2擴(kuò)展傳送指令 格式:MOVSX DEST,SRC MOVZX DEST,SRC 功能:將源操作數(shù)由8位擴(kuò)展到16位送目的操作數(shù),或由16位擴(kuò)展到32位送目的操作數(shù)。其中MOVSX是
5、按有符號數(shù)擴(kuò)展,MOVZX是按無符號數(shù)擴(kuò)展。無符號數(shù)或正數(shù)高位擴(kuò)展為0,負(fù)數(shù)高位擴(kuò)展為全“1”?! ±?.15帶符號數(shù)擴(kuò)展 MOVBL,80H ??; -128 MOVSXAX,BL ; 將80H擴(kuò)展為FF80H后送AX中?! ±?.16無符號數(shù)擴(kuò)展 MOVBL,80H ; 128 MOVZXAX,BL ??; 將80H擴(kuò)展為0080H后送AX中?! ∈褂迷撝噶顟?yīng)注意以下問題: ·目的操作數(shù)應(yīng)為16位或32位通用寄存器; ·源操作數(shù)長度須小于目的操作數(shù)長度,為8位或16位通用寄存器或存儲器操作數(shù); ·
6、擴(kuò)展傳送操作不影響標(biāo)志位。 3交換指令 (1)格式:XCHGOPR1,OPR2 功能:交換操作數(shù)OPR1和OPR2的值,操作數(shù)數(shù)據(jù)類型為字節(jié)、字或雙字。允許通用寄存器之間,通用寄存器和存儲器之間交換數(shù)據(jù)。 例3.17 XCHGAX,BX;通用寄存器之間交換數(shù)據(jù)(16位) XCHGESI,EDI;通用寄存器之間交換數(shù)據(jù)(32位) XCHGBX,[SI];通用寄存器和存儲器之間交換數(shù)據(jù)(16位) XCHGAL,[BX];通用寄存器和存儲器之間交換數(shù)據(jù)(8位) 使用該指令應(yīng)注意以下問題: ·操
7、作數(shù)OPR1和OPR2不允許同為存儲器操作數(shù); ·操作數(shù)數(shù)據(jù)類型必須一致; ·交換指令不影響標(biāo)志位?! ∪缫獙?shí)現(xiàn)存儲器操作數(shù)交換,可用如下指令實(shí)現(xiàn): MOVAL,BLOCK1 XCHGAL,BLOCK2 MOVBLOCK1,AL (2)格式:BSWAPREG 功能:將32位通用寄存器中,第1個(gè)字節(jié)和第4個(gè)字節(jié)交換,第2個(gè)字節(jié)和第3個(gè)字節(jié)交換。例3.18 MOVEAX,44332211H BSWAPEAX;EAX=1122
8、3344H 使用該指令應(yīng)注意以下問題: ·操作數(shù)為32位通用寄存器; ·交換指令不影響標(biāo)志位。 二、堆棧操作指令 1壓棧指令 (1)格式:PUSHSRC 功能:將源操作數(shù)壓下堆棧,源操作數(shù)允許為16位或32位通用寄存器、存儲器和立即數(shù)以及16位段寄存器。當(dāng)操作數(shù)數(shù)據(jù)類型為字類型,壓棧操作使SP值減2;當(dāng)數(shù)據(jù)類型為雙字類型,壓棧操作使SP值減4。