NEW03第三章80 x86指令系統(tǒng).ppt
-
資源ID:6386802
資源大小:820.81KB
全文頁數(shù):73頁
- 資源格式: PPT
下載積分:14.9積分
快捷下載
會員登錄下載
微信登錄下載
微信掃一掃登錄
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。
|
NEW03第三章80 x86指令系統(tǒng).ppt
第3章8086 8088指令系統(tǒng) 3 18086 8088指令格式與尋址方式3 2數(shù)據(jù)傳送類指令3 3算數(shù)運算類指令3 4邏輯運算與移位指令3 5串操作類指令3 6控制轉(zhuǎn)移類指令3 7標(biāo)志處理和處理器控制類指令 3 18086 8088指令格式與尋址方式 機器指令 操作碼 地址碼 操作數(shù)或操作數(shù)的地址 表示該指令所要完成的操作 都是二進制代碼 3 1 1指令的基本格式 匯編語言 符號化了的機器語言 用助記符代替機器語言的二進制代碼 2 8086 8088匯編語言指令 例 MOVAL 80H 3 1 2指令的尋址方式 指令的尋址方式 順序?qū)ぶ贩绞?跳轉(zhuǎn)尋址方式 3 1 38086 8088操作數(shù)的尋址方式 立即數(shù)可以是8位 16位立即數(shù)只能是整數(shù) 不能是小數(shù) 變量或其它類型的數(shù)據(jù)立即數(shù)只能作為源操作數(shù) 2 寄存器尋址 操作數(shù)在8位 16位 或32位 通用寄存器中 寄存器可以是AX BX CX DX SI DI SP BPAH AL BH BL CH CL DH DL 在一條指令中 可以對源操作數(shù)采用寄存器尋址 也可以對目標(biāo)操作數(shù)采用寄存器尋址 還可以兩者都采用寄存器尋址方式 386以上 3 存儲器尋址 存儲器尋址 直接尋址寄存器間接尋址寄存器相對尋址基址變址尋址相對基址變址尋址 操作數(shù)的邏輯地址包含在指令中 1 直接尋址 假設(shè)DS 5000H 地址為51070H字存儲單元的內(nèi)容是6789H 注意 立即數(shù)尋址和直接尋址的書寫格式 直接尋址的地址要放在方括號中 例 MOVAX VALUE或MOVAX VALUE 符號地址 2 寄存器間接尋址 操作數(shù)在存儲器中 操作數(shù)的邏輯地址由寄存器提供寄存器的內(nèi)容是段內(nèi)的偏移地址 BX BP SI DI之一 注 如果沒有特殊說明 用寄存器SI DI和BX間接尋址時 對應(yīng)的段寄存器是DS 如果用寄存器BP間接尋址時 對應(yīng)的段寄存器是SS 再假設(shè)51234H字單元的內(nèi)容是6789H 執(zhí)行該條指令后 AX 6789H 例2 MOV BP CX假設(shè) SS 4000H BP 1234H CX 6789H 則 目的操作數(shù)的物理地址為41234H SS 16 BP 41234H 執(zhí)行該條指令后 41234 89H 41235 67H 8位位移量16位位移量 3 寄存器相對尋址 帶位移量的寄存器間接尋址 邏輯地址 BX BP SI DI 再假設(shè)548ACH字存儲單元的內(nèi)容是55AAH那么 執(zhí)行該指令后 AX 55AAH BX BP和SI DI寄存器組合起來進行間接尋址 有效地址EA 邏輯地址 BX BP SI DI 一個基址寄存器的內(nèi)容加上一個變址寄存器的內(nèi)容 4 基址變址尋址 例 MOVAX BX SI 假設(shè) DS 1000H BX 5000H SI 2000H則 有效地址為 7000H BX SI 物理地址為 17000H DS 16 有效地址 語句執(zhí)行后 17000H 和 17001H AX 5 相對基址變址尋址 MOVAX MASK BX SI MOVBH 4 DI BP MOVBH BP DI 4 例 基址變址尋址加上一個相對位移量 綜合練習(xí) 假設(shè) BX 0158H DI 10A5H 位移量 1B57H DS 2100H指令沒有使用前綴 直接尋址 有效地址 物理地址 1B57H21000H 1B57H 22B57H 寄存器間接尋址 寄存器為BX 有效地址 物理地址 0158H21000H 0158H 21158H BX寄存器相對間接尋址 有效地址 物理地址 0158H 1B57H 1CAFH21000H 1CAFH 22CAFH 綜合練習(xí) 假設(shè) BX 0158H DI 10A5H 位移量 1B57H DS 2100H指令沒有使用前綴 10A5H21000H 10A5H 220A5H 10A5H 1B57H 2BFCH21000H 2BFCH 23BFCH 0158H 10A5H 11FDH21000H 11FDH 221FDH 相對基址加變址的尋址 BX為基址寄存器 DI為變址寄存器 0158H 10A5H 1B57H 2D54H21000H 2D54H 23D54H 綜合練習(xí) 有效地址 物理地址 假設(shè) BX 0158H DI 10A5H 位移量 1B57H DS 2100H指令沒有使用前綴 3 2數(shù)據(jù)傳送類指令 3 2 1通用數(shù)據(jù)傳送指令 格式 MOVOPRD1 OPRD2 目的 源 功能 把一個字節(jié)或一個字從源操作數(shù)PORD2送至目的操作數(shù)OPRD1 源操作數(shù)不改變 注意 1 源和目的操作數(shù)的類型要一致 即同時為字節(jié)或同時為字2 不允許對IP CS進行操作3 兩個存儲器操作數(shù)之間不允許直接進行信息傳輸4 兩個段寄存器之間不能直接傳送信息 也不允許用立即尋址方式為段寄存器賦值5 目的操作數(shù)不能為立即尋址方式 例 MOVAX 1000H MOVAL E MOVAX 2 BP SI 立即數(shù)送到AX 立即數(shù)送到AL E的ASCII碼 如果BP換成BX 判斷對錯 MOV5 ALMOV BX SI MOVDS 1000HMOVCS AXMOVAX DX MOVSI SI MOV SI AX 3 2 2交換傳送指令 XCHG 格式 XCHGOPRD1 OPRD2功能 操作數(shù)OPRD1的內(nèi)容與操作數(shù)OPRD2的內(nèi)容交換 例 XCHGAL AHXCHGSI BXXCHGAL SI 3 XCHG DI BX 3 DX 注意 1 兩個存儲器操作數(shù)不能互相交換2 段寄存器和立即數(shù)都不能作為操作數(shù) 假設(shè) SS 5000H SP 2000H 00000H 52000H FFFFFH 格式 PUSHOPRD 功能 SP 2 把源操作數(shù)OPRD的16位數(shù)據(jù)壓入堆棧 SP自動減2將AX的內(nèi)容傳送到SP指向的單元 1 入棧指令PUSH 50000H 3 2 3堆棧指令 格式 POPOPRD功能 從堆棧中彈出16位數(shù)據(jù)到目的操作數(shù)OPRD SP自動加2 2 出棧指令POP 可以是通用寄存器 段寄存器 CS除外 和字存儲單元 執(zhí)行指令POPBX 3 2 4有效地址傳送指令 格式 LEAREG OPRD 16位的通用寄存器 功能 把操作數(shù)的有效地址傳送到操作數(shù)REG寄存器 例 LEAAX 2728H 執(zhí)行后 AX 2728HLEABX BP SI 指令執(zhí)行后 BX的內(nèi)容為BP SI的值 注意 LEA和MOV的區(qū)別 3 2 5換碼指令XLAT 格式 XLAT功能 完成一個字節(jié)的查表轉(zhuǎn)換 把累加器AL中的值 轉(zhuǎn)換成以BX為表基址的表中值 七段數(shù)碼管 判斷對錯 PUSHALPOPCSXCHGDS BXXCHG BX SI POPBHXCHGAX 1234H 3 2 6標(biāo)志寄存器傳送指令 1 讀取標(biāo)志指令LAHF LoadAHwithFlags 格式 LAHF功能 把標(biāo)志寄存器的低8位對應(yīng)的傳送到寄存器AH AH MOVAH 0C1H 例 AH SFZFAFPFCF SAHF FR的低8位 3 2 6標(biāo)志寄存器傳送指令 3 2 7輸入 輸出數(shù)據(jù)傳送指令 1 輸入指令I(lǐng)N 格式 IN累加器 端口地址功能 從一個端口讀取一個字節(jié)或一個字 傳送到AL或AX 端口地址可以直接給出或由DX寄存器間接給出 例 INAL 50H 將50H端口的字節(jié)讀入ALINAX 70H 將70H 71H兩端口的值讀入AXINAL DX 從DX所指的端口中讀取一個字節(jié)INAX DX 從DX和DX 1所指的兩個端口讀取一個字 注意 外部設(shè)備最多可有65536個I O端口 0000 FFFFH 只有前256個端口可在指令中直接給出 00 FFH 2 輸出指令OUT 格式 OUT端口地址 累加器功能 將AL中的一個字節(jié)或AX中的一個字輸出到指定端口 例 OUT70H ALOUTDX AL 傳送類指令不影響標(biāo)志位 判斷對錯 OUT258 ALOUTDX BLINAL 1234HINAL BHOUT120 ALOUTDX ALINAL 80HINAL DX 3 3算術(shù)運算類指令 3 3 1加法指令 1 加法指令A(yù)DD 格式 ADDOPRD1 OPRD2功能 兩個操作數(shù)相加 結(jié)果送至目的操作數(shù)OPRD1 例 ADDAL 50H AL的內(nèi)容和50H相加 結(jié)果AL中ADDCX 1000H CX的內(nèi)容和1000H相加 結(jié)果放在CX中ADDDI SI DI和SI的內(nèi)容相加 結(jié)果放在DI中ADD BX DI AX BX DI和BX DI 1兩個存儲單元和AX相加 結(jié)果放在BX DI和BX DI 1所指的存儲單元中ADDAX BX 2000H BX 2000H和BX 2001H所指的兩個單元的內(nèi)容和AX的內(nèi)容相加 結(jié)果在AX中 注意 兩個操作數(shù)不能同時為存儲器尋址方式 2 帶進位加法指令A(yù)DC 格式 ADCOPRD1 OPRD2功能 兩個操作數(shù)相加再加上進位標(biāo)志CF 結(jié)果送至目的操作數(shù)OPRD1 MOVSI 2000H 第一個數(shù)的首址MOVDI 3000H 第二個數(shù)的首址MOVAX SI 第一個數(shù)的低16位取到AXADDAX DI 兩個數(shù)的低16位相加MOV SI AX 低16位相加的結(jié)果送到2000H字單元MOVAX SI 2 取第一個數(shù)的高16位到AX中ADCAX DI 2 兩個高16位數(shù)相加 再加CFMOV SI 2 AX 高16位的結(jié)果送到2002H和2003H單元 例 將兩個四字節(jié)的無符號數(shù)相加 兩個數(shù)分別放在2000H 3000H開始的單元 要求結(jié)果放在2000H開始的單元 MOVDI 2000HMOVSI 3000HMOVAX SI ADD DI AXMOVAX SI 2 ADC DI 2 AX MOVDI 2000HMOVSI 3000HMOVAX SI ADD DI AXADDSI 2ADDDI 2MOVAX SI ADC DI AX 3 增量指令I(lǐng)NC 格式 INCOPRD功能 操作數(shù)OPRD的內(nèi)容加1 結(jié)果送回OPRD 該指令結(jié)果不影響進位標(biāo)志CF 影響其它的五個狀態(tài)標(biāo)志 例 INCAL AL的內(nèi)容加1INCCX CX的內(nèi)容加1INC BX 存儲單元的內(nèi)容加1 通用寄存器 存儲器 3 3 2減法指令 1 減法指令SUB 格式 SUBOPRD1 OPRD2功能 目的操作數(shù)減去源操作數(shù) 結(jié)果送到目的標(biāo)操作數(shù) 源操作數(shù)不變 執(zhí)行結(jié)果影響標(biāo)志寄存器 3 減量指令DEC 格式 DECOPRD功能 操作數(shù)OPRD的內(nèi)容減1 并把結(jié)果送回OPRD 執(zhí)行結(jié)果不影響CF 但影響其它五個狀態(tài)標(biāo)志 5 比較指令CMP 格式 CMPOPRD1 OPRD2功能 操作數(shù)OPRD1減去OPRD2 運算結(jié)果不送到OPRD1但影響狀態(tài)標(biāo)志 注意 兩個操作數(shù)本身都沒有發(fā)生變化 3 3 3乘法和除法指令 格式 MULOPRD功能 字節(jié) AX AL OPRD字 DXAX AX OPRD 有符號數(shù)乘法指令 乘法指令MUL和IMUL 例 假設(shè) AL 0B4H BL 11H 求執(zhí)行MULBL的乘積值 求執(zhí)行IMULBL的乘積值 無符號數(shù) AL 0B4H 190D BL 11H 17D 190D 17D 3060D 3060D 0BF4H 執(zhí)行MULBL后 AX 0BF4HAH 0 CF OF 1 0B4H 10110100B取補碼 4CH 76D 1292D 10100001100B FAF4H 補碼 除法指令DIV IDIV 格式 DIVOPRD功能 字節(jié) AX OPRD AL AH字 DXAX OPRD AX DX 除法指令對標(biāo)志位的影響無定義 注意 如果除數(shù)為0 或者8位數(shù)除時商超過8位 或者16位除時商超過16位 則認為是溢出 引起0號中斷 有符號數(shù)除法指令 5 符號擴展指令 字節(jié)擴展指令CBW 格式 CBW功能 寄存器AL中的符號擴展到寄存器AH 若AL的最高有效位為0 則AH 0 否則AH 0FFH 字擴展指令CWD 格式 CWD功能 寄存器AX中的符號擴展到寄存器DX 若AX的最高有效位為0 則DX 0 否則DX 0FFFFH 例 計算表達式的值 X Y Z 1024 75 假設(shè)其中的X Y Z均為16位帶符號數(shù) 分別放在名為XXX YYY ZZZ的變量單元中 3 4邏輯運算和位移指令 1 邏輯 與 指令A(yù)ND 格式 ANDOPRD1 OPRD2功能 兩個操作數(shù)進行按位的邏輯 與 運算 結(jié)果送到目的操作數(shù)OPRD1 CF 0 OF 0 結(jié)果影響ZF SF PF 3 4 1邏輯運算指令 2 邏輯 或 指令OR 格式 OROPRD1 OPRD2功能 兩個操作數(shù)進行按位的邏輯 或 運算 結(jié)果送到目的操作數(shù)OPRD1 CF 0 OF 0 結(jié)果影響ZF SF PF 4 邏輯 異或 指令XOR 格式 XOROPRD1 OPRD2功能 兩個操作數(shù)進行按位的邏輯 異或 運算 結(jié)果送到目的操作數(shù)OPRD1 CF 0 OF 0 結(jié)果影響ZF SF PF 通常用于檢測某位是否為1 但又不改變原來值的場合 1 檢查AL中的D6位或D2位是否有一位為1 例 2 要求屏蔽AL寄存器中的第6位和第4位 ANDAL 0AFH 10101111B 3 要求AL寄存器中的第0位和第1位變反 XORAL 03H 00000011B 3 4 2移位指令 1 算數(shù)邏輯移位指令 格式 SALOPRD m 算術(shù)左移指令SHLOPRD m 邏輯左移指令SAROPRD m 算術(shù)右移指令SHROPRD m 邏輯右移指令 功能 操作數(shù)左或右移m位 ShiftArithmeticLeft SHiftlogicRight m為1或為CL當(dāng)要移多位時 移位位數(shù)需存放在CL寄存器中 2 循環(huán)移位指令 ROLOPRD m 循環(huán)左移指令ROROPRD m 循環(huán)右移指令RCLOPRD m 帶進位循環(huán)左移指令RCROPRD m 帶進位循環(huán)右移指令 格式 功能 操作數(shù)左或右循環(huán)移m位 m是移位位數(shù) 為1或為CL 當(dāng)要移多位時 移位位數(shù)需存放在CL寄存器中 只影響標(biāo)志CF和OF RotateRight lift 例 不用乘法指令 用移位指令編程實現(xiàn)AL寄存器的內(nèi)容乘以10 假設(shè)結(jié)果仍然是8位 SALAL 1 AL中的數(shù)左移1位 2 MOVBL ALMOVCL 2SALAL CL AL中的數(shù)再左移2位 8 ADDAL BL AL中的數(shù) 10 3 5串操作類指令 字符串 字符的一個序列 字符串操作的幾點說明 由變址寄存器SI指向源操作數(shù) 串 由變址寄存器DI指向目的操作數(shù) 串 規(guī)定源串放在當(dāng)前數(shù)據(jù)段中 目的串放在當(dāng)前附加段中 即 DS SI指向源串ES DI指向目的串 3 5 1重復(fù)前綴 1 重復(fù)前綴REP 格式 REP串操作指令 功能 重復(fù)后面的串操作指令 CX 次 REP后面一般跟MOVS或STOS 即 CX 0并且ZF 1時 重復(fù)串操作指令 3 5 1重復(fù)前綴 3 重復(fù)前綴REPNZ REPNE 格式 REPNZ串操作指令或REPNE串操作指令 功能 重復(fù)后面的串操作指令 每重復(fù)一次CX 1 重復(fù)一直進行到CX為0或串操作指令使零標(biāo)志ZF為1止 即 CX 0并且ZF 0時 重復(fù)串操作指令 3 5 2字符串指令 格式 MOVSB或MOVSW 功能 MOVSB DS SI ES DI 然后根據(jù)方向標(biāo)志DF確定SI DI增1還是減1 若DF 1 SI DI自動減1 若DF 0 SI DI自動加1 在執(zhí)行MOVS前 必須確定方向 即DF置位或復(fù)位 MOVSW DS SI ES DI 然后根據(jù)方向標(biāo)志DF確定SI DI增2還是減2 若DF 1 SI DI自動減2 若DF 0 SI DI自動加2 1 字符串傳送指令MOVS 2 字符串存指令STOS 格式 STOSB或STOSW 功能 把累加器的值存到內(nèi)存中 如果使用了重復(fù)前綴REP 即對某個區(qū)域填充累加器的內(nèi)容 STOSB 字節(jié)存 AL ES DI 并根據(jù)DF執(zhí)行DI DI 1 注意 字符串存指令不影響標(biāo)志 STOSW 字存 AX ES DI 并根據(jù)DF執(zhí)行DI DI 1 3 字符串取指令LODS 格式 LODSB或LODSW 功能 把內(nèi)存中的值取到累加器 LODSB 取字節(jié) DS SI AL并根據(jù)DF執(zhí)行DI DI 1 注意 字符串取指令不影響標(biāo)志 LODSW 取字 DS SI AX并根據(jù)DF執(zhí)行DI DI 2 4 字符串掃描指令SCAS 格式 SCASB或SCASW SCASB 字符串字節(jié)掃描 AL ES DI 影響有關(guān)標(biāo)志位 并根據(jù)DF執(zhí)行DI DI 1DF 0時DI DI 1DF 1時DI DI 1 功能 SCASW 字符串字掃描 AX ES DI 并根據(jù)DF執(zhí)行DI DI 2 5 字符串比較指令CMPS 格式 CMPSB或CMPSW CMPSB 字符串字節(jié)比較 DS SI ES DI 影響有關(guān)標(biāo)志位 并根據(jù)DF執(zhí)行DI DI 1 功能 CMPSW 字符串字比較 DS SI ES DI 影響有關(guān)標(biāo)志位 并根據(jù)DF執(zhí)行DI DI 2 用串傳送指令把1000H單元的3個字節(jié)的數(shù)據(jù)傳送到2000H單元 CLDMOVSI 1000HMOVDI 2000HMOVSBMOVSBMOVSBHLT CLDMOVSI 1000HMOVDI 2000HMOVCX 03HREPMOVSBHLT 例1 3 5 3字符串指令舉例 要求把當(dāng)前數(shù)據(jù)段中偏移1000H開始的100個字節(jié)的數(shù)據(jù)傳送到2000H開始的單元中 CLDPUSHDSPOPES ES等于DSMOVSI 1000H 置源串指針初值MOVDI 2000H 置目的串指針初值MOVCX 100 重復(fù)次數(shù)REPMOVSB 每次傳送一字節(jié)數(shù)據(jù) 例2 在某字符串中查找是否存在 字符 該字符串的首地址為1000H 長度為32個字節(jié) 如果存在把所在地址送入BX寄存器中 否則BX寄存器清0 結(jié)果不為 0 沒找到 否則 找到了 地址為DI 1 例3 CLD 清方向標(biāo)志DFLEADI 1000H MOVCX 20H 傳送32個數(shù)據(jù)XORAX AXREPSTOSW 將32個字清零HLT 將當(dāng)前段1000H開始的64個單元清零 重復(fù)CX次 例4 3 6控制轉(zhuǎn)移類指令 3 6 1無條件轉(zhuǎn)移指令 程序的尋址 代碼段寄存器CS 程序指針寄存器IP 直接轉(zhuǎn)移 轉(zhuǎn)移的地址信息直接出現(xiàn)在指令中間接轉(zhuǎn)移 轉(zhuǎn)移的目標(biāo)地址信息間接存儲于某寄存器或某一內(nèi)存單元 相對轉(zhuǎn)移 以當(dāng)前的IP值增加或減少某一個值絕對轉(zhuǎn)移 以一個新的值完全代替當(dāng)前的IP值 JMPSHORTL1JMPNEARPTRL2JMPWORDPTRBXJMPWORDPTR BX JMPFARL2JMPDWORDPTR BX 段內(nèi)直接短轉(zhuǎn)移 段內(nèi)直接近轉(zhuǎn)移 段內(nèi)間接近轉(zhuǎn)移 段間直接遠轉(zhuǎn)移 段間間接遠轉(zhuǎn)移 3 6 2調(diào)用和返回指令 1 段內(nèi)直接調(diào)用與返回 格式 CALL過程名 功能 調(diào)用當(dāng)前段內(nèi)的子程序操作 SP SP 2 SP IP IP IP disp 子程序入口地址與當(dāng)前地址的差值 格式 RET操作 IP SP SP SP 2 2 段內(nèi)間接調(diào)用與返回 格式 CALLOPRD操作 SP SP 2 SP IP IP OPRD 格式 RET操作 IP SP SP SP 2 16位通用寄存器或字存儲器 3 段間直接調(diào)用與返回 格式 CALL過程名 功能 調(diào)用其它代碼段中的子程序操作 SP SP 2 SP CS SP SP 2 SP IPIP 過程入口地址的偏移量CS 過程入口地址的段值 遠過程 格式 RET操作 IP SP SP SP 2 CS SP SP SP 2 4 段間間接調(diào)用與返回 格式 CALLOPRD操作 SP SP 2 SP CS SP SP 2 SP IPIP OPRD低 CS OPRD高 格式 RET操作 IP SP SP SP 2 CS SP SP SP 2 雙字存儲器操作數(shù) 3 6 3條件轉(zhuǎn)移指令 條件轉(zhuǎn)移不影響標(biāo)志 3 6 4循環(huán)控制指令 1 計數(shù)循環(huán)指令LOOP 格式 LOOP標(biāo)號功能 寄存器CX的值減1 如果結(jié)果不等于0 則循環(huán)至標(biāo)號 否則順序執(zhí)行 DECCXJNZ標(biāo)號 3 不等于 結(jié)果不為0循環(huán)指令LOOPNE LOOPNZ 格式 LOOPNE標(biāo)號或LOOPNZ標(biāo)號功能 寄存器CX的值減1 且判斷只有在CX 0 而且標(biāo)志ZF 0的條件下 才循環(huán)至標(biāo)號 否則順序執(zhí)行 3 7標(biāo)志處理和處理器控制類指令 1 對標(biāo)志位操作指令 2 處理器控制類指令 1 同步命令 2 處理器暫停指令HLT HLT CPU進入暫停狀態(tài) 在暫停狀態(tài)不進行任何操作 1 在RESET線上有復(fù)位信號2 在NMI線上有請求3 在中斷允許情況下 在INTR線上有請求 脫離暫停的條件 所以 HLT指令常在程序中為了等待中斷而使用 3 空操作指令NOP