X86的指令系統(tǒng)和尋址方式.ppt
《X86的指令系統(tǒng)和尋址方式.ppt》由會員分享,可在線閱讀,更多相關(guān)《X86的指令系統(tǒng)和尋址方式.ppt(461頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第三章80X86的指令系統(tǒng)和尋址方式 河南師范大學計算機與信息技術(shù)學院 2 2020 2 29 本章內(nèi)容提要 河南師范大學計算機與信息技術(shù)學院 3 2020 2 29 預備知識 指令由操作碼和操作數(shù)兩部分組成 操作碼說明計算機要執(zhí)行哪種操作 如傳送 運算 移位 跳轉(zhuǎn)等操作 它是指令中不可缺少的組成部分 操作數(shù)是指令執(zhí)行的參與者 也就是各種操作的對象 用助記符表達的指令的一般格式 操作碼操作數(shù)1 操作數(shù)n 注釋 河南師范大學計算機與信息技術(shù)學院 4 2020 2 29 預備知識 操作碼 用一個唯一的助記符表示 指令功能的英文縮寫 對應著機器指令的一個二進制編碼 操作數(shù) 可以是操作數(shù)本身 一個具體的數(shù)值 也可以是存放數(shù)據(jù)的寄存器 或指明數(shù)據(jù)在主存位置的存儲器地址 河南師范大學計算機與信息技術(shù)學院 5 2020 2 29 預備知識 操作數(shù)字段可以是一個 二個或三個 通常稱為一地址 二地址或三地址指令 單操作數(shù)指令就是一地址指令它只需要指定一個操作數(shù) 雙操作數(shù)指令就是二地址指令 操作數(shù)2稱為源操作數(shù)scr 操作數(shù)1稱為目的操作數(shù)dest 它不僅作為指令操作的一個對象 還用來存放指令操作的結(jié)果 操作碼操作數(shù) 操作碼操作數(shù)1 操作數(shù)2 河南師范大學計算機與信息技術(shù)學院 6 2020 2 29 預備知識 大多數(shù)運算指令可使用三地址指令 除給出參加運算的兩個操作數(shù) 操作數(shù)2 操作數(shù)3 外 還指出運算結(jié)果的存放地址 操作數(shù)1 分號后的內(nèi)容是對指令的解釋 操作碼操作數(shù)1 操作數(shù)2 操作數(shù)3 河南師范大學計算機與信息技術(shù)學院 7 2020 2 29 預備知識 而操作數(shù)的給出方式比較復雜 指令系統(tǒng)設(shè)計了多種操作數(shù)的來源 尋找操作數(shù)的方式叫做操作數(shù)的尋址方式 操作數(shù)采取哪一種尋址方式 會影響機器運行的速度和效率 這種符號指令系統(tǒng)中 操作碼的給出方式比較簡單 如何尋址一個操作數(shù)對程序的設(shè)計來講也是很重要的 河南師范大學計算機與信息技術(shù)學院 8 2020 2 29 3 180X86的尋址方式 河南師范大學計算機與信息技術(shù)學院 9 2020 2 29 3 1 1與數(shù)據(jù)有關(guān)的尋址方式 8086 80286的機器字長位16位 一般情況下只處理8 16位數(shù) 只在乘 除指令中才會有32位數(shù) 80386及其后繼機型字長位32位 它可處理8 16 32位操作數(shù) 在乘除指令中還可產(chǎn)生64位數(shù) 這種尋址方式用來確定操作數(shù)地址從而找到操作數(shù) 本節(jié)對數(shù)據(jù)尋址方式的討論 均以MOV指令為例 河南師范大學計算機與信息技術(shù)學院 10 2020 2 29 3 1 1與數(shù)據(jù)有關(guān)的尋址方式 河南師范大學計算機與信息技術(shù)學院 11 2020 2 29 1 立即數(shù)尋址方式 immediateaddressing 操作數(shù)直接存放在指令中 緊跟在操作碼之后 作為指令的一部分存放在代碼段里 如圖3 1 1 所示 這種操作數(shù)被稱為立即數(shù)imm 它可以是8位數(shù)值i8 也可以是16位數(shù)值i16或32位數(shù)值i32 數(shù)據(jù)存放時采用 小端方式 立即數(shù)尋址方式常用來給寄存器賦值 只能用于源操作數(shù)字段 不能用于目的操作數(shù)字段 河南師范大學計算機與信息技術(shù)學院 12 2020 2 29 立即數(shù)尋址舉例 例3 1MOVAL 5指令執(zhí)行后 AL 05H 例3 2MOVAX 3064H指令執(zhí)行后 AX 3064H 如圖3 2所示 例3 3MOVEAX 12345678H指令執(zhí)行后 EAX 12345678H 河南師范大學計算機與信息技術(shù)學院 13 2020 2 29 2 寄存器尋址方式 registeraddressing 操作數(shù)存放在CPU的內(nèi)部寄存器reg中 無需訪問存儲器 因而可以得到較高的運算速度 如圖3 1 2 所示 寄存器可以是 8位 r8 AH AL BH BL CH CL DH DL 16位 r16 AX BX CX DX SI DI BP SP 32位 r32 EAX EBX ECX EDX ESI EDI EBP ESP 段寄存器 seg CS DS SS ES FS GS 河南師范大學計算機與信息技術(shù)學院 14 2020 2 29 寄存器尋址舉例 例3 4 a MOVAX BX如指令執(zhí)行前 AX 3064H BX 1234H 則指令執(zhí)行后 AX 1234H BX 保持不變 例3 4 b MOVECX EDX如執(zhí)行前 ECX 0123754H EDX 12345678H 則指令執(zhí)行后 ECX 12345678H EDX 保持不變 執(zhí)行動畫演示 河南師范大學計算機與信息技術(shù)學院 15 2020 2 29 存儲器尋址方式 以下各種尋址方式的操作數(shù)都在除代碼段以外的存儲區(qū)中 操作數(shù)地址是由段基地址和偏移地址相加而取得的 段基地址在實模式和保護模式下可從不同途徑取得 這里要解決的問題是如何取得操作數(shù)的偏移地址 在80 x86里 把操作數(shù)的偏移地址稱為有效地址 effectiveaddress EA 通過不同尋址方式求得操作數(shù)地址 從而取得操作數(shù) 下述各種尋址方式即為求得有效地址 EA 的不同途徑 河南師范大學計算機與信息技術(shù)學院 16 2020 2 29 存儲器尋址方式 指令中給出操作數(shù)的主存地址信息 偏移地址 稱之為有效地址EA 而段地址在默認的或用段超越前綴指定的段寄存器中 80X86設(shè)計了多種存儲器尋址方式 16位尋址 直接尋址方式寄存器間接尋址方式寄存器相對尋址方式基址變址尋址方式相對基址變址尋址方式 32位尋址 比例變址尋址方式基址比例變址尋址方式相對基址比例變址尋址方式 河南師范大學計算機與信息技術(shù)學院 17 2020 2 29 有效地址EA EffectiveAddress 位移量 displacement 是存放在指令中的一個8位 16位或32位的數(shù) 但它不是立即數(shù) 而是一個地址 基址 base 是存放在基址寄存器中的內(nèi)容 它是有效地址中的基址部分 通常用來指向數(shù)據(jù)段中數(shù)組或字符串的首地址 變址 index 是存放在變址寄存器中的內(nèi)容 它通常用來訪問數(shù)組中的某個元素或字符串中的某個字符 有效地址的四種組成成分 比例因子 scalefactor 是386及其后繼機型新增加的尋址方式中的一個術(shù)語 其值可為1 2 4或8 在尋址中 可用變址寄存器的內(nèi)容乘以比例因子來取得變址值 這類尋址方式對訪問元素長度為2 4 8字節(jié)的數(shù)組特別有用 河南師范大學計算機與信息技術(shù)學院 18 2020 2 29 有效地址EA EffectiveAddress EA 基址 變址 比例因子 位移量 這四個成分中 除比例因子是固定值外 其他三個成分都可正可負 以保證指針移動的靈活性 8086 80286只能使用16位尋址 而80386及其后繼機型則既可用32位尋址 也可用16位尋址 在這兩種情況下 對以上四種成分的組成有不同的規(guī)定 表3 1說明了這一規(guī)定 有效地址的計算公式 這四種成分可以任意組合使用 在各種不同組合下其中每一種成分均可空缺 但比例因子只能與變址寄存器同時使用 其中有關(guān)比例因子的三種組合只能用于80386及其后繼機型 河南師范大學計算機與信息技術(shù)學院 19 2020 2 29 段選擇規(guī)則 表3 2則說明了各種訪存類型下所對應的段的默認選擇 實際上 在某些情況下 80 x86允許程序員用段跨越前綴來改變系統(tǒng)所指定的默認段 如允許數(shù)據(jù)存放在除DS段以外的其他段中 此時程序中應使用段跨越前綴 段的選擇和段跨越前綴 以下三種情況下 不允許使用段跨越前綴 串處理指令的目的串必須用ES段 PUSH指令的目的和POP指令的源必須用SS段 指令必須存放在CS段中 河南師范大學計算機與信息技術(shù)學院 20 2020 2 29 3 直接尋址方式 directaddressing 操作數(shù)的有效地址只包含位移量一種成分 其值就存放在代碼段中指令的操作碼之后 位移量的值即操作數(shù)的有效地址 如圖3 1 3 所示 默認的段地址在DS段寄存器 可使用段超越前綴改變 直接尋址方式適用于處理單個變量 例如 要處理某個存放在存儲器里的變量 可以用存儲器尋址方式 這就是一個常量常常先要送到寄存器的原因 河南師范大學計算機與信息技術(shù)學院 21 2020 2 29 直接尋址舉例 例3 5MOVAX 2000H 如 DS 3000H 則執(zhí)行情況如圖3 3所示 執(zhí)行結(jié)果為 AX 3050H 在匯編語言指令中 可以用符號地址代替數(shù)值地址 如 MOVAX VALUE 此時VALUE為存放操作數(shù)單元的符號地址 如寫成 MOVAX VALUE 也是可以的 兩者是等效的 如VALUE在附加段中 則應指定段跨越前綴如下 MOVAX ES VALUE或MOVAX ES VALUE 河南師范大學計算機與信息技術(shù)學院 22 2020 2 29 直接尋址舉例 例3 6MOVEAX DATA指令中的DATA為符號地址 其中存放著32為操作數(shù) 故目的操作數(shù)也應使用32位寄存器 河南師范大學計算機與信息技術(shù)學院 23 2020 2 29 4 寄存器間接尋址方式 registerindirectaddressing 操作數(shù)的有效地址為基址寄存器內(nèi)容或變址寄存器的內(nèi)容 因此 有效地址就在某個寄存器中 而操作數(shù)則在存儲器中 如圖3 1 4 所示 其他寄存器默認的段地址在DS段寄存器 可使用段超越前綴改變 凡使用BP ESP和EBP寄存器時 其默認段為SS段 這種尋址方式可以用于表格處理 執(zhí)行完一條指令后 只需修改寄存器內(nèi)容就可以取出表格的下一項 河南師范大學計算機與信息技術(shù)學院 24 2020 2 29 寄存器間接尋址舉例 例3 7MOVAX BX 如果 DS 2000H BX 1000H則物理地址 20000 1000 21000H執(zhí)行情況如圖3 4所示 執(zhí)行結(jié)果為 AX 50A0H 指令中也可指定段跨越前綴來取得其他段中的數(shù)據(jù) 如 MOVAX ES BX 例3 8MOVECX EDX 指令把數(shù)據(jù)段中有效地址存放在EDX寄存器中的32位操作數(shù)傳送到ECX寄存器中 河南師范大學計算機與信息技術(shù)學院 25 2020 2 29 5 寄存器相對尋址方式 registerrelativeaddressing 又稱直接變址尋址方式 寄存器的使用和段寄存器的默認情況 同 寄存器間接尋址 操作數(shù)的有效地址為基址寄存器或變址寄存器的內(nèi)容與指令中指定的位移量之和 所以有效地址由兩種成分組成 這種尋址方式如圖3 1 5 所示 這種尋址方式同樣可用于表格處理 表格的首地址可設(shè)置為位移量 利用修改基址或變址寄存器的內(nèi)容來取得表格中的值 河南師范大學計算機與信息技術(shù)學院 26 2020 2 29 寄存器相對尋址舉例 例3 9MOVAX COUNT SI 也可表示為MOVAX COUNT SI 其中COUNT為16位位移量的符號地址 如果 DS 3000H SI 2000H COUNT 3000H則物理地址 30000 2000 3000 35000H指令執(zhí)行情況如圖3 5所示 執(zhí)行結(jié)果是 AX 1234H 類似地 可有MOVEAX TABLE ESI TABLE為32位位移量的符號地址 ESI的內(nèi)容指向此表格中的一項 這種尋址方式也可以使用段跨越前綴 例如 MOVDL ES STRING SI 河南師范大學計算機與信息技術(shù)學院 27 2020 2 29 6 基址變址尋址方式 basedindexedaddressing 操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容之和 所以有效地址由兩種成分組成 如圖3 1 6 所示 這種尋址方式同樣適用于數(shù)組或表格處理 首地址可存放在基址寄存器中 而用變址寄存器來訪問數(shù)組中的各個元素 由于兩個寄存器都可以修改 所以它比直接尋址方式更加靈活 河南師范大學計算機與信息技術(shù)學院 28 2020 2 29 基址變址尋址舉例 例3 10MOVAX BX DI 或?qū)憺?MOVAX BX DI 如 DS 2100H BX 0158H DI 10A5H則EA 0158 10A5 11FDH 物理地址 21000 11FD 221FDH指令執(zhí)行情況如圖3 6所示 執(zhí)行結(jié)果 AX 1234H 類似地 對于32位尋址方式可有 MOVEDX EBX ESI 此種尋址方式使用段跨越前綴時的格式為 MOVAX ES BX SI 河南師范大學計算機與信息技術(shù)學院 29 2020 2 29 7 相對基址變址尋址方式 relativedbasedindexedaddressing 操作數(shù)的有效地址是一個基址寄存器與一個變址寄存器的內(nèi)容和指令中指定的位移量之和 所以有效地址由三種成分組成 如圖3 1 7 所示 這種尋址方式通常用于對二維數(shù)組的尋址 例如 存儲器中存放著由多個記錄組成的文件 在位移量可指向文件之首 基址寄存器指向某個記錄 變址寄存器則指向該記錄中的一個元素 這種尋址方式也為堆棧處理提供了方便 一般 BP 可指向棧頂 從棧頂?shù)綌?shù)組的首址可用位移量表示 變址寄存器可用來訪問數(shù)組中的某個元素 河南師范大學計算機與信息技術(shù)學院 30 2020 2 29 相對基址變址尋址舉例 例3 11MOVAX MASK BX SI 也可寫成MOVAX MASK BX SI 或MOVAX MASK BX SI 如 DS 3000H BX 2000H SI 1000 MASK 0250H 則物理地址 16d DS BX SI MASK 30000 2000 1000 0250 33250H指令執(zhí)行情況如圖3 7所示 執(zhí)行結(jié)果 AX 1234H 類似地 對于32位尋址方式可有 MOVEAX ARRAY EBX ECX 提示 位移量可用符號表示 同一尋址方式有多種表達形式 河南師范大學計算機與信息技術(shù)學院 31 2020 2 29 8 比例變址尋址方式 scaledindexedaddressing 操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上位移量之和 所以有效地址由三種成分組成 如圖3 1 8 所示 這種尋址方式與相對寄存器尋址相比 增加了比例因子 其優(yōu)點在于 對于元素大小為2 4 8字節(jié)的數(shù)據(jù) 可以在變址寄存器中給出數(shù)組元素下標 而由尋址方式控制直接用比例因子把下標轉(zhuǎn)換為變址值 河南師范大學計算機與信息技術(shù)學院 32 2020 2 29 比例變址尋址舉例 例3 12MOVEAX COUNT ESI 4 如要求把雙字數(shù)組COUNT中的元素3送到EAX中 用這種尋址方式可直接在ESI中放入3 選擇比例因子4 數(shù)組元素為4字節(jié)長 就可以方便地達到目的 見圖3 8 而不必像在相對寄存器尋址方式中要把變址值直接裝入寄存器中 河南師范大學計算機與信息技術(shù)學院 33 2020 2 29 9 基址比例變址尋址方式 basedscaledindexedaddressing 操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以比例因子再加上基址寄存器的內(nèi)容之和 所以有效地址由三種成分組成 如圖3 1 9 所示 這種尋址方式與基址變址尋址方式相比 增加了比例因子 其優(yōu)點是很明顯的 例3 13MOVECX EAX EDX 8 河南師范大學計算機與信息技術(shù)學院 34 2020 2 29 10 相對基址比例變址尋址方式 relativebasedscaledindexedaddressing 操作數(shù)的有效地址是變址寄存器的內(nèi)容乘以比例因子 加上基址寄存器的內(nèi)容 再加上位移量之和 所以有效地址由四種成分組成 如圖3 1 10 所示 這種尋址方式比相對基址變址方式增加了比例因子 便于對元素為2 4 8字節(jié)的二維數(shù)組的處理 例3 14MOVEAX TABLE EBP EDI 4 河南師范大學計算機與信息技術(shù)學院 35 2020 2 29 3 1 2與轉(zhuǎn)移地址有關(guān)的尋址方式 河南師范大學計算機與信息技術(shù)學院 36 2020 2 29 3 1 2與轉(zhuǎn)移地址有關(guān)的尋址方式 如圖3 9所示 這種尋址方式用來確定轉(zhuǎn)移指令及CALL指令的轉(zhuǎn)向地址 本節(jié)均以無條件轉(zhuǎn)移指令JMP為例 河南師范大學計算機與信息技術(shù)學院 37 2020 2 29 3 1 2與轉(zhuǎn)移地址有關(guān)的尋址方式 目標地址的尋址方式 直接尋址 轉(zhuǎn)移地址象立即數(shù)一樣 直接在指令的機器代碼中 就是直接尋址方式 間接尋址 轉(zhuǎn)移地址在寄存器或主存單元中 就是通過寄存器或存儲器的間接尋址方式 用寄存器或存儲器操作數(shù)表達 用符號表達 河南師范大學計算機與信息技術(shù)學院 38 2020 2 29 3 1 2與轉(zhuǎn)移地址有關(guān)的尋址方式 目標地址的范圍 段內(nèi) 段內(nèi)轉(zhuǎn)移 近轉(zhuǎn)移 near 在當前代碼段64KB范圍內(nèi)轉(zhuǎn)移 32KB范圍 不需要更改CS段地址 只要改變IP偏移地址 段內(nèi)轉(zhuǎn)移 短轉(zhuǎn)移 short 轉(zhuǎn)移范圍可以用一個字節(jié)表達 在段內(nèi) 128 127范圍的轉(zhuǎn)移 河南師范大學計算機與信息技術(shù)學院 39 2020 2 29 3 1 2與轉(zhuǎn)移地址有關(guān)的尋址方式 目標地址的范圍 段間 段間轉(zhuǎn)移 遠轉(zhuǎn)移 far 從當前代碼段跳轉(zhuǎn)到另一個代碼段 可以在1MB范圍 需要更改CS段地址和IP偏移地址 目標地址必須用一個32位數(shù)表達 叫做32位遠指針 它就是邏輯地址 實際編程時 匯編程序會根據(jù)目標地址的距離 自動處理成短轉(zhuǎn)移 近轉(zhuǎn)移或遠轉(zhuǎn)移 可用操作符short nearptr或farptr強制 河南師范大學計算機與信息技術(shù)學院 40 2020 2 29 1 段內(nèi)直接尋址 intrasegmentdirectaddressing 轉(zhuǎn)向的有效地址是當前IP寄存器的內(nèi)容和指令中指定的8位或16位位移量之和 如圖3 9 1 所示 指令中的位移量是轉(zhuǎn)向的有效地址與當前IP值之差 所以當這一程序段在內(nèi)存中的不同區(qū)域運行時 這種尋址方式的轉(zhuǎn)移指令本身不會發(fā)生變化 這是符合程序的再定位要求的 轉(zhuǎn)向有效地址用相對于當前IP值的位移量來表示 所以它是一種相對尋址方式 河南師范大學計算機與信息技術(shù)學院 41 2020 2 29 1 段內(nèi)直接尋址 intrasegmentdirectaddressing 這種尋址方式適用于條件轉(zhuǎn)移及無條件轉(zhuǎn)移指令 當它用于條件轉(zhuǎn)移指令時 位移量只允許8位 386及其后繼機型條件轉(zhuǎn)移指令的位移量可為8位或32位 無條件轉(zhuǎn)移指令在位移量為8位時稱為短跳轉(zhuǎn) 位移量為16位時則稱為近跳轉(zhuǎn) 河南師范大學計算機與信息技術(shù)學院 42 2020 2 29 1 段內(nèi)直接尋址 intrasegmentdirectaddressing 指令的匯編語言格式表示為 JMPNEARPTRPROGIAJMPSHORTQUEST PROGIA和QUEST均為轉(zhuǎn)向的符號地址 在機器指令中 用位移量來表示 在匯編指令中 如果位移量為16位 則在符號地址前加操作符NERAPTR 如果位移量為8位 則在符號地址前加操作符SHORT 河南師范大學計算機與信息技術(shù)學院 43 2020 2 29 1 段內(nèi)直接尋址 intrasegmentdirectaddressing 對于386及其后繼機型 代碼段的偏移地址存放在EIP中 同樣用相對尋址的段內(nèi)直接方式 只是其位移量為8位或32位 8位對應于短跳轉(zhuǎn) 32位對應于近跳轉(zhuǎn) 由于位移量本身是個帶符號數(shù) 所以8位位移量的跳轉(zhuǎn)范圍在 128 127的范圍內(nèi) 16位位移量的跳轉(zhuǎn)范圍為 32K 32位位移量的跳轉(zhuǎn)范圍在 2G 所有機型的匯編格式均相同 河南師范大學計算機與信息技術(shù)學院 44 2020 2 29 2 段內(nèi)間接尋址 intrasegmentindirectaddressing 轉(zhuǎn)向有效地址是一個寄存器或是一個存儲單元的內(nèi)容 這種尋址方式以及以下的兩種段間尋址方式都不能用于條件轉(zhuǎn)移指令 也就是說 轉(zhuǎn)向有效地址可以用數(shù)據(jù)尋址方式中除立即數(shù)以外的任何一種尋址方式取得 所得到的轉(zhuǎn)向的有效地址用來取代IP寄存器的內(nèi)容 如圖3 9 2 所示 條件轉(zhuǎn)移指令只能使用段內(nèi)直接尋址的8位位移量 386及其后繼機型允許8位或32位位移量 JMP和CALL指令則可用四種尋址方式中的任何一種 河南師范大學計算機與信息技術(shù)學院 45 2020 2 29 2 段內(nèi)間接尋址 intrasegmentindirectaddressing 段內(nèi)間接尋址轉(zhuǎn)移指令的匯編格式可以表示為 JMPBXJMPWORDPTR BP TABLE 其中WORDPTR為操作符 用以指出其后的尋址方式所取得的轉(zhuǎn)向地址是一個字的有效地址 也就是說它是一種段內(nèi)轉(zhuǎn)移 以上兩種尋址方式均為段內(nèi)轉(zhuǎn)移 所以直接把求得的轉(zhuǎn)向的有效地址送到IP寄存器就可以了 河南師范大學計算機與信息技術(shù)學院 46 2020 2 29 段內(nèi)間接尋址舉例 假設(shè) DS 2000H BX 1256H SI 528FH 位移量 20A1H 232F7H 3280H 264E5H 2450H 例3 16JMPTABLE BX 則執(zhí)行該指令后 IP 16d DS BX 位移量 20000 1256 20A1 232F7 3280H 例3 15JMPBX則執(zhí)行該指令后 IP 1256H 例3 16JMPTABLE BX 則執(zhí)行該指令后 IP 16d DS BX 位移量 20000 1256 20A1 232F7 3280H 河南師范大學計算機與信息技術(shù)學院 47 2020 2 29 段內(nèi)間接尋址舉例 例3 16JMPTABLE BX 則執(zhí)行該指令后 IP 16d DS BX 位移量 20000 1256 20A1 232F7 3280H 例3 17JMP BX SI 則執(zhí)行該指令后 IP 16d DS BX 位移量 20000 1256 528F 264E5 2450H 以上說明舉例均針對8086的16位尋址來分析的 對于386及其后繼機型除16位尋址方式外 還可使用32位尋址方式 就方法而言是與16位尋址完全相同的 例3 18JMPBX例3 19JMPWORDPTRTABLE SI 河南師范大學計算機與信息技術(shù)學院 48 2020 2 29 3 段間直接尋址 intersegmentdirectaddressing 指令中直接提供了轉(zhuǎn)向段地址和偏移地址 所以只要 用指令中指定的偏移地址取代IP寄存器的內(nèi)容 用指令中指定的段地址取代CS寄存器的內(nèi)容就完成了從一個段到另一個段的轉(zhuǎn)移操作 如圖3 9 3 所示 河南師范大學計算機與信息技術(shù)學院 49 2020 2 29 3 段間直接尋址 intersegmentdirectaddressing 指令的匯編語言格式可表示為 JMPFARPTRNEXTROUTINT 其中 NEXTROUTINT為轉(zhuǎn)向的符號地址 FARPTR則是表示段間轉(zhuǎn)移的操作符 對于386及其后繼機型 段間轉(zhuǎn)移應修改CS和EIP的內(nèi)容 方法仍然和16位尋址時一致 河南師范大學計算機與信息技術(shù)學院 50 2020 2 29 4 段間間接尋址 intersegmentindirectaddressing 用存儲器中的兩個相繼字的內(nèi)容來取代IP和CS寄存器中的原始內(nèi)容 以達到段間轉(zhuǎn)移的目的 存儲單元的地址是由指令指定除立即數(shù)方式和寄存器方式以外的任何一種數(shù)據(jù)尋址方式取得 如圖3 9 4 所示 河南師范大學計算機與信息技術(shù)學院 51 2020 2 29 4 段間間接尋址 intersegmentindirectaddressing 這種指令的匯編語言格式可表示為 JMPDWORDPTR INTERS BX 其中 INTERS BX 說明數(shù)據(jù)尋址方式為直接變址尋址方式 DWORDPTR為雙字操作符 說明轉(zhuǎn)向地址需取雙字為段間轉(zhuǎn)移指令 對于386及其后繼機型 除16位尋址方式外 還可使用32位尋址方式 方法上也與16位尋址相同 如 JMPDWORDPTR EDI 河南師范大學計算機與信息技術(shù)學院 52 2020 2 29 3 2程序占有的空間和執(zhí)行時間 匯編語言程序要由 匯編程序 將它翻譯成機器語言程序 才能由計算機識別并執(zhí)行 一方面 80 x86的機器指令是可變字節(jié)指令 即不同指令或不同尋址方式的機器指令長度不同 一個程序一旦裝入計算機 它就會占有一定的存儲空間 程序量越大 占有的存儲空間也越大 一條16位格式指令的長度可為1 7個字節(jié) 32位指令則可達14個字節(jié) 如計入前綴字節(jié) 如段跨越前綴等 長度還會增加 河南師范大學計算機與信息技術(shù)學院 53 2020 2 29 3 2程序占有的空間和執(zhí)行時間 另一方面 當程序在計算機上運行時 訪問存儲器取得操作數(shù)或存放結(jié)果需要時間 運算器執(zhí)行指令也需要時間 盡管計算機的運行速度已有很大提高 時鐘頻率已從原來的5MHz提高到300MHz 在體系結(jié)構(gòu)方面采用了如數(shù)據(jù)預取 高速緩沖 流水線等多項重疊或并發(fā)技術(shù) 指令的執(zhí)行速度有了很大的提高 但程序運行仍是需要時間的 完成同樣功能的不同程序 可能在占有存儲空間和執(zhí)行時間上有很大差別 河南師范大學計算機與信息技術(shù)學院 54 2020 2 29 3 2程序占有的空間和執(zhí)行時間 因此 在編制程序時 如果對程序所占有的空間或程序的執(zhí)行時間要求不高 那就只要根據(jù)題意編制出合乎要求的程序就可以了 當然也應該盡量在空間和時間上提高運行的效率 對于程序所占有的存儲空間或者對于程序執(zhí)行的時間要求很高 在這種情況下 應仔細斟酌程序的算法 數(shù)據(jù)結(jié)構(gòu)以及指令與尋執(zhí)方式的選用 以編制出符合要求的程序 河南師范大學計算機與信息技術(shù)學院 55 2020 2 29 3 380X86的指令系統(tǒng) 河南師范大學計算機與信息技術(shù)學院 56 2020 2 29 準備知識 指令系統(tǒng) 計算機的指令系統(tǒng)就是指該計算機能夠執(zhí)行的全部指令的集合 每種計算機都有它支持的指令集合 16位8086指令系統(tǒng)是Intel80 x86系列微處理器指令系統(tǒng)的基礎(chǔ) 河南師范大學計算機與信息技術(shù)學院 57 2020 2 29 準備知識 學習指令的注意事項 指令的功能 該指令能夠?qū)崿F(xiàn)何種操作 通常指令助記符就是指令功能的英文單詞或其縮寫形式 指令支持的尋址方式 該指令中的操作數(shù)可以采用何種尋址方式 指令對標志的影響 該指令執(zhí)行后是否對各個標志位有影響 以及如何影響 其他方面 該指令其他需要特別注意的地方 如指令執(zhí)行時的約定設(shè)置 必須預置的參數(shù) 隱含使用的寄存器等 河南師范大學計算機與信息技術(shù)學院 58 2020 2 29 準備知識 匯編語言指令的格式 標號 指令助記符目的操作數(shù) 源操作數(shù) 注釋 標號表示該指令在主存中的邏輯地址 每個指令助記符就代表一種指令 目的和源操作數(shù)表示參與操作的對象 注釋是對該指令或程序段功能的說明 河南師范大學計算機與信息技術(shù)學院 59 2020 2 29 準備知識 指令操作數(shù)的表達 立即數(shù) i8 i16 i32 imm data dest src 寄存器 reg r8 r16 r32 seg 存儲器 mem m8 m16 m32 累加器 ac 河南師范大學計算機與信息技術(shù)學院 60 2020 2 29 3 3 1數(shù)據(jù)傳送指令 河南師范大學計算機與信息技術(shù)學院 61 2020 2 29 3 3 1數(shù)據(jù)傳送指令 數(shù)據(jù)傳送指令負責把數(shù)據(jù) 地址或立即數(shù)傳送到寄存器或存儲單元中 數(shù)據(jù)傳送是計算機中最基本 最重要的一種操作 傳送指令也是最常使用的一類指令 傳送指令把數(shù)據(jù)從一個位置傳送到另一個位置 除標志寄存器傳送指令外 均不影響標志位 河南師范大學計算機與信息技術(shù)學院 62 2020 2 29 1 通用數(shù)據(jù)傳送指令 河南師范大學計算機與信息技術(shù)學院 63 2020 2 29 1 MOV move 傳送 把一個字節(jié) 字或雙字的操作數(shù)從源地址傳送至目的地址 格式為 MOVDST SRC 執(zhí)行操作 DST SRC 其中DST表示目的操作數(shù) SRC表示源操作數(shù) MOV指令傳送功能示意圖 非法傳送情況 可以傳送字節(jié) 字 雙字 河南師范大學計算機與信息技術(shù)學院 64 2020 2 29 1 MOV move 傳送 MOVreg mem imm 立即數(shù)送寄存器或主存 MOVreg mem seg reg 寄存器送 段 寄存器或主存 MOVreg mem seg 段寄存器送寄存器或主存 MOVreg seg mem 主存送 段 寄存器 MOV指令傳送形式 示例1 示例2 示例3 示例4 河南師范大學計算機與信息技術(shù)學院 65 2020 2 29 2 MOVSX movewithsign extend 帶符號傳送 該指令屬386及其后繼機型可用指令 格式為 MOVSXDST SRC 執(zhí)行操作 DST 符號擴展 SRC 傳送時把源操作數(shù)符號擴展送入目的寄存器 可以是8位符號擴展到16位或32位 也可以是16位符號擴展到32位 河南師范大學計算機與信息技術(shù)學院 66 2020 2 29 2 MOVSX movewithsign extend 帶符號傳送 MOVreg r16 r32 reg r8 r16 寄存器送寄存器主存 MOVreg r16 r32 mem m8 m16 主存送寄存器 MOVSX指令傳送形式 示例 河南師范大學計算機與信息技術(shù)學院 67 2020 2 29 3 MOVZX movewithzero extend 帶零擴展傳送 該指令屬386及其后繼機型可用指令 格式為 MOVZXDST SRC 執(zhí)行操作 DST 零擴展 SRC 傳送時把源操作數(shù)零擴展送入目的寄存器 可以是8位符號擴展到16位或32位 也可以是16位符號擴展到32位 河南師范大學計算機與信息技術(shù)學院 68 2020 2 29 3 MOVZX movewithzero extend 帶零擴展傳送 MOVreg r16 r32 reg r8 r16 寄存器送寄存器主存 MOVreg r16 r32 mem m8 m16 主存送寄存器 MOVZX指令傳送形式 示例 MOVSX和MOVZX指令與一般雙操作數(shù)指令的差別是 一般雙操作數(shù)指令的源操作數(shù)和目的操作數(shù)的長度是一致的 但MOVSX和MOVZX的源操作數(shù)長度一定要小于目的操作數(shù)長度 河南師范大學計算機與信息技術(shù)學院 69 2020 2 29 堆棧 堆棧是一個 后進先出FILO 或說 先進后出FILO 的主存區(qū)域 位于堆棧段中 SS段寄存器記錄其段地址 堆棧只有一個出口 即當前棧頂 用堆棧指針寄存器SP ESP 指定 棧頂是地址較小的一端 低端 棧底不變 河南師范大學計算機與信息技術(shù)學院 70 2020 2 29 堆棧 堆棧 按照后進先出 LIFO 的原則組織的存儲器空間 棧 隊列 按照先進先出 FIFO 的原則組織的存儲器空間 河南師范大學計算機與信息技術(shù)學院 71 2020 2 29 4 PUSH pushontothestack 進棧 格式為 PUSHSRC 執(zhí)行操作 16位指令 SP SP 2 SP 1 SP SRC 32位指令 ESP ESP 4 ESP 3 ESP 2 ESP 1 ESP SRC 河南師范大學計算機與信息技術(shù)學院 72 2020 2 29 4 PUSH pushontothestack 進棧 PUSH指令可以有四種格式 PUSHregPUSHmemPUSHdataPUSHsegreg 也就是說 它可使用所有的尋址方式 但8086不允許PUSH指令使用立即數(shù)尋址方式 執(zhí)行演示 示例 河南師范大學計算機與信息技術(shù)學院 73 2020 2 29 5 POP popfromthestack 出棧 格式為 POPDST 執(zhí)行操作 16位指令 DST SP 1 SP 2 SP SP 2 32位指令 DST ESP 3 ESP 2 ESP 1 ESP ESP ESP 4 河南師范大學計算機與信息技術(shù)學院 74 2020 2 29 5 POP popfromthestack 出棧 POP指令允許的格式 POPregPOPmemPOPsegreg POP指令不允許使用立即數(shù)尋址方式 執(zhí)行演示 注意 POP指令的目的為段寄存器時 不允許使用CS寄存器 示例 河南師范大學計算機與信息技術(shù)學院 75 2020 2 29 堆棧操作 PUSH指令 先使堆棧指針SP ESP 減2 4 然后把一個字 雙字 操作數(shù)存入堆棧頂部 POP指令 把棧頂?shù)囊粋€字 雙字 傳送至指定的目的操作數(shù) 然后堆棧指針SP ESP 加2 4 SP或ESP的內(nèi)容在任何時候都指向當前的棧頂 所以PUSH和POP指令都必須根據(jù)當前SP或ESP的內(nèi)容來確定進?;虺鰲5拇鎯卧?而且必須及時修改指針 以保證SP或ESP指向當前的棧頂 具體見表3 3 河南師范大學計算機與信息技術(shù)學院 76 2020 2 29 特殊說明 8086中 PUSHSP指令入棧的是該指令已修改了的SP新值 PUSHESP指令入棧的卻是ESP在執(zhí)行該指令之前的舊值 此時PUSH和POP指令在使用與存儲器有關(guān)的尋址方式且用ESP作為基址寄存器時 PUSH指令使用該指令執(zhí)行前的ESP內(nèi)容 POP指令則使用該指令執(zhí)行后的ESP內(nèi)容來計算基地址 河南師范大學計算機與信息技術(shù)學院 77 2020 2 29 6 PUSHA PUSHAD pushallregisters 所有寄存器進棧 格式為 PUSHA執(zhí)行操作 16位通用寄存器依次進棧 進棧次序為 AX CX DX BX 指令執(zhí)行前的SP BP SI DI 指令執(zhí)行后 SP SP 16仍指向棧頂 格式為 PUSHAD執(zhí)行操作 32位通用寄存器依次進棧 進棧次序為 EAX ECX EDX EBX 指令執(zhí)行前的ESP EBP ESI和EDI 指令執(zhí)行后 ESP ESP 32 示例 河南師范大學計算機與信息技術(shù)學院 78 2020 2 29 7 POPA POPAD popallregisters 所有寄存器出棧 格式為 POPA執(zhí)行操作 16位通用寄存器依次出棧 出棧次序為 DI SI BP SP BX DX CX AX 指令執(zhí)行后 SP SP 16仍指向棧頂 應該說明的是 SP的出棧只是修改了指針使其后的BX能順利出棧 而堆棧中原先由PUSHA指令存入的SP的原始內(nèi)容被丟棄 并未真正送到SP寄存器中去 河南師范大學計算機與信息技術(shù)學院 79 2020 2 29 7 POPA POPAD popallregisters 所有寄存器出棧 格式為 POPAD執(zhí)行操作 32位通用寄存器依次出棧 出棧次序為 EDI ESI EBP ESP EBX EDX ECX EAX 指令執(zhí)行后 ESP ESP 32仍指向棧頂 與POPA相同 堆棧中存放的原ESP的內(nèi)容被丟棄而不裝入ESP寄存器 河南師范大學計算機與信息技術(shù)學院 80 2020 2 29 堆棧的操作特點 堆棧只有兩種基本操作 進棧和出棧 對應四條指令PUSH POP PUSHA PUSHAD POPA POPAD PUSHA和POPA可用于286及其后繼機型 PUSHAD和POPAD可用于386及其后繼機型 堆棧的存取在16位指令中必須以字為單位 不允許字節(jié)堆棧 在32位指令中必須以雙字為單位 所以PUSH和POP指令只能作字或雙字操作 河南師范大學計算機與信息技術(shù)學院 81 2020 2 29 堆棧的特點 字 雙字 數(shù)據(jù)從棧頂壓入和彈出時 都是低地址字節(jié) 字 送低字節(jié) 字 高地址字節(jié) 字 送高字節(jié) 字 堆棧操作遵循先進后出原則 但可用存儲器尋址方式隨機存取堆棧中的數(shù)據(jù) 堆棧常用來 臨時存放數(shù)據(jù)傳遞參數(shù)保存和恢復寄存器 示例 河南師范大學計算機與信息技術(shù)學院 82 2020 2 29 堆棧的特點 如果在程序中要用到某些寄存器 但它們的內(nèi)容卻在將來還有用 這是就可以用PUSHA PUSHAD指令把它們保存在堆棧中 然后在需要時再用POPA POPAD指令恢復其原始內(nèi)容 子程序結(jié)構(gòu)的程序和中斷程序中就經(jīng)常會用到它們 河南師范大學計算機與信息技術(shù)學院 83 2020 2 29 8 XCHG exchange 交換 把兩個地方的數(shù)據(jù)進行互換 格式為 XCHGOPR1 OPR2 執(zhí)行操作 OPR1 OPR2 其中OPR表示操作數(shù) 指令允許字或字節(jié)操作 386及其后繼機型還允許雙字操作 河南師范大學計算機與信息技術(shù)學院 84 2020 2 29 8 XCHG exchange 交換 XCHGreg reg mem reg reg mem XCHG指令傳送形式 示例2 寄存器與寄存器之間對換數(shù)據(jù) 寄存器與存儲器之間對換數(shù)據(jù) 不能在存儲器與存儲器之間對換數(shù)據(jù) 不允許使用段寄存器 執(zhí)行演示 示例1 河南師范大學計算機與信息技術(shù)學院 85 2020 2 29 2 累加器專用傳送指令 這組指令只限于使用累加器EAX AX或AL傳送信息 河南師范大學計算機與信息技術(shù)學院 86 2020 2 29 輸入 輸出指令 IN OUT 在80 x86里 外設(shè)與CPU之間的通信都由輸入輸出 IN OUT 指令來完成 呈現(xiàn)給程序員的外設(shè)是端口 Port 即I O地址 8086用于尋址外設(shè)端口的地址線為16條 端口最多為216 65536 64K 個 端口號 即外部設(shè)備的端口地址 為0000H FFFFH CPU只能用累加器 AL或AX或EAX 接收或發(fā)送信息 IN完成從I O到CPU的信息傳送 而OUT則完成從CPU到I O的信息傳送 每個端口用于傳送一個字節(jié)的外設(shè)數(shù)據(jù) 河南師范大學計算機與信息技術(shù)學院 87 2020 2 29 輸入輸出尋址方式 直接尋址 長格式 只用于尋址00H FFH前256個端口 操作數(shù)i8表示端口號 間接尋址 短格式 可用于尋址全部64K個端口 端口號可以從0000 0FFFFH DX寄存器的值就是端口號 對大于FFH的端口只能采用間接尋址方式 河南師范大學計算機與信息技術(shù)學院 88 2020 2 29 1 IN input 輸入 河南師范大學計算機與信息技術(shù)學院 89 2020 2 29 1 IN input 輸入 河南師范大學計算機與信息技術(shù)學院 90 2020 2 29 2 OUT output 輸出 河南師范大學計算機與信息技術(shù)學院 91 2020 2 29 2 OUT output 輸出 河南師范大學計算機與信息技術(shù)學院 92 2020 2 29 輸入 輸出指令 IN OUT 注意 這里的端口號或DX的內(nèi)容均為地址 而傳送的是端口中的信息 而且在用短格式時DX內(nèi)容就是端口號本身 不需要由任何段寄存器來修改它的值 操作提示 示例2 IN和OUT指令提供了雙字 字和字節(jié)三種使用方式 選用哪一種 則取決于外設(shè)端口寬度 如端口寬度只有8位 則只能用字節(jié)指令傳送信息 示例1 河南師范大學計算機與信息技術(shù)學院 93 2020 2 29 3 XLAT translate 換碼 將BX EBX 指定的緩沖區(qū)中 AL指定的位移處的一個字節(jié)數(shù)據(jù)取出賦給AL 格式為 XLATOPR或XLAT 執(zhí)行的操作 16位指令 AL BX AL 32位指令 AL EBX AL 河南師范大學計算機與信息技術(shù)學院 94 2020 2 29 3 XLAT translate 換碼 OPR為表格的首地址 一般為符號地址 在這里只是為提高程序的可讀性而設(shè)置的 指令執(zhí)行時只使用預先已存入BX或EBX中的表格首地址 而并不用匯編格式中指定的值 換碼指令執(zhí)行前 在主存建立一個字節(jié)表格 內(nèi)含要轉(zhuǎn)換成的目的代碼 表格首地址存放于BX或EBX AL存放相對表格首地址的位移量 即需要轉(zhuǎn)換的代碼 換碼指令執(zhí)行后 將AL寄存器的內(nèi)容轉(zhuǎn)換為目標代碼 執(zhí)行演示 示例 河南師范大學計算機與信息技術(shù)學院 95 2020 2 29 3 地址傳送指令 地址傳送指令將存儲器單元的邏輯地址送至指定的寄存器 河南師范大學計算機與信息技術(shù)學院 96 2020 2 29 1 LEA loadeffectiveaddress 有效地址傳送寄存器 格式為 LEAREG SRC 執(zhí)行的操作 REG MEM的有效地址 指令把源操作數(shù)的有效地址送到指定的寄存器中 該指令的目的操作數(shù)可使用16位或32位寄存器 但不能使用段寄存器 源操作數(shù)可使用除立即數(shù)和寄存器外的任一種存儲器尋址方式 由于存在操作數(shù)長度和地址長度的不同 該指令執(zhí)行的操作如表3 4所示 示例1 示例2 河南師范大學計算機與信息技術(shù)學院 97 2020 2 29 2 指針送寄存器和DS ES FS GS SS 該組指令包括LDS LES LFS LGS LSS 格式以LDS為例為 LDSREG SRC 執(zhí)行的操作 16位指令 REG MEM SREG MEM 2 32位指令 REG MEM SREG MEM 4 河南師范大學計算機與信息技術(shù)學院 98 2020 2 29 2 指針送寄存器和DS ES FS GS SS 該組指令的源操作數(shù)只能用存儲器尋址方式 根據(jù)任一種存儲器尋址方式找到一個存儲單元 其他指令格式與LDS指令格式相同 僅指定的段寄存器不同 本組指令的目的寄存器不允許使用段寄存器 LFS LGS和LSS只能用于386及其后繼機型中 示例 河南師范大學計算機與信息技術(shù)學院 99 2020 2 29 4 標志寄存器傳送指令 用來傳送標志寄存器 E FLAGS的內(nèi)容 方便進行對各個標志位的直接操作 河南師范大學計算機與信息技術(shù)學院 100 2020 2 29 1 LAHF loadAHwithflags 標志送AH 格式為 LAHF 執(zhí)行的操作 AH FLAGS的低字節(jié) 河南師范大學計算機與信息技術(shù)學院 101 2020 2 29 2 SAHF storeAHintoflags AH送標志寄存器 格式為 SAHF 執(zhí)行的操作 FLAGS的低字節(jié) AH 河南師范大學計算機與信息技術(shù)學院 102 2020 2 29 3 PUSHF PUSHFD pushtheflagsoreflags 標志進棧 格式為 PUSHFPUSHFD 執(zhí)行的操作 PUSHF SP SP 2 SP 1 SP FLAGS PUSHFD ESP ESP 4 ESP 3 ESP 2 ESP 1 ESP EFLAGSAND0FCFFFFH 清除VM和RF位 河南師范大學計算機與信息技術(shù)學院 103 2020 2 29 4 POPF POPFD poptheflagsoreflags 標志出棧 格式為 POPFPOPFD 執(zhí)行的操作 POPF FLAGS SP 1 SP SP SP 2PUSHFD ESP 3 ESP 2 ESP 1 ESP EFLAGS ESP ESP 4 河南師范大學計算機與信息技術(shù)學院 104 2020 2 29 該組指令對標志位的影響 示例 河南師范大學計算機與信息技術(shù)學院 105 2020 2 29 5 類型轉(zhuǎn)換指令 符號擴展指令 河南師范大學計算機與信息技術(shù)學院 106 2020 2 29 1 CBW convertbytetoword 字節(jié)轉(zhuǎn)換為字 格式 CBW 執(zhí)行的操作 AL的內(nèi)容符號擴展到AH 形成AX中的字 即如果 AL 的最高有效位為0 則 AH 0 如 AL 的最高有效位為1 則 AH 0FFH 河南師范大學計算機與信息技術(shù)學院 107 2020 2 29 2 CWD CWDE convertwordtodoubleword 字轉(zhuǎn)換為雙字 格式 CWD 執(zhí)行的操作 AX的內(nèi)容符號擴展到DX 形成DX AX中的雙字 即如果 AX 的最高有效位為0 則 DX 0 如果 AX 的最高有效位為1 則 DX 0FFFFH 格式 CWDE 執(zhí)行的操作 AX的內(nèi)容符號擴展到EAX 形成EAX中的雙字 河南師范大學計算機與信息技術(shù)學院 108 2020 2 29 3 CDQ convertdoubletoquad 雙字轉(zhuǎn)換為4字 格式 CDQ 執(zhí)行的操作 EAX的內(nèi)容符號擴展到EDX 形成EDX EAX中的4字 示例 河南師范大學計算機與信息技術(shù)學院 109 2020 2 29 4 BSWAP byteswap 字節(jié)交換 格式 BSWAPr32 該指令只能用于486及其后繼機型 R32指32位寄存器 示例 執(zhí)行的操作 使指令指定的32位寄存器的字節(jié)次序變反 具體操作為 1 4字節(jié)互換 2 3字節(jié)互換 河南師范大學計算機與信息技術(shù)學院 110 2020 2 29 3 3 2算術(shù)指令 河南師范大學計算機與信息技術(shù)學院 111 2020 2 29 3 3 2算術(shù)指令 80 x86的算術(shù)運算指令包括二進制運算和十進制運算指令 有雙操作數(shù)指令 也有單操作數(shù)指令 單操作數(shù)指令不允許使用立即數(shù)方式 雙操作數(shù)指令中 必須有一個操作數(shù)在寄存器中 源操作數(shù)為立即數(shù)的情況除外 請注意算術(shù)運算類指令對標志的影響 河南師范大學計算機與信息技術(shù)學院 112 2020 2 29 1 加法指令 河南師范大學計算機與信息技術(shù)學院 113 2020 2 29 1 ADD add 加法 ADD指令將源與目的操作數(shù)相加 結(jié)果送到目的操作數(shù) 格式 ADDDST SRC 執(zhí)行的操作 DST SRC DST ADD指令按狀態(tài)標志的定義相應設(shè)置 河南師范大學計算機與信息技術(shù)學院 114 2020 2 29 1 ADD add 加法 ADDreg imm reg mem reg reg imm reg mem ADD指令形式 ADDmem imm reg mem mem imm reg 示例 河南師范大學計算機與信息技術(shù)學院 115 2020 2 29 2 ADC addwithcarry 帶進位加法 ADC指令將源與目的操作數(shù)相加 再加上進位CF標志 結(jié)果送到目的操作數(shù) 格式 ADCDST SRC 執(zhí)行的操作 DST SRC DST CF ADC指令按狀態(tài)標志的定義相應設(shè)置 ADC指令主要與ADD配合 實現(xiàn)多精度加法運算 其中CF為進位位的值 河南師范大學計算機與信息技術(shù)學院 116 2020 2 29 2 ADC addwithcarry 帶進位加法 ADCreg imm reg mem reg reg imm reg mem CF ADC指令形式 ADCmem imm reg mem mem imm reg CF 示例 河南師范大學計算機與信息技術(shù)學院 117 2020 2 29 3 INC increment 加1 INC指令對操作數(shù)加1 增量 格式 INCOPR 執(zhí)行的操作 OPR OPR 1 INC指令不影響進位CF標志 按定義設(shè)置其他狀態(tài)標志 河南師范大學計算機與信息技術(shù)學院 118 2020 2 29 3 INC increment 加1 INCreg mem reg mem reg mem 1 INC指令形式 INCBXINCbyteptr BX 以上三條指令都可作字節(jié) 字或雙字 386及其后繼機型 運算 河南師范大學計算機與信息技術(shù)學院 119 2020 2 29 4 XADD exchangeandadd 交換并相加 XADD指令把目的操作數(shù)裝入源 并把源和目的操作數(shù)之和送目的地址 格式 XADDDST SRC 執(zhí)行的操作 TEMP SRC DST SRC DST DST TEMP 該指令只能用于486及其后繼機型 XADD指令按狀態(tài)標志的定義相應設(shè)置 河南師范大學計算機與信息技術(shù)學院 120 2020 2 29 4 XADD exchangeandadd 交換并相加 XADDreg mem reg temp reg mem reg reg reg mem reg mem temp XADD指令形式 示例 該指令可作雙字 字或字節(jié)運算 河南師范大學計算機與信息技術(shù)學院 121 2020 2 29 2 減法指令 河南師范大學計算機與信息技術(shù)學院 122 2020 2 29 1 SUB substract 減法 SUB指令將目的操作數(shù)減去源操作數(shù) 結(jié)果送到目的操作數(shù) 格式 SUBDST SRC 執(zhí)行的操作 DST DST SRC SUB指令按照定義相應設(shè)置狀態(tài)標志 河南師范大學計算機與信息技術(shù)學院 123 2020 2 29 1 SUB substract 減法 SUBreg imm reg mem reg reg imm reg mem SUB指令形式 SUBmem imm reg mem mem imm reg 示例1 示例2 河南師范大學計算機與信息技術(shù)學院 124 2020 2 29 2 SBB substractwithcarry 帶進位減法 SBB指令將目的操作數(shù)減去源操作數(shù) 再減去借位CF 進位 結(jié)果送到目的操作數(shù) 格式 SBBDST SRC 執(zhí)行的操作 DST DST SRC CF SBB指令按照定義相應設(shè)置狀態(tài)標志- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
19.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- X86 指令系統(tǒng) 尋址 方式
鏈接地址:http://www.820124.com/p-6575258.html