第三章 匯編語言及程序設計1.ppt_第1頁
第三章 匯編語言及程序設計1.ppt_第2頁
第三章 匯編語言及程序設計1.ppt_第3頁
第三章 匯編語言及程序設計1.ppt_第4頁
第三章 匯編語言及程序設計1.ppt_第5頁
已閱讀5頁,還剩118頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章匯編語言及程序設計 3 18086 8088的指令系統(tǒng) 指令是控制計算機進行各種操作的命令 指令系統(tǒng)是CPU所能執(zhí)行指令的集合 8086指令系統(tǒng)是其他微處理器指令的基礎 3 1 1指令的構成和操作數的類型 1 指令的構成指令格式 指令由操作碼字段和操作數字段組成 操作碼 指計算機所要執(zhí)行的操作 或稱為指出操作類型 是一種助記符 操作數 指在指令執(zhí)行操作的過程中所需要的操作數 該字段除可以是操作數本身外 也可以是操作數地址或是地址的一部分 還可以是指向操作數地址的指針或其它有關操作數的信息 雙操作數分為源操作數 SRC 和目標操作數 DST 并由目標操作數存放運算結果 2 操作數的類型立即數操作數 數值直接存放在指令中 立即數可以是8位的 也可以是16位的有符號數或無符號數 寄存器操作數 數值存放寄存器中 指令中帶有寄存器的號碼 存儲器操作數 數值存放內部存儲器中 指令中帶有存儲器的地址 3 1 2尋址方式 尋址方式就是指令中用于說明操作數所在地址的方法 或者說是尋找操作數有效地址的方法 1 立即尋址所提供的操作數直接包含在指令中 它緊跟在操作碼的后面 與操作碼一起放在代碼段區(qū)域中 例如 MOVAX 0A7FH立即數可以是8位的 也可以是16位的 若是16位的 則存儲時低位在前 高位在后 用來給寄存器或存儲器賦初值 2 寄存器尋址 操作數包含在CPU的內部寄存器中 如寄存器AX BX CX DX等 例如 MOVDS AXMOVAL BH 3 直接尋址 操作數地址的16位偏移量直接包含在指令中 它與操作碼 起存放在代碼段區(qū)域 操作數一般在數據段區(qū)域中 它的地址為數據段寄存器DS加上這16位地址偏移量 MOVAX 2000H 4 寄存器間接尋址 操作數是在存儲器中 但是 操作數地址的16位偏移量包含在以下四個寄存器SI DI BP BX之一中 以SI DI BX間接尋址 則通常操作數在現行數據段區(qū)域中 即數據段寄存器 DS 16加上SI DI BX中的16位偏移量 為操作數的地址 例如 MOVAX SI 操作數地址是 DS 16 SI 以寄存器BP間接尋址 則操作數在堆棧段區(qū)域中 即堆棧段寄存器 SS 16與BP的內容相加作為操作數的地址 例如 MOVAX BP 操作數地址是 SS 16 BP 5 寄存器相對尋址 由指定的寄存器內容 加上指令中給出的8位或16位偏移量作為操作數的偏移地址 可以作為寄存器變址尋址的四個寄存器是SI DI BX BP 若用SI DI和BX作為變址 則與數據段寄存器相加 若用BP變址 則與堆棧段寄存器相加 形成操作數的地址即默認在堆棧段 例如 MOVAX COUNT SI 操作數地址是 DS 16 SI COUNT 6 基址變址尋址 操作數在存貯器中 其偏移地址由 基址寄存器 變址寄存器 形成 把BX和BP看成是基址寄存器 把SI DI看著是變址寄存器 例如 MOVAX BX SI 或MOVAX BX SI 7 相對基址變址尋址 操作數在存貯器中 其偏移地址由 基址寄存器 變址寄存器 相對偏移量形成 把BX和BP看成是基址寄存器 把SI DI看著是變址寄存器 再加上指令中指定的8位或16位偏移量作為操作數的偏移地址 例如 MOVAX 0318H BX SI 3 1 38086 8088指令系統(tǒng) 1 數據傳送 DataTranster 2 算術運算 Arithmetic 3 邏輯運算 Logic 4 串操作 Stringmenipulation 5 程序控制 ProgramControl 6 處理器控制 ProcessorControl 一 數據傳送指令 1 數據傳送MOV指令一般格式 MOVDST SRCMOV是操作碼 DST和SRC分別是目的操作數和源操作數 功能 完成數據傳送 將源操作數的內容傳到目的操作數 但源操作數的內容不變 具體來說 一條數據傳送指令能實現 CPU內部寄存器之間數據的任意傳送 除了代碼段寄存器CS和指令指針I(yè)P以外 MOVAL BL 字節(jié)傳送MOVCX BX 字傳送MOVDS BX 立即數傳送至CPU內部的通用寄存器組 即AX BX CX DX BP SP SI DI MOVCL 4MOVAX 03FFHMOVSI 057BH 能實現用立即數給存儲單元賦值例如 MOV 2000H 25HMOV SI 35H CPU內部寄存器 除了CS和IP以外 與存儲器 所有尋址方式 之間的數據傳送 MOVAL BUFFERMOVAX SI MOV DI CXMOVSI BLOCK BP MOVDS DATA SI BX MOVDEST BP DI ES MOV指令應注意幾個問題 可進行8位 16位的數據操作 源操作數與目的操作數的數據類型要一致 存儲器間不能直接傳送 兩個段寄存器之間不能直接傳送信息 立即數不能作為目標操作數 也不能直接傳送到段寄存器 CS和IP不能作為目標操作數 2 堆棧指令 堆棧是一種數據存取的方式 與隊列比較 特點為先進后出 包括入棧 PUSH 和出棧 POP 指令兩類 僅能進行字運算 操作數不能是立即數 堆棧區(qū)存數據時總是從高位開始向低位方向增長 堆棧在內存的地址由SS指明 堆棧指針SP指向堆棧區(qū)的棧頂 存放棧頂的偏移地址 入棧指令PUSH一般格式 PUSHSRC源操作數可以是CPU內部的16位通用寄存器 段寄存器和內存操作數 所有尋址方式 入棧操作對象必須是16位數 功能 將數據壓入堆棧執(zhí)行步驟為 SP SP 2 SP 操作數低8位 SP 1 操作數高8位例如 PUSHBX執(zhí)行過程為 SP SP 1 SP BH SP SP 1 SP BL 出棧指令POP一般格式 POPDST功能 將數據彈出堆棧 對指令執(zhí)行的要求同入棧指令 CS IP除外 執(zhí)行步驟為 操作數低8位 SP 操作數高8位 SP 1 SP SP 2例如 POPAXPOP BX POPDS 3 交換指令XCHG 一般格式 XCHGDST SRC功能 完成數據交換交換指令 把一個字節(jié)或一個字的源操作數與目的操作數相交換 交換能在通用寄存器之間 通用寄存器與存儲器之間進行 但段寄存器和立即數不能作為操作數 例如 XCHGAL CLXCHGAX DIXCHGBX SIXCHGAX BUFFERXCHGDATA SI DH 4 累加器專用傳送指令 IN指令一般格式 INAL n BAL n INAX n WAX n 1 n INAL DX BAL DX INAX DX WAX DX 1 DX 功能 從I O端口輸入數據至AL或AX 輸入指令允許把一個字節(jié)或一個字由一個輸入端口傳送到AL或AX中 若端口地址超過255時 則必須用DX保存端口地址 這樣用DX作端口尋址最多可尋找64K個端口 例 INAL 78H MOVDX 347H INAL DX OUT指令一般格式 OUTn AL BAL n OUTn AX WAX n 1 n OUTDX AL BAL DX OUTDX AX WAX DX 1 DX 功能 將AL或AX的內容輸出至I O端口 該指令將AL或AX中的內容傳送到一個輸出端口 端口尋址方式與IN指令相同 例 OUT79H AL MOVDX 347H OUTDX AL XLAT指令一般格式 XLAT AL DS 16 BX AL 功能 完成一個字節(jié)的查表轉換 要求 寄存器AL的內容作為一個256字節(jié)的表的下標 表的基地址在BX中 轉換后的結果存放在AL中 例如 MOVBX OFFSETTABLEMOVAL 1XLAT 查表OUT1 AL AL AAH本指令可用在數制轉換 函數表查表 代碼轉換等場合 5 地址傳送指令 有三條地址傳送指令 LEA一般格式 LEADST SRC功能 把源操作數SRC的地址偏移量傳送至目的操作數DST 要求 源操作數必須是一個內存操作數 目的操作數必須是一個16位的通用寄存器 這條指令通常用來建立串操作指令所須的寄存器指針 例 LEABX BUFR 把變量BUFR的地址偏移量部分送到BX MOVBX BUFR 把變量BUFR的內容送到BX MOVBX OFFSETBUFR 把變量BUFR的地址偏移量部分送到BX LDS一般格式 LDSDST SRC功能 完成一個地址指針的傳送 地址指針包括段地址部分和偏移量部分 指令將段地址送入DS 偏移量部分送入一個16位的指針寄存器或變址寄存器 要求 源操作數是一個內存操作數 目的操作數是一個通用寄存器 變址寄存器 例如 LDSSI BX 將把BX所指的32位地址指針的段地址部分送入DS 偏移量部分送入SI LES LoadpointerintoES 一般格式 LESDST SRC這條指令除將地址指針的段地址部分送入ES外 與LDS類似 例如 LESDI BX COUNT 6 標志寄存器傳送 LAHF將標志寄存器中的SF ZF AF PF和CF 即低8位 傳送至AH寄存器的指定位 空位沒有定義 SAHF將寄存器AH的指定位 送至標志寄存器的SF ZF AF PF和CF位 即低8位 根據AH的內容 影響上述標志位 對OF DF和IF無影響 PUSHF將標志寄存器壓入堆棧頂部 同時修改堆棧指針 不影響標志位 POPF堆棧頂部的一個字 傳送到標志寄存器 同時修改堆棧指針 影響標志位 二 算術運算指令 8086 8088提供加 減 乘 除四種基本算術操作 這些操作都可用于字節(jié)或字的運算 也可以用于帶符號數與無符號數的運算 帶符號數用補碼表示 同時8086 8088也提供了各種校正操作 故可以進行十進制算術運算算術運算操作會影響標志寄存器 加 減運算會影響大部分的標志位 但加 減 指令不影響 位 1 加法指令 Addition 一般形式 ADDDST SRC功能 DST DST SRC 完成兩個操作數相加 結果送至目的操作數DST 目的操作數可以是累加器 任一通用寄存器以及存儲器操作數 例如 ADDAL 30 累加器與立即數相加ADDBX 3000H 通用寄存器與存儲單元內容相加ADDDI CX 通用寄存器之間 ADDDX DATA BX SI 通用寄存器與存儲單元內容相加ADDBETA SI DX 存儲器操作數與寄存器相加這些指令對標志位CF DF PF SF ZF和AF有影響 一般形式 ADCDST SRC 帶進位的加法功能 DST DST SRC CF這條指令與上 條指令類似 只是在兩個操作數相加時 要把進位標志CF的現行值加上去 結果送至目的操作數 例如 ADCAL 30 累加器與立即數相加ADCBX 3000H 通用寄存器與存儲單元內容相加 例 若有兩個四字節(jié)的數 已分別放在自FIRST和SECOND開始的存儲區(qū)中 每個數占四個存儲單元 存放時 最低字節(jié)在地址最低處 用以下程序段實現相加 MOVAX FIRSTADDAX SECOND ADDAX FIRST 4 MOVSECOND AX MOVFIRST 4 AX MOVAX FIRST 2ADDAX SECOND 2 ADCAX FIRST 6 MOVSECOND 2 AX MOVFIRST 6 AXMOVAX 0HADCAX 0MOVFIRST 8 AX 一般形式 INCDST 功能 DST DST 1完成對指定的操作數DST加1 然后返回此操作數 此指令主要用于在循環(huán)程序中修改地址指針和循環(huán)次數等 這條指令執(zhí)行的結果影響標志位AF OF PF SF和ZF 而對進位標志沒有影響 如 INCALINC BX 2 減法指令 Subtraction 一般形式 SUBDST SRC 功能 DST DST SRC 完成兩個操作數相減 也即從DST中減去SRC 結果放在DST例如 SUBCX BXSUB BP CL 一般形式 SBBDST SRC 功能 DST DST SRC CF這條指令與SUB類似 只是在兩個操作數相減時 還要減去借位標志CF的現行值 本指令對標志位AF CF OF PF SF和ZF都有影響 同ADC指令一樣 本指令主要用于多字節(jié)操作數相減 一般形式 DECDST 功能 DST DST 1對指令的操作數減1 然后送回此操作數 在相減時 把操作數作為一個無符號二進制數來對待 指令執(zhí)行的結果 影響標志AF OF PF SF和ZF 但對CF標志不影響 即保持此指令以前的值 例如 DEC SI DECCL 例 將存放在內存中 和 中的兩個 字節(jié)長度的數相加 結果放在 中 一般形式 NEGDST功能 取補 對操作數取補 即用零減去操作數 再把結果送回操作數 例如 NEGALNEGMULRE AL 00111100 則取補后為11000100即00000000 00111100 11000100若在字節(jié)操作時對 128 或在字操作時對 32768取補 則操作數沒變化 但標志OF置位 此指令影響標志AF CF OF PF SF和ZF 此指令的結果一般總是使標志CF 1 除非在操作數為零時 才使CF 0 一般形式 CMPDST SRC 功能 DST SRC 比較指令完成兩個操作數相減 使結果反映在標志位上 但并不送回結果 即不帶回送的減法 例如 CMPAL 100CMPDX DICMPCX COUHT BP CMPCOUNT SI AX比較指令主要用于比較兩個數之間的關系 在比較指令之后 根據ZF標志即可判斷兩者是否相等 相等的比較 若兩者相等 相減以后結果為零 ZF標志為1 否則為0 若兩者不相等 則可在比較指令之后利用其它標志位的狀態(tài)來確定兩者的大小 大小的比較 如果是兩個無符號數 如CMPAX BX 進行比較 則可以根據CF標志的狀態(tài)判斷兩數大小 若結果沒有產生借位 CF 0 顯然AX BX 若產生了借位 即CF 1 則AX BX 3 乘法指令 分為無符號乘法指令和帶符號乘法指令兩類 1 無符號乘法指令MUL一般格式 MULSRC完成字節(jié)與字節(jié)相乘 字與字相乘 且默認的操作數放在AL或AX中 而源操作數由指令給出 8位數相乘 結果為16位數 放在AX中 16位數相乘結果為32位數 高16位放在DX 低16位放在AX中 注意 源操作數不能為立即數 例如 MOVAL FIRST MULSECOND 結果為AX FIRST SECONDMOVAX THIRD MULAX 結果DX AX THIRD THIRDMOVAL 30HCBW 字擴展AX 30HMOVBX 2000HMULBX 2 帶符號數乘法指令IMUL一般格式 IMULSRC SRC為源操作數這是一條帶符號數的乘法指令 同MUL一樣可以進行字節(jié)與字節(jié) 字和字的乘法運算 結果放在AX或DX AX中 當結果的高半部分不是結果的低半部分的符號擴展時 標志位CF和OF將置位 4 除法指令 1 無符號數除法指令DIV一般格式 DIVSRC 2 帶符號數除法IDIV一般格式 IDIVSRC該指令執(zhí)行過程同DIV指令 但IDIV指令認為操作數的最高位為符號位 除法運算的結果商的最高位也為符號位 例如 AX 2000H DX 200H BX 1000H 則DIVBX執(zhí)行后 AX 2002H DX 0000 除法運算中 源操作數可為除立即尋址方式之外的任何一種尋址方式 且指令執(zhí)行對所有的標志位都無定義 由于除法指令中的字節(jié)運算要求被除數為16位數 而字運算要求被除數是32位數 在8086 8088系統(tǒng)中往往需要用符號擴展的方法取得被除數所要的格式 因此指令系統(tǒng)中包括兩條符號擴展指令 3 字節(jié)擴展指令CBW一般格式 CBW該指令執(zhí)行時將AL寄存器的最高位擴展到AH 4 字擴展指令CWD一般格式 CWD該指令執(zhí)行時將AX寄存器的最高位擴展到DX CBW CWD指令不影響標志位 5 十進制調整指令 針對十進制算術運算有一類十進制調整指令 壓縮BCD碼的十進制加法調整DAA 壓縮BCD碼的十進制減法調整DAS 非壓縮BCD碼的十進制加法調整AAA BCD碼進行乘除法運算時 一律使用費壓縮無符號數形式 因而AAM和AAD應固定地出現在MUL之前和DIV之后 三 邏輯運算和移位指令 1 邏輯運算指令 1 一般格式 NOTSRC功能 對操作數求反 然后送回原處 操作數可以是寄存器或存儲器內容 此指令對標志無影響 例如 NOTAL 2 一般格式 ANDDST SRC功能 對兩個操作數進行按位的邏輯 與 運算 結果送回目的操作數 其中目的操作數DST可以是累加器 任一通用寄存器 或內存操作數 所有尋址方式 源操作數SRC可以是立即數 寄存器 也可以是內存操作數 所有尋址方式 指令可以進行字節(jié)操作 也可以進行字操作 例如 ANDAL 0FH 可完成拆字的動作ANDSI 0H 將SI清0 3 一般格式 TESTDST SRC功能 完成與AND指令相同的操作 結果反映在標志位上 但并不送回 通常使用它進行測試 例如若要檢測AL中的最低位是否為1 為1則轉移 可用以下指令 TESTAL 01HJNZTHERE THERE 若要檢測CX中的內容是否為0 為0則轉移 該如何做呢 4 一般格式 ORDST SRC功能 對指定的兩個操作數進行邏輯 或 運算 結果送回目的操作數 其中 目的操作數DST 可以是累加器 可以是任 通用寄存器 也可以是一個內存操作數 所有尋址方式 源操作數SRC 可以是立即數 寄存器 也可以是內存操作數 所有尋址方式 ANDAL 0FHANDAH 0F0HORAL AH 完成拼字的動作ORAX 0FFFH 將AX低12位置1ORBX BX 清相應標志 5 一般格式 XORDST SRC功能 對兩個指定的操作數進行 異或 運算 結果送回目的操作數 其中 目的操作數DST可以是累加器 可以是任一個通用寄存器 也可以是一個內存操作數 全部尋址方式 源操作數可以是立即數 寄存器 也可以是內存操作數 所有尋址方式 例如 XORAL AL 使AL清0XORSI SI 使SI清0XORCL 0FH 使低4位取反 高4位不變 邏輯運算類指令中 單操作數指令NOT的操作數不能為立即數 雙操作數邏輯指令中 必須有一個操作數為寄存器尋址方式 且目的操作數不能為立即數 它們對標志位的影響情況如下 NOT不影響標志位 其它四種指令將使CF OF 0 AF無定義 而SF ZF和PF則根據運算結果而定 2 移位指令 算術左移或邏輯左移指令SAL SHLOPR M M是移位次數 可以是1或寄存器CL這些指令可以對寄存器操作數或內存操作數進行指定的移位 可以進行字節(jié)或字操作 可以一次只移1位 也可以移位由寄存器CL中的內容規(guī)定的次數 算術右移指令SAROPR M 邏輯右移指令SHROPR M 2 循環(huán)移位指令 ROLOPR M 左循環(huán)移位ROROPR M 右循環(huán)移位未把標志位CF包含在循環(huán)的環(huán)中 RCLOPR M 帶進位左循環(huán)移位RCROPR M 帶進位右循環(huán)移位把標志位CF包含在循環(huán)中 作為整個循環(huán)一部分 四 串操作類指令 串操作類指令可以用來實現內存區(qū)域的數據串操作 這些數據串可以是字節(jié)串 也可以是字串 1 重復指令前綴串操作類指令可以與重復指令前綴配合使用 從而可以使操作得以重復進行 及時停止 重復指令前綴的幾種形式見表所示 舉例說明 2 串指令 對串指令要注意以下幾個問題 各指令所使用的默認寄存器是 SI 源串地址 DI 目的地址 CX 字串長度 AL 存取或搜索的默認值 源串在數據段 目的串在附加段 方向標志與地址指針的修改 DF 1 則修改地址指針時用減法 DF 0時 則修改地址指針時用加法 MOVS STOS LODS指令不影響標志位 MOVS指令的功能MOVSDST SCRMOVSB 字節(jié)傳送MOVSW 字傳送把數據段中由SI間接尋址的一個字節(jié) 或一個字 傳送到附加段中由DI間接尋址的一個字節(jié)單元 或一個字單元 中去 然后 根據方向標志DF及所傳送數據的類型 字節(jié)或字 對SI及DI進行修改 在指令重復前綴REP的控制下 可將數據段中的整串數據傳送到附加段中去 例在數據段中有一字符串 其長度為100 要求把它們傳送到附加段中的一個緩沖區(qū)中 其中源串存放在數據段中從符號地址1000H開始的存儲區(qū)域內 每個字符占一個字節(jié) 2000H為附加段中用以存放字符串區(qū)域的首地址 MOVSI 1000H 置源串偏移地址MOVDI 2000H 置目的串偏移地址MOVCX 100 置串長度CLD 方向標志復位REPMOVSB 字符串傳送 CMPS指令的功能 把數據段中由SI間接尋址的一個字節(jié) 或一個字 與附加段中由DI間接尋址的一個字節(jié) 或一個字 進行比較操作 使比較的結果影響標志位 然后根據方向標志DF及所進行比較的操作數類型 字節(jié)或字 對SI及DI進行修改 在指令重復前綴REPE REPZ或者REPNE REPNZ的控制下 可在兩個數據串中尋找第一個不相等的字節(jié) 或字 或者第一個相等的字節(jié) 或字 例在數據段中有一字符串 其長度為17 存放在數據段中從符號地址MESS1開始的區(qū)域中 同樣在附加段中有一長度相等的字符串 存放在附加段中從符號地址MESS2開始的區(qū)域中 現要求找出它們之間不相匹配的位置 實現上述功能的程序段如下 LEASI MESS1 裝入源串偏移地址LEADI MESS2 裝入目的串偏移地址MOVCX 17 裝入字符串長度CLD 方向標志復位REPECMPSB上述程序段執(zhí)行之后 SI或DI的內容即為兩字符串中第一個不匹配字符的下一個字符的位置 若兩字符串中沒有不匹配的字符 則當比較完畢后 CX 0 退出重復操作狀態(tài) SCAS指令的功能 用由指令指定的關鍵字節(jié)或關鍵字 分別存放在AL及AX寄存器中 與附加段中由DI間接尋址的字節(jié)串 或字串 中的一個字節(jié) 或字 進行比較操作 使比較的結果影響標志位 然后根據方向標志DF及所進行操作的數據類型 字節(jié)或字 對DI進行修改 在指令重復前綴REPE REPZ或REPNE REPNZ的控制下 可在指定的數據串中搜索第一個與關鍵字節(jié) 或字 匹配的字節(jié) 或字 或者搜索第一個與關鍵字節(jié) 或字 不匹配的字節(jié) 或字 例在附加段中有一個字符串 存放在以符號地址MESS2開始的區(qū)域中 長度為17 要求在該字符串中搜索空格符 ASCII碼為20H 實現上述功能的程序段如下 LEADI MESS2 裝入目的串偏移地址MOVAL 20H 裝入關鍵字節(jié)MOVCX 17 裝入字符串長度REPNESCASB上述程序段執(zhí)行之后 DI的內容即為相匹配字符的下一個字符的地址 CX中是剩下還未比較的字符個數 若字符串中沒有所要搜索的關鍵字節(jié) 或字 則當查完之后 CX 0退出重復操作狀態(tài) STOS指令的功能 把指令中指定的一個字節(jié)或一個字 分別存放在AL及AX寄存器中 傳送到附加段中由DI間接尋址的字節(jié)內存單元 或字內存單元 中去 然后 根據方向標志DF及所進行操作的數據類型 字節(jié)或字 對DI進行修改操作 在指令重復前綴的控制下 可連續(xù)將AL AX 的內容存入到附加段中的一段內存區(qū)域中去 該指令不影標志位 例要對附加段中從MESS2開始的5個連續(xù)的內存字節(jié)單元進行清0操作 可用下列程序段實現 LEADI MESS2 裝入目的區(qū)域偏移地址MOVAL 00H 為清零操作準備MOVCX 5 設置區(qū)域長度REPSTOSB LODS指令的功能 從串中取指令實現從指定的字節(jié)串 或字串 中讀出信息的操作 例比較DEST和SOURCE中的500個字節(jié) 找出第一個不相同的字節(jié) 如果找到 則將SOURCE中的這個數送AL中 CLDLEADI DESTLEASI SOURCEMOVCX 500REPECMPSBJCXZNEXTMATCH DECSIMOVAL BYTEPTR SI NEXT 五 程序控制指令 轉移類指令可改變CS與IP的值或僅改變IP的值 以改變指令執(zhí)行的順序 1 無條件轉移 調用和返回指令 1 無條件轉移指令JMP分直接轉移和間接轉移兩種 一般格式 JMPDST DST是轉移的目的地址 直接轉移的3種形式為 短程轉移JMPSHORTDST IP IP 8位位移量目的地址與JMP指令所處地址的距離應在 128 127范圍之內 近程轉移JMPNEARPTRDST IP IP 16位位移量或JMPDST NEAR可省略目的地址與JMP指令應處于同一地址段范圍之內 遠程轉移JMPFARPTRDST IP DST的段內位移量 CS DST所在段地址 遠程轉移是段間的轉移 目的地址與JMP指令所在地址不在同一段內 要修改CS和IP的內容 間接轉移指令的目的地址可以由存儲器或寄存器給出 段內間接轉移JMPWORDPTRDST IP EA 由DST的尋址方式確定 JMPWORDPTR BX IP DS 16 BX JMPWORDPTRBXIP BX 段間間接轉移JMPDOWRDPTRDST IP EA CS EA 2 該指令指定的雙字節(jié)指針的第一個字單元內容送IP 第二個字單元內容送CS JMPDWORDPTR BX SI 2 調用和返回指令CALL指令用來調用一個過程或子程序 由于過程或子程序有段間 即遠程FAR 和段內調用 即近程NEAR 之分 所以CALL也有FAR和NEAR之分 因此RET也分段間與段內返回兩種 調用指令一般格式為 段內直接調用 CALLNEARPTRDST 操作 SP SP 2 SP 1 SP IP IP IP 16位位移量CALL指令首先將當前IP內容壓入堆棧 執(zhí)行RET指令而返回時 從堆棧中取出一個字放入IP中 段間直接調用 CALLFARPTRDST 操作 SP SP 2 SP 1 SP CS SP SP 2 SP 1 SP IP IP DST偏移地址 CS DST段地址CALL指令先把CS壓入堆棧 再把IP壓入堆棧 當執(zhí)行RET指令而返回時 從堆棧中取出一個字放入IP中 然后從堆棧中再取出第二個字放入CS中 作為段間返回地址 段內間接調用 CAL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論