王海波《微機(jī)原理與接口技術(shù)》第4章 指令系統(tǒng).ppt_第1頁
王海波《微機(jī)原理與接口技術(shù)》第4章 指令系統(tǒng).ppt_第2頁
王海波《微機(jī)原理與接口技術(shù)》第4章 指令系統(tǒng).ppt_第3頁
王海波《微機(jī)原理與接口技術(shù)》第4章 指令系統(tǒng).ppt_第4頁
王海波《微機(jī)原理與接口技術(shù)》第4章 指令系統(tǒng).ppt_第5頁
已閱讀5頁,還剩155頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章8086instructionsystem本章主要教學(xué)內(nèi)容1 8086指令的基本格式2 8086指令系統(tǒng)的尋址方式3 8086指令的應(yīng)用本章教學(xué)目的使學(xué)生掌握指令的尋址方式過程 掌握指令的應(yīng)用 教學(xué)重點(diǎn) 指令系統(tǒng)的尋址方式和指令的應(yīng)用教學(xué)難點(diǎn) 指令的尋址方式 第4章8086InstructionSystem 4 1指令的基本概念和基本格式4 2指令的尋址方式4 38086指令系統(tǒng)4 4中斷調(diào)用類指令 4 1DefinitionandFormatofInstruction Machineinstruction 指揮計(jì)算機(jī)完成某種操作的命令 Format OperationCode OPD OPS 0 1 2 OPD 目的操作數(shù)OPS 源操作數(shù) 4 2InstructionAddressing 4 2 1尋址方式的基本概念4 2 2與數(shù)據(jù)有關(guān)的尋址方式4 2 3I O端口尋址方式 4 2 1DefinitionofAddressing AddressingApproach 指令中操作數(shù)字段實(shí)質(zhì)上是指出操作數(shù)存放于何處 一般來說 操作數(shù)可以跟隨在指令操作碼之后 稱為立即數(shù) immediatevalue 操作數(shù)也可以存放在CPU內(nèi)部的寄存器中 稱為寄存器操作數(shù) 絕大多數(shù)的操作數(shù)存放在內(nèi)存儲(chǔ)器中 稱為存儲(chǔ)器操作數(shù) 指令指定操作數(shù)的位置 即給出地址信息 在執(zhí)行時(shí)需要根據(jù)這個(gè)地址信息找到需要的操作數(shù) 這種尋找操作數(shù)的過程稱為尋址 而尋找操作數(shù)的方法稱為尋址方式 4 2 2relatedtodata 1 立即尋址 immediateaddressing 立即尋址方式中 指令操作碼和操作數(shù)都在存儲(chǔ)器代碼段中 匯編格式 n n為立即操作數(shù) 是用8位或16位二進(jìn)制補(bǔ)碼表示的有符號數(shù) 功能 操作數(shù)存放在存儲(chǔ)器 指令下一單元的內(nèi)容為立即操作數(shù)n 圖形表示如右 例4 1 例2 5 MOVAX 2A50H執(zhí)行后 AX 該例中源操作數(shù)為立即尋址方式 立即數(shù)為2A50H 存放在指令的下一單元 執(zhí)行 2A50H AX執(zhí)行后 AX 2A50HHOWarrangeitinAX AXcanbeAL ormemoryIVcannotbeOPDbutonlyOPS 2 RegisterAddressing 寄存器尋址方式的操作數(shù)在指令指明的寄存器中 匯編格式 R其中R表示寄存器名 功能 操作數(shù)直接存放在寄存器R中 圖形表示 R指令 操作數(shù) 例4 2 下列程序執(zhí)行后 AX 1234H BX 5678HMOVAX BXAX BX HOWABOUTMOVAL BHMOVAH BXMOVAX BLKeptsamelength 3 MemoryAddressing 如果操作碼所需操作數(shù)存放在內(nèi)存儲(chǔ)器中 則指令中需要給出操作數(shù)的地址信息 為了提高程序的靈活性 8086指令系統(tǒng)提供了多種存儲(chǔ)器尋址方式 1 直接尋址 2 寄存器間接尋址 3 寄存器相對尋址 4 基址變址尋址 5 關(guān)于段跨躍前綴 1 直接尋址 directaddressing 匯編格式 含有變量的地址表達(dá)式 寄存器名 EA bedirectlygiven DefaultDSorX EA 功能 指令下一字單元的內(nèi)容是操作數(shù)的偏移地址EA 圖形表示 例4 3 例4 3 寄存器和存儲(chǔ)器內(nèi)容為 AX 1212H BUF為數(shù)據(jù)段定義的變量 其偏移地址是2000H DS 3000H 32000H 4545H 執(zhí)行指令 MOVAX BUF執(zhí)行后 AX 圖形表示 執(zhí)行 32000H AX執(zhí)行后 AX 4545H 指令操作例 MOVAX 3102H AL 3102H AH 3103H 如果 DS 2000H 23012H CDH 23013H ABH則操作數(shù)的物理地址為 20000H 3102H 23102H指令執(zhí)行后 AX ABCDH MOV操作碼 02H 31H AH AL 23102H CDH ABH 存儲(chǔ)器 代碼段 數(shù)據(jù)段 立即數(shù) 操作碼 低8位 高8位 存儲(chǔ)器 MOV操作碼 02H 31H AH AL 代碼段 代碼段 立即尋址指令在存儲(chǔ)器中的存放形式 AX 指令操作例 MOVAX 3102H AX3102H執(zhí)行后 AH 31H AL 02H 2 寄存器間接尋址 registerindirectaddressing 寄存器間接尋址方式中 寄存器的內(nèi)容為操作數(shù)的偏移地址EA 操作數(shù)在存儲(chǔ)器中 匯編格式 R 功能 操作數(shù)存放在存儲(chǔ)器 寄存器R存放操作數(shù)的偏移地址EA Donotforgetbracket 寄存器間接尋址示意圖 例如 MOVAX BX 若 DS 2000H BX 1000H 物理地址 20000H 1000H 21000H 指令執(zhí)行前 AX 2030H 21000H 0A0H 21001H 50H 指令執(zhí)行后 AX 50A0H 21000H 0A0H 21001H 50H 指令執(zhí)行情況如下 偏移地址EA計(jì)算方法如下 EA SI SI作間址寄存器 DS DI DI作間址寄存器 DS BX BX作間址寄存器 DS BP BP作間址寄存器 SS 執(zhí)行指令 MOVAX BP 執(zhí)行后 AX BP SS 20030H 圖形表示如下 例4 4 寄存器和存儲(chǔ)器內(nèi)容分別為 AX 0 BP 0030H SS 2000H 20030H 1234H 3 寄存器相對尋址 registerrelativeaddressing 寄存器相對尋址方式是在指令中給定一個(gè)基址寄存器 或變址寄存器 名和一個(gè)8位或16位的相對偏移量 displacement 兩者之和作為操作數(shù)的有效地址 對BX SI DI這三個(gè)間址寄存器 指示的是數(shù)據(jù)段中的數(shù)據(jù) 而用BP作間址寄存器 則指示的是堆棧段中的數(shù)據(jù) 匯編格式 X R X表示位移量 是8位或16位二進(jìn)制補(bǔ)碼表示的有符號數(shù) 功能 操作數(shù)存放在存儲(chǔ)器 寄存器R的內(nèi)容加位移量X為操作數(shù)的偏移地址EA 偏移地址EA計(jì)算方法如下 例4 5 設(shè)執(zhí)行前 AX 0040H BX 0030H DS 2000H 20036H 0050H執(zhí)行指令 MOVAX 6 BX 執(zhí)行后 AX BX DS 20036H Difference 4 基址變址尋址 basedindexedaddressing 基址變址尋址方式是在指令中給出一個(gè)基址寄存器名和一個(gè)變址寄存器名 兩者內(nèi)容之和作為操作數(shù)的有效地址 基址寄存器為BX或BP 變址寄存器為SI或DI 但指令中不能同時(shí)出現(xiàn)兩個(gè)基址寄存器或兩個(gè)變址寄存器 如果基址寄存器為BX 則段寄存器使用DS 如果基址寄存器用BP 則段寄存器用SS 匯編格式 BR IR 功能 操作數(shù)存放在存儲(chǔ)器 BR的內(nèi)容加IR的內(nèi)容是操作數(shù)的偏移地址EA 操作數(shù)偏移地址EA計(jì)算方法如下 例4 6 例如MOVAL BX SI MOVAL BX SI 若指令執(zhí)行前 DS 1000H BX 0010H SI 0002H 10012H 45H則EA BX SI 0012H PA DS 10H EA 10012H指令執(zhí)行后 AL 45H 相對基址變址尋址 relativebasedindexedaddressing 匯編格式 X BR IR 功能 操作數(shù)存放在存儲(chǔ)器 BR的內(nèi)容加IR的內(nèi)容加位移量X是操作數(shù)的偏移地址EA 例 例如MOVAL 21H BX SI MOVAL 21H BX SI 若指令執(zhí)行前 DS 1000H BX 0010H SI 0002H 10033H 45H則EA 21H BX SI 0033H PA DS 10H EA 10033H指令執(zhí)行后 AL 45H 5 跨段問題 按前述規(guī)定 若選用BP作間址基址寄存器 變址寄存器或基址寄存器 則操作數(shù)在堆棧段 操作數(shù)的物理地址PA由堆棧段寄存器SS的內(nèi)容左移4位與偏移地址EA相加后形成 否則 操作數(shù)在數(shù)據(jù)段 操作數(shù)的物理地址PA由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移EA相加后形成 該規(guī)定為系統(tǒng)默認(rèn)狀態(tài) 當(dāng)要否定默認(rèn)狀態(tài) 到非約定段尋找操作數(shù)時(shí) 必須用跨段前綴指明操作數(shù)的段寄存器名 匯編格式 段寄存器名 操作數(shù)地址 功能 段寄存器名指明操作數(shù)屬哪個(gè)段 例4 7 跨段前綴示例 MOVAX DS BP MOVCX SS SI 該例中 DS SS 均為跨段前綴 此時(shí)默認(rèn)狀態(tài)無效 操作數(shù)的物理地址PA由段寄存器內(nèi)容左移4位加偏移EA形成 上述2條指令的源操作數(shù)物理地址分別為 PA1 DS 左移4位 BP PA2 SS 左移4位 SI 4 2 3I O端口尋址方式I Ointerfaceaddressing 8086CPU采用獨(dú)立編址的I O端口 可以最多訪問64K個(gè)字節(jié)端口或32K個(gè)字端口 用專門的IN指令和OUT指令訪問 I O端口尋址只用于這兩種指令中 尋址方式有如下兩種 1 直接端口尋址在指令中直接給出端口地址 端口地址一般采用2位十六進(jìn)制數(shù) 也可以用符號表示 這種尋址方式為直接端口尋址 因此 直接端口尋址可訪問的端口數(shù)為0 255個(gè) 例如 INAL 25H2 寄存器間接端口尋址如果訪問的端口地址值大于255 則必須用I O端口的間接尋址方式 所謂間接尋址 是指把I O端口的地址先送到DX中 用DX作間接尋址寄存器 而且只能用DX寄存器 例如 MOVDX 378HINAL DX 計(jì)算機(jī)原理與匯編語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書李志民編著中南大學(xué)信息科學(xué)與工程學(xué)院自動(dòng)化所 指令的機(jī)器碼 machinecode 表示方法 一 機(jī)器語言指令的編碼目的和特點(diǎn)1 機(jī)器語言指令匯編語言經(jīng)過匯編機(jī)器語言流程序程序程序用符號指令編寫的程序相當(dāng)于解釋用二進(jìn)制表示如 CLC 1111 1000WAIT 1001 1011 MOD 二 機(jī)器語言指令代碼的編制1 編碼格式說明 以寄存器之間或寄存器與存儲(chǔ)器之間數(shù)據(jù)傳送的MOV指令為例 151098765320D15 D10位 6為操作碼 規(guī)定說明指令的功能 D9位 D位 規(guī)定數(shù)據(jù)的傳送方向 direction D 1 數(shù)據(jù)傳送到寄存器 或存儲(chǔ)器 D 0 數(shù)據(jù)從寄存器 或M單元 傳出 R M REG 100010DW 操作碼 典型的MOV指令的編碼格式 D8位 W位 規(guī)定數(shù)據(jù)類型W 1 數(shù)據(jù)為一個(gè)字W 0 數(shù)據(jù)是一個(gè)字節(jié)D5D4D3位 REG位 寄存器編碼 REG W 1字 W 0字節(jié) AXAL BXBL CXCL DXDL SPAH BPCH SIDH 000 011 001 010 100 111 101 110 REG 段寄存器 00CS 11DS 00ES 10SS 8086寄存器編碼表 由于MOV指令有兩個(gè)操作數(shù) 一個(gè)必為寄存器 由REG確定 另一個(gè)可能是寄存器 可能是存儲(chǔ)單元 由MOD和R M編碼確定 MOD和R M的編碼 MOD R M 000110 11 W 0W 1 000 BX SI BX SI D8 BX SI D16ALAX 001 BX DI BX DI D8 BX DI D16CLCX 010 BP SI BP SI D8 BP SI D16DLDX 011 BP DI BP DI D8 BP DI D16BLBX 101 DI DI D8 DI D16CHBP 110D16 直接地址 BP D8 BP D16DHSI 100 SI SI D8 SI D16AHSP 111 BX BX D8 BX D16BHDI Example MOVSP BX100010DWMODREGR MW 1D 1MOD 11REG 100R M 0111000101111100011W 1D 0MOD 11REG 011R M 1001000100111011100 4 38086instructionsystem 包括數(shù)據(jù)傳送類指令 算術(shù)運(yùn)算類指令 位操作類指令 串操作類指令 控制轉(zhuǎn)移類指令 處理機(jī)控制類指令 后幾節(jié)將分別介紹這些指令的語句格式和功能 4 3 1數(shù)據(jù)傳送類指令4 3 2算術(shù)運(yùn)算類指令4 3 3邏輯運(yùn)算與移位類指令4 3 4串操作類指令4 3 5控制轉(zhuǎn)移類指令4 3 6處理器控制指令 4 3 1數(shù)據(jù)傳送類指令 1通用數(shù)據(jù)傳送指令2累加器專用傳送指令3地址傳送指令4標(biāo)志寄存器傳送指令 通用數(shù)據(jù)傳送指令 generalpurposedatatransfer 1 傳送指令MOV 2 堆棧指令PUSH POP 3 數(shù)據(jù)交換指令XCHG 1 傳送指令MOVformat MOVOPD OPSfunction 將源操作數(shù)傳送入目的地址 源地址內(nèi)容不變 即 OPS OPD 下圖4 1描述了MOV指令在傳送數(shù)據(jù)時(shí)允許傳送的路徑及類型 圖4 1MOV指令所允許的數(shù)據(jù)傳送路徑及類型 MOV指令的形式有如下幾種 1 從通用寄存器到通用寄存器MOVreg1 reg22 立即數(shù)傳送到通用寄存器MOVreg data3 通用寄存器和存儲(chǔ)單元之間MOVmem reg reg mem 4 立即數(shù)傳送到存儲(chǔ)單元MOVmem data5 段寄存器與通用寄存器間的數(shù)據(jù)傳送MOVseg reg或MOVreg seg6 段寄存器與存儲(chǔ)單元間的數(shù)據(jù)傳送MOVseg mem或MOVmem seg Attention IP不能做操作數(shù) DorS CS和IV不能用作目的操作數(shù) D 兩操作數(shù)中必有一寄存器 exceptIVasS IVcannotbedirectlyassignedtoSR 例4 8 MOVAL B 把字符B的ASCII碼 42H AL中MOVAX DATA MOVDS AX 以DATA為數(shù)據(jù)段的基址 由于DS不能用立即數(shù)傳送 所以先把DATA AX 再由AX DS 2 數(shù)據(jù)交換指令XCHG Format XCHGOPD OPSFunction 將源地址與目的地址中的內(nèi)容互換 即 OPD OPS OPS OPD 例4 9 寄存器與存儲(chǔ)器之間數(shù)據(jù)交換 MOVAX 5678H AX 5678HMOVBX 0FFFFH BX 0FFFFHXCHGAX BX AX 0FFFFH BX 5678H 2 數(shù)據(jù)交換指令XCHG ATTENTION R與R之間R與M之間 段寄存器不行 M與M之間不行 2 堆棧 Stack 操作指令 1 進(jìn)棧指令PUSH2 出棧指令POP 1 進(jìn)棧指令PUSH format PUSHOPSfunction 將寄存器 段寄存器或存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)壓入堆棧 堆棧指針減2 即 SP SP OPS 15 8 SP SP SP OPS 7 0 SP 2 出棧指令POP 語句格式 POPOPD功能 將棧頂元素彈出送至某一寄存器 段寄存器 除CS外 或存儲(chǔ)器 堆棧指針加2 從POP指令功能可看出 該指令為PUSH指令的逆過程 即 SP OPD 7 0 SP SP SP OPD 15 8 SP SP 例 設(shè)SS 2000HSP 40HBX 3120HAX 25FEH執(zhí)行下述程序PUSHBXPUSHAXPOPBX堆棧中的數(shù)據(jù)和SP的變化情況如下圖 2000 0000 FE 25 20 31 2000 003C 2000 0040 SP AX 25FEH BX 3120H C 執(zhí)行PUSHAX指令后 2000 0000 2000 0040 SP AX 25FEH BX 3120H A 指令執(zhí)行前 2000 0000 FE 25 20 31 2000 003E 2000 0040 SP AX 25FEH BX 25FEH D 執(zhí)行POPBX指令后 2000 0000 2000 0040 SP AX 25FEH BX 3120H B 執(zhí)行PUSHBX指令后 31 20 2000 003E 2 累加器專用傳送指令 1 輸入 輸出指令 2 XLAT查表指令 1 輸入指令I(lǐng)N 輸入指令用來從指定的外設(shè)寄存器取信息送入累加器 它有四種形式 語句格式 INAL PORT功能 PORT AL語句格式 INAX PORT功能 PORT AX語句格式 INAL DX功能 DX AL語句格式 INAX DX功能 DX AL 例 INAL 0F1H AL F1H端口內(nèi)容INAX 80H AL 80H口內(nèi)容AH 81H口內(nèi)容MOVDX 310H INAL DX AL 310H口內(nèi)容INAX DX AL 310H口內(nèi)容AH 311H口內(nèi)容 2 輸出指令OUT 輸出指令用來把累加器的內(nèi)容送往指定的外設(shè)存儲(chǔ)器 它有四種形式 語句格式 OUTPORT AL功能 AL PORT語句格式 OUTPORT AX功能 AX PORT語句格式 OUTDX AL功能 AL DX 語句格式 OUTDX AX功能 AX DX 例3 34下面幾個(gè)是用OUT指令對輸出端口進(jìn)行操作的例子OUT85H AL 85H端口AL內(nèi)容MOVDX 0FF4HOUTDX AL FF4H端口AL內(nèi)容MOVDX 300H DX指向300HOUTDX AX 300H端口AL內(nèi)容301H端口AH內(nèi)容 2 查表轉(zhuǎn)換指令XLAT format XLAT轉(zhuǎn)換表或XLATfunction 把一個(gè)字節(jié)從一種代碼轉(zhuǎn)換為另一種代碼 使用XLAT前 建一個(gè)表格 此表最大為256單元 表格首址 BX AL中存表中位移量 執(zhí)行完XLAT指令后 AL 轉(zhuǎn)換后的代碼 3地址傳送指令 1 傳送有效地址指令LEA 2 傳送有效地址及數(shù)據(jù)段首址指令LDS 3 傳送有效地址及附加數(shù)據(jù)段指令LES 1 傳送有效地址指令LEA 語句格式 LEAOPD OPS功能 主存按源地址的尋址方式計(jì)算偏移地址 將偏移地址送入指定寄存器 LEA與MOV指令的區(qū)別 MOV傳送源操作數(shù)的內(nèi)容LEA指令傳送的是偏移地址例 設(shè)SI 1000H DS 5000H 51000H 1234HLEABX SI BX 1000HMOVBX SI BX 1234H 51000H 2 傳送有效地址及數(shù)據(jù)段首址指令LDS loadpointerusingDS 語句格式 LDSOPD OPS功能 將主存中指定字單元數(shù)據(jù)送入指定存儲(chǔ)器 下一字單元數(shù)據(jù)送DS寄存器 Format LDSOPD OPS指令功能 源 連續(xù)四個(gè)單元的M 目的偏移DS段地址注意 源操作數(shù)必須為M單元 目的操作數(shù)必須為除段R外的16位R 2 傳送有效地址及數(shù)據(jù)段首址指令LDS loadpointerusingDS 例 設(shè) 12450H F346H 12452H 0A90HDS 1200H執(zhí)行LDSSI 450H 后SIF346124504612451F3DS0A901245290124530A 3 傳送有效地址及附加數(shù)據(jù)段指令LES loadpointerusingES format LESOPD OPSfunction 將主存某字單元內(nèi)容送指定寄存器 即 OPS OPD OPS 2 ES DIcommonlyusedinOPD 4標(biāo)志寄存器傳送指令 1 標(biāo)志送AH指令LAHF 2 AH送標(biāo)志指令SAHF 3 標(biāo)志寄存器進(jìn)棧指令PUSHF 4 標(biāo)志寄存器出棧指令POPF 1 標(biāo)志送AH指令LAHF 語句格式 LAHF功能 將標(biāo)志寄存器的低8位送入AH寄存器 即 FLAGS 7 0 AH 該指令的執(zhí)行對標(biāo)志位無影響 例4 11 標(biāo)志寄存器傳送 執(zhí)行前 FLAGS 0485H AX 0FFFFH執(zhí)行指令 LAHF 2 AH送標(biāo)志指令SAHF 語句格式 SAHF功能 將AH的內(nèi)容送入標(biāo)志寄存器的低8位 高8位不變 即 AH FLAGS7 0 從該指令功能可看出 SAHF為LAHF的逆過程 3 標(biāo)志寄存器進(jìn)棧指令PUSHF 語句格式 PUSHF功能 將標(biāo)志寄存器的內(nèi)容壓入堆棧 即 FLAGS SP 4 標(biāo)志寄存器出棧指令POPF 功能 將棧頂內(nèi)容彈出送入標(biāo)志寄存器中 即 SP FLAGS POPF指令與PUSHF指令互為逆過程 例4 12 將標(biāo)志寄存器的單步標(biāo)志TF置位 PUSHF FLSGS SP POPAX SP AXORAX 0100H 設(shè)置D8 TF 1PUSHAX AX SP POPF SP FLAGS 即 AX FLAGS 4 3 2算術(shù)運(yùn)算類指令 Arithmeticcalculation 1加法類指令2減運(yùn)算指令3乘運(yùn)算指令4除運(yùn)算指令5BCD碼調(diào)整指令 算術(shù)運(yùn)算指令可處理4種類型的數(shù) 1 無符號二進(jìn)制整數(shù)2 帶符號二進(jìn)制整數(shù)3 無符號壓縮十進(jìn)制整數(shù) packeddecimal 4 無符號非壓縮十進(jìn)制整數(shù) unpackeddecimal 若為帶符號數(shù) 用補(bǔ)碼 complement 表示壓縮十進(jìn)制數(shù) BCDBCD一字節(jié)中表示兩個(gè)十進(jìn)制數(shù)非壓縮十進(jìn)制數(shù) 0000BCD一字節(jié)中只表示一個(gè)十進(jìn)制數(shù) Example BHD 無 D 有 UDPD00000111077 77071000100189137 119invalid8911000101C5197 59invalidinvalid 1 加法指令 addition 1 ADD算術(shù)加法 addition 格式 ADD目的 源 功能 目的地 目的操作數(shù) 源操作數(shù)2 ADC帶進(jìn)位算術(shù)加法 additionwithcarry 格式 ADC目的 源 功能 目的地 目的操作數(shù) 源操作數(shù) CF上述兩指令 源操作數(shù) 寄存器 存儲(chǔ)器 立即數(shù) 目的操作數(shù) 只能是寄存器和存儲(chǔ)單元 example 5EH 3CH Influenceonflags 編程如下 MOVAL 5EH AL 5EH 94 MOVBL 3CH BL 3CH 60 ADDAL BL AL 9AH 154 01011110 5E 00111100 3C 10011010 9A 標(biāo)志位 ZF 0 AF 1 CF 0 SF 1 PF 1 OF 1 a 若5EH 3CH為無符號數(shù) D7data0 255 FFH 9AH FFH所以O(shè)F 1無意義 b 若5EH 3CH為帶符號數(shù) D7為符號位 128 127結(jié)果154超出此范圍所以O(shè)F 1結(jié)果無效 若未產(chǎn)生溢出 OF 0 SF 1時(shí)表示結(jié)果為負(fù) 3 INC加1指令 increment 格式 INC目的 功能 目的 目的操作數(shù) 1目的操作數(shù) 通用R或M單元主要用于循環(huán)計(jì)數(shù) 修改地址指針等例 INCBL BL BL 1INCBYTEPTR BX 內(nèi)存字節(jié)單元內(nèi)容 1INCWORDPTR BX 內(nèi)存字單元內(nèi)容 1 4 AAA加法的ASCII碼調(diào)整指令 ASCIIAdjustforAddition 格式 AAA 功能 對AL寄存器的內(nèi)容調(diào)整為一位非壓縮十進(jìn)制數(shù) 應(yīng)用場合 在非壓縮十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù)的加法運(yùn)算中 將結(jié)果調(diào)整為一位非壓縮十進(jìn)制數(shù) AAA指令調(diào)整過程 若AL低四位 9或標(biāo)志位AF 1 則 a AL AL 6b 將AL高四位清0c AF是1 CF是1 AH AH 1否則只將AL高四位清0 例 設(shè)AL 9BCDBL 5BCDAH 0求和 ADDAL BL 00001001 9 00000101 500001110低4位 9AAA 00000110加6調(diào)整00010100 00001111清高4位留低4位00000100AL中CF 1AF 1AH 1 DAA加法的十進(jìn)制調(diào)整指令 DecimalAdjustforAddition 格式 DAA 功能 將AL中內(nèi)容調(diào)整為壓縮BCD數(shù)應(yīng)用場合 用于將兩壓縮BCD數(shù)之和調(diào)整為正確的BCD數(shù) 調(diào)整過程 若AL低四位 9或標(biāo)志位AF 1 則 AL AL 6對低半字節(jié)調(diào)整 調(diào)整過程 若AL低四位 9或標(biāo)志位AF 1 則 AL AL 6對低半字節(jié)調(diào)整若AL高四位 9或標(biāo)志位CF 1則 AL AL 60H對高半字節(jié)調(diào)整并CF置1 否則CF是0 例 設(shè)AL 88BCDBL 49BCD求AL BL ADDAL BL 10001000 88 01001001 4911010001AF 1DAA 00000110加6調(diào)整11010111 01100000加60H調(diào)整00110111結(jié)果AL 37BCDCF 1 2 減法指令 subtraction 1 SUB不帶借位的減法指令格式 SUB目的 源 功能 目的 目的操作數(shù) 源操作數(shù)2 SBB帶進(jìn)位算術(shù)減法 subtractionwithborrow 格式 SBB目的 源 功能 目的 目的操作數(shù) 源操作數(shù) CF應(yīng)用于多字節(jié)減法中 3 DEC減1指令格式 DEC目的 功能 目的 目的操作數(shù) 1 4 NEG取補(bǔ)指令 negate 格式 NEG目的 功能 目的 0 目的操作數(shù)5 CMP比較指令 compare 格式 CMP目的 源 功能 兩個(gè)操作數(shù)相減 不產(chǎn)生運(yùn)算結(jié)果 僅影響標(biāo)志 6 AAS減法的ASCII調(diào)整指令 ASCIIAdjustforsubtraction 格式 AAS 功能 對AL中的內(nèi)容調(diào)整為非壓縮十進(jìn)制數(shù)用在SUB和SBB指令之后 且操作數(shù)是非壓縮十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù) 調(diào)整過程 若AL低四位 9或標(biāo)志位AF 1 則 a AL AL 6AF是1b 將AL高四位清0c AH AH 1 CF是1否則不調(diào)整 例3 54設(shè)AL 3BCDCL 8BCD求AL BL 指令控制過程如下 SUBAL CL00000011BCD300001000BCD8AAS11111011低4位大于900000110減6調(diào)整111101010000111100000101高4位清0結(jié)果AL 5 CF 1 7 DAS減法的十進(jìn)制調(diào)整指令 DecimalAdjustforSubtraction 格式 DAS 功能 將AL中內(nèi)容調(diào)整為正確的壓縮十進(jìn)制數(shù)調(diào)整過程 若AL低四位 9或標(biāo)志位AF 1 則 AL AL 6AF是1若AL高四位 9或標(biāo)志位CF 1 則 AL AL 60HCF是1否則不調(diào)整 3 乘法指令 只有非壓縮十進(jìn)制數(shù)乘 1 MUL無符號數(shù)乘法 multiply 格式 MUL源 功能 ALorAX a 源操作數(shù)為字節(jié) 積高8位 AH積低8位 ALb 源操作數(shù)為字 積高16位 DX積低16位 AX 源操作數(shù) 可以是寄存器或存儲(chǔ)單元 不能是立即數(shù) 源操作數(shù)為存儲(chǔ)單元時(shí) 必須說明是字節(jié) B 還是字 W 如 MULB SI AX AL 內(nèi)存中某字節(jié) MULW BX DX AX AX 內(nèi)存中某字 MUL指令執(zhí)行后 影響CF和OF標(biāo)志 若積的高半部分 AH或DX 不為0 則CF是1 OF是1 通常測CF和OF的狀態(tài) 確定 AH或DX 是否為積的高半部分 P85例3 573 58 例 設(shè)AL 55HBL 14HMULBL AX AL BL 06A4HAHALAX06A4因?yàn)锳H 06H 0 所以CF 1 OF 1 AH中是積的高半部分 注意 不能用MUL指令做帶符號數(shù)的乘法 例如 FFH FFH 二進(jìn)制乘式 11111111 1111111111111110000000011 當(dāng)作無符號數(shù)FFH FFH 255 255 65025正確2 當(dāng)作帶符號數(shù)FFH FFH 1 1 1111111000000001 取補(bǔ)碼 1000000111111111 511 D錯(cuò)誤正確答案為 0000000000000001 1 D 2 IMUL帶符號數(shù)乘法 IntegerMultiply 格式 IMUL源 功能 a 源操作數(shù)為字節(jié) AX AL 源b 源操作數(shù)為字 AX AX 源低字DX AX 源高字若積的高半部分為非全0或非全1 為積的一部分 置CF 1 OF 1若積的高半部分為全0或全1 僅為符號 置CF 0 OF 0 所以檢測CF和OF的狀態(tài) 確定是否保存積的高半部分 字節(jié)或字 AAM乘法的ASCII調(diào)整指令 ASCIIAdjustformultiply 格式AAM功能 將AL中的BCD數(shù)調(diào)整為兩個(gè)非壓縮十進(jìn)制數(shù) 低位 AL 高位 AH 調(diào)整過程 AH AL 10的商 quotient AL AL 10的余數(shù) remainder 執(zhí)行指令后 影響ZF SF PF標(biāo)志 例3 60求兩個(gè)非壓縮十進(jìn)制數(shù)09和06之乘積 可用如下指令實(shí)現(xiàn) MOVAL 09H AL00001001MOVBL 06H BL00000110MULBL00110110AAM 54H 其中調(diào)整AL 10商為5AH AL 10余數(shù)為4AL 所以AH 05 AL 04 即在AX中得到正確結(jié)果AX 0504H 即BCD數(shù)54 4 除法指令 只有非壓縮十進(jìn)制數(shù)除 1 DIV無符號數(shù)除法 division unsigned 格式 DIV源 功能 兩個(gè)無符號二進(jìn)制數(shù)除法操作若a 源為字節(jié) AL AX 源 字節(jié) 的商AH AX 源 字節(jié) 的余數(shù)b 源為字 32位被除數(shù)在DX AX中AX DX AX 源 字 的商DX DX AX 源 字 的余數(shù)c 若為16位數(shù)除16位數(shù) 則DX清0 被除數(shù) AX 2 IDIV帶符號數(shù)除法格式 IDIV源 功能 操作與DIV相同關(guān)于除法運(yùn)算產(chǎn)生溢出的問題 字節(jié)操作時(shí) 被除數(shù)高8位 除數(shù)產(chǎn)生溢出字操作時(shí) 被除數(shù)高16位 除數(shù)產(chǎn)生溢出即商數(shù)超過了AL或AX所表示的范圍 產(chǎn)生溢出時(shí)CPU自動(dòng)產(chǎn)生除法錯(cuò)中斷 此時(shí)所得的商和余數(shù)為不確定數(shù) 3 CBW字節(jié)轉(zhuǎn)移為字指令 convertbytetoword 格式 CBW 功能 將AL中符號位擴(kuò)展到AH所有位 4 CWD字節(jié)轉(zhuǎn)換為雙字指令 convertwordtodoubleword 格式 CWD 功能 將AX中符號位擴(kuò)展到DX所有位 例 求 38 3的商和余數(shù) 38的補(bǔ)碼 11011010BMOVAL 11011010B 38 ALMOVCH 00000011B 3 CHCBW AX 1111111111011010BIDIVCH AX CHAL 12 商 AH 2 余數(shù) AAD除法的ASCII調(diào)整指令 ASCIIAdjustforDivision 格式 AAD 功能 做除法時(shí) 把BCD碼轉(zhuǎn)為二進(jìn)制數(shù)AL AH 10 ALAH 00 例 設(shè)AX 0307HBL 05H求AX BL 編程如下 AAD 轉(zhuǎn)換03 10 07 3710 25H 00100101B AL AH 00DIVBL AX BL的商 AL 7AX BL的余數(shù) AH 2 例3 64編寫程序 計(jì)算75 6 12 3該除法運(yùn)算過程表示如下 第一個(gè)商為112第二個(gè)商為26756第一個(gè)余15數(shù)為1123第二個(gè)余數(shù)為3 程序如下 FIRSTDB06H 除數(shù) divider 6SECONDDB75H 被除數(shù) dividend 75THIRDDB2DUP 0 存商FOURDB 存余數(shù) MOVAH 00H 第一個(gè)被除數(shù)高位AH清零MOVAL SECOND AL被除數(shù)75ANDAL 0F0H 截取高4位MOVCL 04HROLAL CL 移至低4位DIVFIRST AX 06 即0007 06得結(jié)果 AL商為1 AH余數(shù)1 MOVTHIRD 1 AL 結(jié)果單元第一個(gè)商1MOVAL SECOND AL被除數(shù)75ANDAL 0FH AL截低四位 故AX 0105HAAD 將AX中內(nèi)容0105H調(diào)整為0FHDIVFIRST 0FH 6 結(jié)果 AL商為2AH余數(shù)為3MOVTHIRD AL THIRD單元第二個(gè)商2MOVFOUR AH FOUR單元第二個(gè)余數(shù)2 圖3 16表示上述除法程序執(zhí)行過程中 數(shù)據(jù)在內(nèi)存中的存放格式 FIRST06除數(shù)SECOND75被除數(shù)THIRD02商THIRD 101FOUR03余數(shù) 4 3 3邏輯運(yùn)算與移位指令 1邏輯運(yùn)算指令2移位指令3循環(huán)移位指令 1邏輯運(yùn)算指令 1 求反指令NOT 2 邏輯乘指令A(yù)ND 3 測試指令TEST 4 邏輯加指令OR 5 按位加指令XOR 1 求反指令NOT語句格式 NOTOPD功能 將目的地址中的內(nèi)容逐位取反后送入目的地址 即 OPD OPD 例4 21 邏輯非運(yùn)算 MOVAX 878AH AX 878AHNOTAX AX 7875H 2 邏輯乘指令A(yù)ND語句格式 ANDOPD OPS功能 將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯乘運(yùn)算 結(jié)果存目的地址 即 OPD OPS OPD 該指令用于清除目的操作數(shù)中與源操作數(shù)置0的對應(yīng)位 說明 邏輯乘的運(yùn)算法則為 1 1 1 1 0 0 0 1 0 0 0 0 例4 22 將AL中第3位和第7位清零 MOVAL 0FFHANDAL 77H 3 測試指令TEST語句格式 TESTOPD OPS功能 源地址和目的地址的內(nèi)容執(zhí)行按位的邏輯乘運(yùn)算 結(jié)果不送入目的地址 即 OPD OPS 例4 23 測試AX中的第12位是否為0 不為0則轉(zhuǎn)L TESTAX 1000HJNEL 4 邏輯加指令OR語句格式 OROPD OPS功能 將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯加運(yùn)算 結(jié)果存目的地址 即 OPD OPS OPD 說明 邏輯加的運(yùn)算法則為 1 1 1 1 0 1 0 1 1 0 0 0 例4 24 將AL寄存器中第3位和第7位置1 MOVAL 0ORAL 88H 5 按位加指令XOR語句格式 XOROPD OPS功能 目的操作數(shù)與源操作數(shù)做按位加運(yùn)算 結(jié)果送入目的地址 即 OPD OPS OPD 說明 按位加的運(yùn)算法則為 1 1 0 1 0 1 0 1 1 0 0 0 例4 25 按位加運(yùn)算 MOVAL 45H AL 45HXORAL 31H AL 74H 2移位指令 移位指令包括算術(shù)移位指令 邏輯移位指令和循環(huán)移位指令 分別進(jìn)行左移和右移操作 這些指令均有統(tǒng)一的語句格式 標(biāo)號 操作符OPD 1或 標(biāo)號 操作符OPD CL其功能為將目的操作數(shù)的所有位按操作符規(guī)定的方式移動(dòng)1位或按寄存器CL規(guī)定的次數(shù) 0 255 移動(dòng) 結(jié)果送入目的地址 目的操作數(shù)是8位 或16位 的寄存器數(shù)據(jù)或存儲(chǔ)器數(shù)據(jù) 1 算術(shù)左移和邏輯左移指令SAL SHL 語句格式 SALOPD 1或SHLOPD 1SALOPD CL或SHLOPD CL功能 將 OPD 向左移動(dòng)CL指定的次數(shù) 最低位補(bǔ)入相應(yīng)的 的內(nèi)容為最后移入位的值 2 算術(shù)右移指令SAR語句格式 SAROPD 1或SAROPD CL功能 將 OPD 向右移動(dòng)CL指定的次數(shù)且最高位保持不變 CF的內(nèi)容為最后移入位的值 例4 26 算術(shù)右移運(yùn)算 MOVBH 0F4H BH 0F4HMOVCL 2 CL 2SARBH CL BH 0FDH CF 0該例語句 SARBH CL 實(shí)際上完成了 BH BH的運(yùn)算 所以 用SAR指令可以實(shí)現(xiàn)對有符號數(shù)除2n的運(yùn)算 n為移位次數(shù) 3 邏輯右移指令SHR語句格式 SHROPD 1或SHROPD CL功能 將 OPD 向右移動(dòng)CL規(guī)定的次數(shù) 最高位補(bǔ)入相應(yīng)個(gè)數(shù)的 CF的內(nèi)容為最后移入位的值 3 循環(huán)移位指令 1 循環(huán)左移指令ROL語句格式 ROLOPD 1或ROLLPD CL功能 將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán) 將環(huán)中的所有位一起向左移動(dòng)CL規(guī)定的次數(shù) CF的內(nèi)容為最后移入位的值 2 循環(huán)右移指令ROR語句格式 ROROPD 1或ROROPD CL功能 將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán) 將環(huán)中的所有位一起向右移動(dòng)CL規(guī)定的次數(shù) CF的內(nèi)容為最后移入位的值 3 帶進(jìn)位的循環(huán)左移指令RCL語句格式 RCLOPD 1或RCLOPD CL功能 將目的操作數(shù)連同CF標(biāo)志一起向左循環(huán)移動(dòng)CL規(guī)定的次數(shù) 4 帶進(jìn)位的循環(huán)右移指令RCR語句格式 RCROPD 1或RCROD CL功能 將目的操作數(shù)連同CF標(biāo)志一起向右循環(huán)移動(dòng)所規(guī)定的次數(shù) 4 3 4串操作類指令 string 串操作指令 數(shù)據(jù)傳送類指令每次只能傳送一個(gè)數(shù)據(jù) 若要傳送大批數(shù)據(jù)就需要重復(fù)編程 這樣就浪費(fèi)了大量的時(shí)間和空間 為此8086提供了一組處理主存中連續(xù)存放數(shù)據(jù)串的指令 這就是串操作指令 1 傳送指令MOVS format MOVS目的串 源串 judgeMOV MOVSB MOVSWfunction 將以SI為指針的源串中的一個(gè)字節(jié) 或字 存儲(chǔ)單元中的數(shù)據(jù)傳送至以DI為指針的目的地址中去 并自動(dòng)修改指針 使之指向下一個(gè)字節(jié) 或字 存儲(chǔ)單元 即 DS SI ES DI DF 0 SI 和 DI 1or2 DF 1 SI 和 DI 1or2 2 串比較指令CMPSformat CMPS目的串 源串 CMPSB CMPSWfunction 將SI所指的源串中的一個(gè)字節(jié) 或字 存儲(chǔ)單元中的數(shù)據(jù)與DI所指的目的串中的一個(gè)字節(jié) 或字 存儲(chǔ)單元中的數(shù)據(jù)相減 并根據(jù)相減的結(jié)果設(shè)置標(biāo)志 但結(jié)果并不保存 即 SI DI 修改串指針 使之指向串中的下一個(gè)元素 當(dāng)DF 0時(shí) SI 和 DI 增量 當(dāng)DF 1時(shí) SI 和 DI 減量 3 串搜索指令SCASformat SCAS目的串SCASB SCASWFunction AL 字節(jié) 或AX 字 中的內(nèi)容與DI所指的目的串中的一個(gè)字節(jié) 或字 存儲(chǔ)單元中的數(shù)據(jù)相減 根據(jù)相減結(jié)果設(shè)置標(biāo)志位 結(jié)果不保存 即 字節(jié)操作 AL DI 字操作 AX DI 修改指針使之指向串中的下一個(gè)元素 當(dāng)DF 0時(shí) DI 增量 當(dāng)DF 1時(shí) DI 減量 4 從源串中取數(shù)指令LODSfunction LODS源串 LODSB LODSWfunction 將SI所指的源串中的一個(gè)字節(jié) 或字 存儲(chǔ)單元中的數(shù)據(jù)取出來送入AL 或AX 中 即 字節(jié)操作 SI AL 字操作 SI AX 修改指針SI 使它指向串中的下一個(gè)元素 當(dāng)DF 0時(shí) SI 增量 當(dāng)DF 1時(shí) SI 減量 5 往目的串中存數(shù)指令STOSformat STOS目的串STOSB STOSWfunction 將AL或AX中的數(shù)據(jù)送入DI所指的目的串中的字節(jié) 或字 存儲(chǔ)單元中 即 字節(jié)操作 AL DI 字操作 AX DI 修改指針DI 使之指向串中的下一個(gè)元素 當(dāng)DF 0時(shí) DI 增量 當(dāng)DF 1時(shí) DI 減量 6 重復(fù)前綴指令REPREPE REPZREPNE REPNZ 1 REPREP前綴用在MOVS STOS LODS指令前 功能 每執(zhí)行一次串指令 CX 1 直到 CX 0 重復(fù)執(zhí)行結(jié)束 2 REPE REPZ該指令一般用在CMP SCAS指令前 功能 每執(zhí)行一次串指令 CX 1 并判斷ZF標(biāo)志是否為0 只要 CX 0或ZF 0 則重復(fù)執(zhí)行結(jié)束 3 REPNE REPNZ該指令一般用在CMPS SCAS指令前 功能 每執(zhí)行一次串指令 CX 1 并判斷ZF標(biāo)志是否為0 只要 CX 0或ZF 1 則重復(fù)執(zhí)行結(jié)束 字符串指令的隱含約定 1 源串 位于當(dāng)前數(shù)據(jù)段 始 末 地址DS SI 可用段前綴修改段地址 2 目的串 位于當(dāng)前附加段 始 末 地址ES DI 不允許用前綴修改ES 若在同一段內(nèi)進(jìn)行串運(yùn)算 必使DS和ES指向同一段 指令名稱 字節(jié) 字操作 字節(jié)操作 字操作 字符串傳送MOVS目的串 源串MOVSBMOVSW 字符串操作指令的類型和格式 字符串比較CMPS目的串 源串CMPSBCMPSW 字符串掃描SCAS目的串SCASBSCASW 字符串裝入LODS源串LODSBLODSW 字符串存儲(chǔ)STOS目的串STOSBSTOSW 3 每執(zhí)行一次串操作 SI DI自動(dòng)修改 4 SI DI自動(dòng)修改方法 每執(zhí)行一次時(shí) DF 0 遞增 字節(jié)操作 SI DI增1字操作 SI DI增2DF 1 遞減 字節(jié)操作 SI DI減1字操作 SI DI減25 字符串長度放在CX寄存器中重復(fù)前綴的使用 在基本串指令前加前綴 每重復(fù)一次CX 1 CX 圖4 3流程圖總結(jié)了串操作的過程 圖4 3串操作流程圖 4 3 5控制轉(zhuǎn)移類指令 1無條件轉(zhuǎn)移指令2條件轉(zhuǎn)移指令3循環(huán)控制指令4子程序調(diào)用指令 1 無條件轉(zhuǎn)移和調(diào)用指令1 JMP無條件轉(zhuǎn)移指令 JUMP 格式 JMP目的地址功能 使程序轉(zhuǎn)到指令中指定的目的地址去執(zhí)行 JMP指令的類型 A類 段內(nèi)轉(zhuǎn)移 轉(zhuǎn)移目的地址與JMP指令同段B類 段間轉(zhuǎn)移 程序轉(zhuǎn)到另一代碼段去執(zhí)行 類型方式尋址目標(biāo)指令舉例 段內(nèi)轉(zhuǎn)移 段間轉(zhuǎn)移 直接立即短轉(zhuǎn)移 8位 JMPSHORTPROG S 直接立即近轉(zhuǎn)移 16位 JMPNEARPTRPROG N 間接寄存器 16位 JMPBX 間接存儲(chǔ)器 16位 JMPWORDPTR5 BX 直接立即轉(zhuǎn)移 32位 JMPFARPTRPROG F 間接存儲(chǔ)器 32位 JMPDWORDPTR DI 表3 10無條件轉(zhuǎn)移指令的類型和方式 a 段內(nèi)直接轉(zhuǎn)移指令JMPSHORT標(biāo)號 IP IP DISP LJMPNEARPTR標(biāo)號 IP IP 16位位移量例 偏移量機(jī)器碼程序00000405PROG S ADDAL 05H000290NOP0003EBFBJMPSHORTPROG S 000590NOPEND 機(jī)器碼在內(nèi)存中放置 代碼段CS 0000H00000040000105000029000003EB00004FB000059000006 00007 計(jì)算 指令中位移量 FB 目的地址偏移量 IP當(dāng)前值 0 5 5補(bǔ)碼 FBH轉(zhuǎn)移指針I(yè)P IP當(dāng)前值 指針中的位移量 0005H FFFB 0000H即轉(zhuǎn)到PROG S處去執(zhí)行 b 段內(nèi)間接轉(zhuǎn)移指令 設(shè)BX 4500HJMPBX IP BX寄存器內(nèi)容 設(shè)DS 2000H BX 100H 20105H 4F00HJMPWORDPTR5 BX IP 存儲(chǔ)器單元內(nèi)容IP 20000H 100H 5H 20105H 4F00H程序轉(zhuǎn)到代碼段內(nèi)地址為4F00處去執(zhí)行 c 段間直接 遠(yuǎn) 轉(zhuǎn)移指令指令中指定的段地址 CS指定的位移量 IP設(shè)標(biāo)號PROG F所在段址 3500H 其偏移量 080AHJMPFARPTRPROG F 轉(zhuǎn)到 IP 080AHCS 3500H處去執(zhí)行 d 段間間接轉(zhuǎn)移指令設(shè)CS 1200HIP 05HDS 2500HSI 1300H 26425H 4500 26427H 32F0JMPDWORDPTR SI 0125H 目的操作數(shù)地址 DS 10H SI DISP 26425HIP 4500HCS 32F0H執(zhí)行后轉(zhuǎn)到32F0 4500H處去執(zhí)行 2 過程調(diào)用和返回指令 CALLandRETURN 子程序 subroutine 過程procedure 具有特定功能的程序段主程序 調(diào)用子程序的程序過程嵌套 在過程運(yùn)行中又去調(diào)用另一過程 過程 子程序 以PROC語句打頭 過程結(jié)束RETENDP主程序 過程 過程名 PROCNEAR CALL過程名 RET ENDP 子程序調(diào)用和返回指令調(diào)用格式 CALL過程名 返回格式 RET CALL指令執(zhí)行過程 第一步 需返回的地址入棧 斷點(diǎn)入棧 對近調(diào)用 先SP SP 2 IP內(nèi)容入棧 對遠(yuǎn)調(diào)用 先SP SP 2 CS入棧后SP SP 2 IP入棧第二步 轉(zhuǎn)到相應(yīng)的子程序入口地址 執(zhí)行子程序 對于近過程返回 堆棧彈出一個(gè)字 IPSP SP 2對于遠(yuǎn)過程返回 彈出第一個(gè)字 IP SP SP 2 彈出第二個(gè)字 CS SP SP 2a 段內(nèi)直接調(diào)用和返回P104例3 83 自學(xué) b 段內(nèi)間接調(diào)用和返回P106例3 84 自學(xué) c 段內(nèi)直接調(diào)用P106例3 85 自學(xué) d 段內(nèi)間接調(diào)用P107例3 86 自學(xué) 2 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令均為段內(nèi)短轉(zhuǎn)移 轉(zhuǎn)移距離 128 127常用于比較指令或運(yùn)算 邏輯指令之后 1 直接標(biāo)志轉(zhuǎn)移指令在指令的助記符中直接給出轉(zhuǎn)移條件 通常 CF ZF SF OF PF標(biāo)志 指令助記符測試條件指令功能 JCCF 1有進(jìn)位轉(zhuǎn)移 JNCCF 0無進(jìn)位轉(zhuǎn)移 JZ JEZF 1結(jié)果為零 相等轉(zhuǎn)移 JSSF 1符號為負(fù)轉(zhuǎn)移 JNSSF 0符號為正轉(zhuǎn)移 JOOF 1溢出轉(zhuǎn)移 JNOOF 0無溢出轉(zhuǎn)移 JP JPEPF 1奇偶位為1 為偶轉(zhuǎn)移 JNP JPOPF 0奇偶位為0 為奇轉(zhuǎn)移 直接標(biāo)志條件轉(zhuǎn)移指令 JNZ

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論