第三講 8086指令系統(tǒng)_第1頁
第三講 8086指令系統(tǒng)_第2頁
第三講 8086指令系統(tǒng)_第3頁
第三講 8086指令系統(tǒng)_第4頁
第三講 8086指令系統(tǒng)_第5頁
已閱讀5頁,還剩192頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第三講講 8086指令系統(tǒng) 曾鐵軍 主要內容主要內容 基本數(shù)據類型基本數(shù)據類型 1 傳送類指令傳送類指令 2 數(shù)據操作類指令數(shù)據操作類指令 3 串操作指令串操作指令 4 控制類指令控制類指令 5 8086指令格式指令格式 2 8086指令的操作數(shù)尋址方式指令的操作數(shù)尋址方式 3 1 基本數(shù)據類型基本數(shù)據類型 基本數(shù)據類型基本數(shù)據類型 字、雙字、四字、雙四字對齊字、雙字、四字、雙四字對齊 數(shù)字數(shù)據類型數(shù)字數(shù)據類型 指針數(shù)據類型指針數(shù)據類型 指針是內存單元的地址,如圖指針是內存單元的地址,如圖3-4所示。所示。IA- 32 結構定義兩種類型的指針:近(結構定義兩種類型的指針:近(near)指針)

2、指針 (32位)和遠(位)和遠(far)指針()指針(48位)。位)。near指指 針是段內的針是段內的32位偏移量(也稱為有效地址)。位偏移量(也稱為有效地址)。 Near指針在平面存儲模式中用于所有存儲器引指針在平面存儲模式中用于所有存儲器引 用;或在分段存儲模式中用于同一段內的存儲器用;或在分段存儲模式中用于同一段內的存儲器 引用。引用。far指針是一個指針是一個48位的邏輯地址,包含位的邏輯地址,包含16 位段選擇子和位段選擇子和32位的偏移量。位的偏移量。far指針用于在分指針用于在分 段存儲模式中的跨段存儲引用。段存儲模式中的跨段存儲引用。 位字段位字段 一個位字段(見圖一個位字段

3、(見圖3-5)是連續(xù)的位序列。)是連續(xù)的位序列。 它能在內存中任何字節(jié)的任一位位置開始并能包它能在內存中任何字節(jié)的任一位位置開始并能包 含最多至含最多至32位。位。 串數(shù)據類型串數(shù)據類型 串是位、字節(jié)、字或雙字的連續(xù)序列。位串串是位、字節(jié)、字或雙字的連續(xù)序列。位串 能從任一字節(jié)的任一位開始并能包含多至能從任一字節(jié)的任一位開始并能包含多至232-1 位。字節(jié)串能包含字節(jié)、字或雙字,其范圍能從位。字節(jié)串能包含字節(jié)、字或雙字,其范圍能從 0至至232-1字節(jié)(字節(jié)(4GB)。)。 2 86系列匯編語言及指令的格式與尋址方式 86系列匯編語言及指令的格式與尋址方式 指令是讓計算機完成某種操作的命令,指

4、令的集指令是讓計算機完成某種操作的命令,指令的集 合稱作指令系統(tǒng),不同系列計算機有不同的指令合稱作指令系統(tǒng),不同系列計算機有不同的指令 系統(tǒng)。系統(tǒng)。 指令系統(tǒng)與計算機硬件有著某些對應關系,用指指令系統(tǒng)與計算機硬件有著某些對應關系,用指 令進行編程能夠充分開發(fā)計算機硬件資源,它的令進行編程能夠充分開發(fā)計算機硬件資源,它的 程序目標代碼短、運行速度快。程序目標代碼短、運行速度快。 86系列指令系統(tǒng)是在系列指令系統(tǒng)是在8位微處理器位微處理器86系列的指令系列的指令 系統(tǒng)基礎上設計的,它兼容了系統(tǒng)基礎上設計的,它兼容了86系列的全部指令。系列的全部指令。 匯編語言的指令語句與機器指令一一對應匯編語言的

5、指令語句與機器指令一一對應 圖中由前向后的箭頭表示是可選項,由后向前圖中由前向后的箭頭表示是可選項,由后向前 的箭頭表示是重復項,圓頭方框表示是語句中的箭頭表示是重復項,圓頭方框表示是語句中 的關鍵字。的關鍵字。 86系列匯編語言及指令的 格式與尋址方式 【例例6.4】的程序如下:的程序如下: START: INAL,71H; 將將71H端口的字節(jié)讀入端口的字節(jié)讀入AL CLC; 清除清除CF CMPAL,10; 將將AL的內容和的內容和10相比較相比較 JCLP1; 小于小于10轉轉LP1 CMPAL,20; 將將AL的內容和的內容和20相比較相比較 JCLP2; 10AL20轉轉LP2 M

6、OVBL,0FFH ; 將將0FFH送入送入BL寄存器寄存器 LP3:OUT73H,BL ; 將將0FFH輸出到輸出到73H端口端口 HLT; 暫停暫停 LP1:MOVBL,00 JMPLP3 LP2:MOVBL,88H JMPLP3 (1) 標號是給該指令所在地址取的名字。標號是給該指令所在地址取的名字。86系列匯系列匯 編語言中可使用的標識符必須遵循下列規(guī)則:編語言中可使用的標識符必須遵循下列規(guī)則: 標識符由字母標識符由字母(az,AZ)、數(shù)字、數(shù)字(09)或或 某些特殊字符某些特殊字符(,-,?)組成。組成。 第一個字符必須是字母第一個字符必須是字母(az,AZ)或某些特或某些特 殊的符

7、號殊的符號(,-,?),但,但“?”不能單獨作標識符。不能單獨作標識符。 標識符有效長度為標識符有效長度為31個字符,若超過個字符,若超過31個字符,個字符, 則只保留前面的則只保留前面的31個字符為有效標識符。個字符為有效標識符。 (2) 指令助記符是指令名稱的代表符號,它表示本指指令助記符是指令名稱的代表符號,它表示本指 令的操作類型,必要時可在指令助記符的前面加上令的操作類型,必要時可在指令助記符的前面加上 一個或多個一個或多個“前綴前綴”,從而實現(xiàn)某些附加操作。,從而實現(xiàn)某些附加操作。 (3) 操作數(shù)是參加本指令運算的數(shù)據,有些指令不需操作數(shù)是參加本指令運算的數(shù)據,有些指令不需 要操作

8、數(shù),可以缺?。挥行┲噶钚枰獌蓚€操作數(shù),要操作數(shù),可以缺?。挥行┲噶钚枰獌蓚€操作數(shù), 這時必須用逗號這時必須用逗號(,)將兩個操作數(shù)分開;有些操作將兩個操作數(shù)分開;有些操作 數(shù)可以用表達式來表示。數(shù)可以用表達式來表示。 (4) 注釋部分是可選項,允許缺省,必須用分號注釋部分是可選項,允許缺省,必須用分號(;) 86系列系列 CPU的尋址方式的尋址方式 尋址:把物理地址分配給程序各條指令的過程尋址:把物理地址分配給程序各條指令的過程 尋址方式:根據指令的地址碼生成操作數(shù)的物尋址方式:根據指令的地址碼生成操作數(shù)的物 理地址的方法理地址的方法 2. 寄存器尋址寄存器尋址 INC CX; 將將CX的內容

9、加的內容加1 ROLAH,1;將;將AH中的內容循環(huán)左移一位中的內容循環(huán)左移一位 操作數(shù)就在操作數(shù)就在CPU的內部寄存器中的內部寄存器中 對對16位操作數(shù)來說,寄存器可以為位操作數(shù)來說,寄存器可以為AX,BX, CX,DX,SI,DI,SP或者或者BP,而對,而對8位操作位操作 數(shù)來說,寄存器可為數(shù)來說,寄存器可為AH,AL,BH,BL,CH, CL,DH,DL 操作就在操作就在CPU內部進行,不需要使用總線周期,內部進行,不需要使用總線周期, 因此,執(zhí)行速度快因此,執(zhí)行速度快 存儲器尋址存儲器尋址 在內存中的源和目的操作數(shù)由在內存中的源和目的操作數(shù)由段選擇子段選擇子和和偏移量偏移量引用引用

10、規(guī)定段選擇子規(guī)定段選擇子 顯顯 示示 或或 者者 隱隱 含含 隱含段選擇子隱含段選擇子 MOV AX,1070H;將;將DS段的段的1070H和和 1071H 兩單元的內容取到兩單元的內容取到AX中中 默認為段寄存器是數(shù)據段寄存器默認為段寄存器是數(shù)據段寄存器DS。設。設DS2000H, 則執(zhí)行過程是將絕對地址為則執(zhí)行過程是將絕對地址為21070H和和21071H兩單元兩單元 的內容取出送的內容取出送AX。 顯式段選擇子顯式段選擇子 如果要對其它段寄存器所指出的存儲區(qū)進行直接尋址,則如果要對其它段寄存器所指出的存儲區(qū)進行直接尋址,則 本條指令前必須用前綴指出段寄存器名。本條指令前必須用前綴指出段

11、寄存器名。 CS:MOV BX,3000H;將將CS段的段的 3000H和和3001H兩單元的內容送兩單元的內容送BX 設設CS為為5100H,則本指令在執(zhí)行時,將,則本指令在執(zhí)行時,將54000H和和 54001H兩單元的內容取出送兩單元的內容取出送BX。 以下的默認段選擇,不能被超越以下的默認段選擇,不能被超越 必須從代碼段取指令必須從代碼段取指令 在串操作中的目的串必須存儲在由在串操作中的目的串必須存儲在由ES寄存器寄存器 指向的數(shù)據段指向的數(shù)據段 推入和彈出操作必須是引用推入和彈出操作必須是引用SS 規(guī)定偏移量規(guī)定偏移量 內存地址的偏移量部分,或者直接作為一個靜態(tài)內存地址的偏移量部分,

12、或者直接作為一個靜態(tài) 值(稱為位移量)規(guī)定,或者由以下一個或多個值(稱為位移量)規(guī)定,或者由以下一個或多個 成員通過計算得到地址:成員通過計算得到地址: (1) 位移量位移量一個一個8位、位、16位或位或32位值;位值; (2) 基地址基地址在通用寄存器中的值;在通用寄存器中的值; (3) 索引索引在通用寄存器中的值;在通用寄存器中的值; (4) 比例系數(shù)比例系數(shù)值值2、4或或8,用于與索引值,用于與索引值 相乘。相乘。 由這些成員相加的結果的偏移量稱為有效地址。由這些成員相加的結果的偏移量稱為有效地址。 位移量位移量直接尋址直接尋址 MOV AX,2000H;將;將DS段的段的2000H和和

13、 2001H 兩單元的內容取到兩單元的內容取到AX中中 基地址基地址間接尋址間接尋址 MOV BX,BP ,將,將BP寄存器中的寄存器中的2000作為作為 偏移量。偏移量。 和直接尋址一樣,如果指令前面沒有用前綴指明具體和直接尋址一樣,如果指令前面沒有用前綴指明具體 的段寄存器,則尋址時默認的段寄存器通常為的段寄存器,則尋址時默認的段寄存器通常為DS。如。如 寄存器為寄存器為BP時,則對應的段寄存器為時,則對應的段寄存器為SS。 在有些資料中,將位移量看成是一個相對值。細分起在有些資料中,將位移量看成是一個相對值。細分起 來,寄存器間接尋址可分為以下來,寄存器間接尋址可分為以下4種:種: (1

14、)以以BX寄存器進行間接尋址寄存器進行間接尋址數(shù)據段基址尋址。數(shù)據段基址尋址。 MOV AX,BX 設DS5000H,BX3000H,則本指令在執(zhí)行時, 將53000H和53001H兩單元的內容送AX。 ES MOVCX,BX 設ES3000H,BX4000H,則本指令在執(zhí)行時, 將34000H和34001H兩單元的內容送CX。 (2) 以以BP寄存器進行間接尋址寄存器進行間接尋址堆棧段基址尋址。堆棧段基址尋址。 MOV BX,BP 設設SS5000H,BP4000H,則本指令在執(zhí)行,則本指令在執(zhí)行 時,將時,將54000H和和54001H兩單元的內容送兩單元的內容送BX。 (3) 以以SI和

15、和DI寄存器進行間接尋址寄存器進行間接尋址變址尋址。變址尋址。SI 和和DI寄存器分別稱為源變址寄存器和目的變址寄存寄存器分別稱為源變址寄存器和目的變址寄存 器,所以用這兩個寄存器來進行間接尋址也叫變址尋器,所以用這兩個寄存器來進行間接尋址也叫變址尋 址。變址尋址通常用于對數(shù)組元素進行操作,另外,址。變址尋址通常用于對數(shù)組元素進行操作,另外, 在在“54串操作指令中還將講到有些串操作指令要串操作指令中還將講到有些串操作指令要 求用固定的變址寄存器對操作數(shù)進行尋址,操作過程求用固定的變址寄存器對操作數(shù)進行尋址,操作過程 中,指令會自動修改變址寄存器中的地址,以指向下中,指令會自動修改變址寄存器中

16、的地址,以指向下 一個操作數(shù)。一個操作數(shù)。 (4) 將將BX,BP和和SI,DI寄存器組合起來進行寄存器組合起來進行 間接尋址間接尋址基址加變址的尋址。通常將基址加變址的尋址。通常將BX和和 BP稱為基址寄存器,將稱為基址寄存器,將SI和和DI稱為變址寄存器。稱為變址寄存器。 EABX SI BP + DI +偏移量偏移量 MOV AX,BX+SI 設DS1000H,BX5000H,SI2000H,則 上面指令在執(zhí)行時,有效地址為7000H,本指令 將17000H和17001H兩單元的內容取到AX中。 MOV AX,BX+SI+0050; 將BX和SI中的內容與0050相加作為有效地址 【例例

17、5.1】設設BX0158H,DI10A5H,位移,位移 量量1B57H,DS2100H,并假定沒有使用段,并假定沒有使用段 前綴,即把前綴,即把DS作為操作數(shù)對應的段寄存器。作為操作數(shù)對應的段寄存器。 在各種尋址方式下,這些寄存器和位移量所產生的在各種尋址方式下,這些寄存器和位移量所產生的 有效地址和物理地址為:有效地址和物理地址為: 直接尋址:直接尋址: 有效地址有效地址1B57H 物理地址物理地址21000H+1B57H22B57H 寄存器間接尋址寄存器間接尋址(寄存器為寄存器為BX): 有效地址有效地址0158H 物理地址物理地址21000H+0158H21158H BX寄存器相對間接尋

18、址:寄存器相對間接尋址: 有效地址有效地址0158H+1B57H1CAFH 物理地址物理地址21000H+1CAFH22CAFH 變址尋址變址尋址(寄存器為寄存器為DI): 有效地址有效地址10A5H 物理地址物理地址21000H+10A5H220A5H DI寄存器相對變址尋址:寄存器相對變址尋址: 有效地址有效地址10A5H+1B57H2BFCH 物理地址物理地址21000H+2BFCH23BFCH 基址加變址的尋址基址加變址的尋址(BX為基址寄存器,為基址寄存器,DI為變址為變址 寄存器寄存器): 有效地址有效地址0158H+10A5H11FDH 物理地址物理地址21000H+11FDH2

19、21FDH 相對的基址加變址的尋址相對的基址加變址的尋址(BX為基址寄存器,為基址寄存器,DI 為變址寄存器為變址寄存器): 有效地址有效地址0158H+10A5H+1B57H2D54H 物理地址物理地址21000H+2D54H23D54H 8086指令分類指令分類 8086指令系統(tǒng)按功能可分為指令系統(tǒng)按功能可分為4大類型:大類型: 1. 數(shù)據傳輸類數(shù)據傳輸類 2. 數(shù)據操作類數(shù)據操作類 3. 串操作類串操作類 4. 控制類控制類 傳送類指令傳送類指令 一、數(shù)據傳送指令一、數(shù)據傳送指令 數(shù)據傳送指令又可以分成數(shù)據傳送指令又可以分成4種:種: 1. 通用數(shù)據傳送通用數(shù)據傳送 2. 累加器專用傳送

20、(輸入累加器專用傳送(輸入/輸出數(shù)據傳送)輸出數(shù)據傳送) 3. 目的地址傳送目的地址傳送 4. 標志寄存器轉送標志寄存器轉送 3.4.1 通用數(shù)據傳送指令通用數(shù)據傳送指令MOV 指令格式:指令格式:MOV DST, SRC; 源操作數(shù)和目的操作數(shù)可用上述源操作數(shù)和目的操作數(shù)可用上述6種尋址方式的種尋址方式的 任何一種。任何一種。 將源操作數(shù)內容復制到目操作數(shù)中,結果目的操將源操作數(shù)內容復制到目操作數(shù)中,結果目的操 作數(shù)的內容等于源操作數(shù)的內容,源操作數(shù)的內作數(shù)的內容等于源操作數(shù)的內容,源操作數(shù)的內 容不變。即容不變。即OPRD2OPRD1。 OPRD1和和OPRD2可以是字節(jié)或字,可以是字節(jié)或

21、字, 但是必須但是必須 等長。等長。 對標志位的影響:無對標志位的影響:無 通用寄存器 (AX、 B X、 C X、 DX、 B P、 SP、 SI、 DI) 存 儲 器 立 即 數(shù) 段寄存器 (C S、 SS、 DS、 ES) 源操作數(shù)可以是通用寄存器、段寄存器、存源操作數(shù)可以是通用寄存器、段寄存器、存 儲器以及立即操作數(shù),目標操作數(shù)可以是通儲器以及立即操作數(shù),目標操作數(shù)可以是通 用寄存器、段寄存器(用寄存器、段寄存器(CS除外)或存儲器。除外)或存儲器。 MOV regMOV reg,data ;data ;立即數(shù)送寄存器立即數(shù)送寄存器 MOV mem MOV mem,data ;data

22、 ;立即數(shù)送存儲單元立即數(shù)送存儲單元 MOV mem/reg1MOV mem/reg1,mem/reg2mem/reg2 指令中兩操作數(shù)中至少有一個為寄存器指令中兩操作數(shù)中至少有一個為寄存器 例例: MOV: MOVCLCL,DLDL MOV MOVAXAX,BXBX MOVMOVSISI,CXCX MOVMOVCLCL,BX+5BX+5 MOV segregMOV segreg,mem/reg ;mem/reg ; 存儲單元存儲單元/ /寄存器送段寄存器寄存器送段寄存器 MOV mem/regMOV mem/reg,segreg ;segreg ; 段寄存器送存儲單元段寄存器送存儲單元/ /

23、寄存器寄存器 段寄存器段寄存器CS、IP及立即數(shù)不能作為目標操作數(shù);及立即數(shù)不能作為目標操作數(shù); 兩個存儲單元之間不允許直接傳送數(shù)據;兩個存儲單元之間不允許直接傳送數(shù)據; 立即數(shù)不能直接傳送到段寄存器;立即數(shù)不能直接傳送到段寄存器; 兩個段寄存器之間不能直接傳送數(shù)據。兩個段寄存器之間不能直接傳送數(shù)據。 通用寄存器 (AX、 B X、 C X、 DX、 B P、 SP、 SI、 DI) 存 儲 器 立 即 數(shù) 段寄存器 (C S、 SS、 DS、 ES) 幾個不能傳送的解決辦法:用幾個不能傳送的解決辦法:用AXAX作橋梁作橋梁 存儲器存儲器存儲器:存儲器: MOV AXMOV AX,MEM1ME

24、M1 MOV MEM2 MOV MEM2,AXAX 段寄存器段寄存器段寄存器:段寄存器: MOV AXMOV AX,DSDS MOV ES MOV ES,AXAX 段寄存器段寄存器立即數(shù):立即數(shù): MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX 應用舉例:將應用舉例:將1000H1000H開始的開始的100100個存儲單元個存儲單元 全部填充為全部填充為ASCIIASCII碼碼2AH(2AH(* *) )。 程序段如下:程序段如下: MOV DIMOV DI,1000H1000H MOV CX MOV CX,64H64H MOV AL MOV AL,2AH2A

25、H AGAINAGAIN:MOV DIMOV DI,ALAL INC DI INC DI DEC CX DEC CX JNZ AGAIN JNZ AGAIN HLT HLT 堆棧操作指令堆棧操作指令 什么是堆棧?什么是堆棧? 按按“后進先出后進先出(LIFO)(LIFO)”方式工作的存儲方式工作的存儲 區(qū)域。堆棧以字為單位進行壓入彈出操作。區(qū)域。堆棧以字為單位進行壓入彈出操作。 為什么要設置堆棧?為什么要設置堆棧? 為什么要按為什么要按 “后進先出后進先出”方式工作?方式工作? 規(guī)定由規(guī)定由SSSS指示堆棧段的段基址,堆棧指針指示堆棧段的段基址,堆棧指針SPSP始終始終 指向堆棧的頂部,指向堆

26、棧的頂部,SPSP的初值規(guī)定了所用堆棧區(qū)的的初值規(guī)定了所用堆棧區(qū)的 大小。堆棧的最高地址叫棧底。大小。堆棧的最高地址叫棧底。 壓棧指令壓棧指令 PUSH src ; src為為16位操作數(shù)位操作數(shù) 例:例:PUSHAX;將;將AX內容壓棧內容壓棧 執(zhí)行操作:(執(zhí)行操作:(SP)-1高字節(jié)高字節(jié)AH (SP)-2低字節(jié)低字節(jié)AL (SP)(SP)- 2 設(設(AXAX)=1020H=1020H,執(zhí)行示意圖如圖,執(zhí)行示意圖如圖 低地址低地址 存儲區(qū)存儲區(qū) (SS段)段) 執(zhí)行前執(zhí)行前 (AX)=1020 (SP) 存儲區(qū)存儲區(qū) (SS段)段) 進棧方向進棧方向 執(zhí)行后執(zhí)行后 20 10 (AL)

27、 (AH) 2-82-8 PUSH AX指令執(zhí)行示意圖指令執(zhí)行示意圖 (SP)-2 (SP) 高地址高地址 低地址低地址 高地址高地址 (SP)- -1 壓棧指令的格式為:壓棧指令的格式為: PUSHPUSH reg reg PUSH PUSH mem/reg mem/reg PUSH PUSH segreg segreg 例如:例如: PUSH AXPUSH AX PUSH BX PUSH BX PUSH DS PUSH DS 注意進棧方向是注意進棧方向是高地址高地址向向低地址低地址發(fā)展。發(fā)展。 彈出指令彈出指令 POPPOPdestdest 例:例:POPPOPBXBX;將棧頂內容彈至;將

28、棧頂內容彈至BXBX 執(zhí)行操作:執(zhí)行操作: (BLBL)(SPSP) (BHBH)(SPSP)+1+1 (SPSP)(SPSP)+2+2 POP BX POP BX 的執(zhí)行示意圖如下圖所示的執(zhí)行示意圖如下圖所示 低地址低地址 存儲區(qū)存儲區(qū) (SS段)段) 出棧方向出棧方向 執(zhí)行前執(zhí)行前 20 10 POP BX指令執(zhí)行示意圖指令執(zhí)行示意圖 (SP) 存儲區(qū)存儲區(qū) (SS段)段) 執(zhí)行后執(zhí)行后 (BX)=1020 (SP) (SP)+1 (SP)+2 BX 20201010 高地址高地址 低地址低地址 高地址高地址 堆棧指令使用時應注意幾點:堆棧指令使用時應注意幾點: 堆棧操作總是按字進行堆棧操

29、作總是按字進行 不能從棧頂彈出一個字給不能從棧頂彈出一個字給CSCS 堆棧指針為堆棧指針為SS:SPSS:SP,SPSP永遠指向棧頂永遠指向棧頂 SPSP自動進行增減量(自動進行增減量(-2-2,+2+2) PUSHDS PUSHES POP ES POP DS 格式:格式:XCHG mem/regXCHG mem/reg,mem/regmem/reg 功能:交換兩操作數(shù)的內容。功能:交換兩操作數(shù)的內容。 要求:兩操作數(shù)中必須有一個在寄存器中;要求:兩操作數(shù)中必須有一個在寄存器中; 操作數(shù)不能為段寄存器和立即數(shù);操作數(shù)不能為段寄存器和立即數(shù); 源和目地操作數(shù)類型要一致。源和目地操作數(shù)類型要一致

30、。 舉例:舉例: XCHGXCHGALAL,BLBL XCHG XCHGAXAX,BXBX XCHG XCHG2000H2000H,CLCL XCHG XCHG2530H2530H,CXCX 交換指令交換指令XCHGXCHG 輸入輸出數(shù)據傳送指令輸入輸出數(shù)據傳送指令 只限于用累加器只限于用累加器ALAL或或AXAX來傳送信息。來傳送信息。 功能功能: (: (累加器累加器)I/O)I/O端口端口 (1)(1)輸入指令輸入指令ININ IN IN acc,PORTacc,PORT ;PORT;PORT端口號端口號0 0255255 IN IN acc,DXacc,DX ;DX;DX表示的端口范圍

31、達表示的端口范圍達64K64K 例例:IN AL:IN AL,50H ;(AL50H ;(AL)(50H(50H端口端口) ) IN ALIN AL,DX ;(ALDX ;(AL)(DX)(DX) IN IN AXAX,70H70H;(AX;(AX)(70H(70H、71H71H端口端口) ) IN IN AXAX,DX DX ;(AX;(AX) (DX) (DX)、(、(DX+1DX+1)) ) 例:例:OUT 68HOUT 68H,AX ;(69HAX ;(69H,68H68H)(AXAX) OUT DXOUT DX,AL ;(DX)(AL)AL ;(DX)(AL) 在使用間接尋址的在使用

32、間接尋址的IN/OUTIN/OUT指令時,要事先用傳送指令時,要事先用傳送 指令把指令把I/OI/O端口號設置到端口號設置到DXDX寄存器,如:寄存器,如: MOV DX MOV DX,220H220H IN AL IN AL,DX ;DX ;將將220H220H端口內容讀入端口內容讀入ALAL 格式:格式: OUT port,accOUT port,acc OUT DX,acc OUT DX,acc 目標地址傳送指令目標地址傳送指令 注意以下兩條指令差別:注意以下兩條指令差別: LEA BXLEA BX,BUFFER BUFFER MOV BXMOV BX,BUFFERBUFFER 前者表示

33、將符號地址為前者表示將符號地址為BUFFERBUFFER的存儲單元的偏侈的存儲單元的偏侈 地址取到地址取到 BXBX中中; ;后者表示將后者表示將BUFFERBUFFER存儲單元中的存儲單元中的 內容取內容取到到 BXBX中中. . LEAAX,2728;將將2728單元的偏移量單元的偏移量 送送AX,指令執(zhí)行后,指令執(zhí)行后,AX中為中為2728 LEABX,BP+SI;指令執(zhí)行后,指令執(zhí)行后, BX中的內容為中的內容為BP+SI的值的值 LEASP,0482;使堆棧指針使堆棧指針SP為為482 前提條件:前提條件:設設2130H2133H這這4個單元中存?zhèn)€單元中存 放著一個地址,放著一個地址

34、,2130H和和2131H中為地址的偏中為地址的偏 移量,移量,2132H和和2133H中為地址的段值中為地址的段值 指令執(zhí)行結果:指令執(zhí)行結果:使使2130H和和2131H中的偏移量中的偏移量 送到送到DI,2132H和和2133H中的段值送到中的段值送到DS。 LDS DI,2130H ; LES DI,2130H ; 指令執(zhí)行結果:指令執(zhí)行結果:使使2130H和和2131H中的偏移量中的偏移量 送到送到DI,2132H和和2133H中的段值送到中的段值送到ES。 3.4.2 算術運算類指令算術運算類指令 涉及兩種類型數(shù)據涉及兩種類型數(shù)據: 無符號數(shù)和有符號數(shù)。對無符號數(shù)和有符號數(shù)。對 加

35、減法指令,無符號和有符號數(shù)可采用同一套指加減法指令,無符號和有符號數(shù)可采用同一套指 令,但應注意:令,但應注意: l 參加的操作數(shù)必須都是無符號數(shù)或都是有符號參加的操作數(shù)必須都是無符號數(shù)或都是有符號 數(shù)。數(shù)。 l 需使用不同的標志位來檢查無符號數(shù)和有符號需使用不同的標志位來檢查無符號數(shù)和有符號 數(shù)的運算結果是否溢出。數(shù)的運算結果是否溢出。 (1) (1) 不帶進位的加法指令不帶進位的加法指令ADDADD 格式:格式: ADDADD acc,dataacc,data ADD ADD mem/reg,datamem/reg,data ADD ADD mem/reg1,mem/reg2mem/reg

36、1,mem/reg2 例:例:ADDADDALAL,50H 50H ADD ADDCXCX,1000H1000H ADD ADDDXDX,SI SI ADD ADDBX+DIBX+DI,AXAX ADD ADDAXAX,BX+2000HBX+2000H ADDADD指令對標志位(指狀態(tài)標志)都有影響。指令對標志位(指狀態(tài)標志)都有影響。 加法指令加法指令 (2) (2) 帶進位位的加法指令帶進位位的加法指令ADCADC ADC ADC指令在形式上和功能上都有與指令在形式上和功能上都有與ADDADD類似,類似, 只是相加時還要包括進位標志只是相加時還要包括進位標志CFCF的內容,例如:的內容,例

37、如: ADC AXADC AX,SI ;AX(AX)+(SI)+(CF)SI ;AX(AX)+(SI)+(CF) ADC DX ADC DX,SI ;SI ; DX(DX)+SI+1SI+(CF)DX(DX)+SI+1SI+(CF) ADC BX+DI ADC BX+DI,AX ;BX+DI+1BX+DI AX ;BX+DI+1BX+DI BX+DI+1BX+DI+AX+(CF)BX+DI+1BX+DI+AX+(CF) ADC AL ADC AL,5 ;AL(AL)+5+(CF)5 ;AL(AL)+5+(CF) 例例: :有兩個有兩個4 4字節(jié)的無符號數(shù)相加:字節(jié)的無符號數(shù)相加: 2C56F8

38、AC+309E47BE=2C56F8AC+309E47BE=? 設被加數(shù)、加數(shù)分別存放在設被加數(shù)、加數(shù)分別存放在BUFFER1BUFFER1及及BUFFER2BUFFER2開開 始的兩個存儲區(qū)內,結果放回始的兩個存儲區(qū)內,結果放回BUFFER1BUFFER1存儲區(qū),如存儲區(qū),如 下頁圖所示。下頁圖所示。 因因CPUCPU只能進行只能進行8 8位或位或1616位的加法運算,為此可將位的加法運算,為此可將 加法分加法分4 4次進行。次進行。 ADCADC指令主要用于多字節(jié)加法運算中指令主要用于多字節(jié)加法運算中 程序段如下:程序段如下: MOV CXMOV CX,4 ;4 ;置循環(huán)次數(shù)置循環(huán)次數(shù) M

39、OV SIMOV SI,0 ;0 ;置置SISI初值為零初值為零 CLC ;CLC ;清進位標志清進位標志CFCF LLLL: MOVMOV AL AL,BUFFER2SIBUFFER2SI ADC ADC BUFFER1SI BUFFER1SI,AL ;AL ;帶進位加帶進位加 INCINC SI ;(SI)+1 SI ;(SI)+1 DEC DEC CX ;(CX)-1 CX ;(CX)-1 JNZ LL ; JNZ LL ;若若( (CX)CX) 0,0,則轉則轉LLLL 思考:若最高位有進位,如何改?思考:若最高位有進位,如何改? 格式:格式:INC INC reg/memreg/me

40、m 功能:類似于功能:類似于C C語言中的語言中的+操作:對指定的操作:對指定的 操作數(shù)加操作數(shù)加1 1 例:例: INC ALINC AL INC SI INC SI INC BYTE PTRBX+4 INC BYTE PTRBX+4 注:本指令不影響注:本指令不影響CFCF標志。標志。 3) 3) 加加1 1指令指令INCINC(單操作數(shù)指令單操作數(shù)指令) 減法指令減法指令 (1) (1) 不考慮借位的減法指令不考慮借位的減法指令SUBSUB 格式:格式: SUB SUB destdest, , srcsrc 操作:操作: dest(dest)-(srcdest(dest)-(src) )

41、 注:注:1.1.源和目的操作數(shù)不能同時為存儲器操作數(shù)源和目的操作數(shù)不能同時為存儲器操作數(shù) 2.2.立即數(shù)不能作為目的操作數(shù)立即數(shù)不能作為目的操作數(shù) 指令例子:指令例子: SBBSBB指令主要用于多字節(jié)的減法。指令主要用于多字節(jié)的減法。 格式:格式: SBB SBB destdest, , srcsrc 操作:操作: dest(dest)-(src)-(CFdest(dest)-(src)-(CF) ) 指令例子:指令例子: SBB AX SBB AX,CX;CX; SBB WORD PTRSI SBB WORD PTRSI,2080H;2080H; SBB SI,DX; SBB SI,DX;

42、 SBB SBBAXAX,2030H2030H; SBB SBBWORD PTR WORD PTR DI+2DI+2,1000H1000H; 例:例:x、y、z均為均為32位數(shù),這三個數(shù)的低位數(shù),這三個數(shù)的低16位和高位和高16位分別存放位分別存放 在地址為在地址為X, X+2;Y, Y+2;Z, Z+2的存儲單元中。用指令序列的存儲單元中。用指令序列 實現(xiàn)實現(xiàn)wx+y+24-z,結果放在,結果放在W, W+2單元中。單元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ; x和和y的低的低16位相加,結果存入位相加,結果存入AX ADC DX, Y+2 ; x和和y的高的

43、高16位相加,結果存入位相加,結果存入DX ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 結果存入結果存入W, W+2單元單元 作用類似于作用類似于C C語言中的語言中的”操作符。操作符。 格式:格式:DEC DEC opropr 操作:操作:opr(opr)-1opr(opr)-1 指令例子:指令例子: DEC CL DEC CL DEC BYTE PTRDI+2 DEC BYTE PTRDI+2 DEC SI DEC SI (3) (3) 減減1 1指令指令DEC

44、DEC 格式:格式: NEG NEG opropr 操作:操作: opropr 0-(opr) 0-(opr) 對一個操作數(shù)取補碼相當于用對一個操作數(shù)取補碼相當于用0 0減去此操作數(shù),故減去此操作數(shù),故 利用利用NEGNEG指令可得到負數(shù)的絕對值。指令可得到負數(shù)的絕對值。 例:若例:若( (AL)=0FCHAL)=0FCH,則執(zhí)行,則執(zhí)行 NEG ALNEG AL 后,后, ( (AL)=04HAL)=04H,CF=1CF=1 本例中,本例中,0FCH0FCH為為-4-4的補碼的補碼, ,執(zhí)行求補指令后執(zhí)行求補指令后, ,即得即得 到到4(-44(-4的絕對值的絕對值) )。 (4) (4)

45、求補指令求補指令NEGNEG 格式:格式: CMP CMP destdest, , srcsrc 操作:操作: ( (dest)-(srcdest)-(src) ) CMPCMP也是執(zhí)行兩個操作數(shù)相減也是執(zhí)行兩個操作數(shù)相減, ,但結果不送目標操作但結果不送目標操作 數(shù)數(shù), ,其結果只反映在標志位上。其結果只反映在標志位上。 指令例子:指令例子: CMP AL CMP AL,0AH0AH CMP CX CMP CX,SISI CMP DI CMP DI,BX+03BX+03 (5) (5) 比較指令比較指令CMPCMP 根據標志位來判斷比較的結果根據標志位來判斷比較的結果 1)1)根據根據ZF判

46、斷兩個數(shù)是否相等。若判斷兩個數(shù)是否相等。若ZF=1,=1,則兩數(shù)相則兩數(shù)相 等。等。 2)2)若兩個數(shù)不相等若兩個數(shù)不相等, ,則分兩種情況考慮則分兩種情況考慮: : 比較的是兩個無符號數(shù)比較的是兩個無符號數(shù) 若若CF=0,=0,則則destdestsrcsrc; ; 若若CF=1,=1,則則destdestsrcsrc。 比較的是兩個有符號數(shù)比較的是兩個有符號數(shù) 若若OF SF=0=0,則則destdestsrcsrc; ; 若若OF SF=1=1,則則destdestsrcsrc。 比較指令在使用時,一般在其后緊跟一條條件轉移指比較指令在使用時,一般在其后緊跟一條條件轉移指 令,判斷比較結

47、果的轉向。令,判斷比較結果的轉向。 舉例:比較舉例:比較ALAL、BLBL、CLCL中帶符號數(shù)的大小,將中帶符號數(shù)的大小,將 最小數(shù)放在最小數(shù)放在ALAL中。中。 程序:程序: CMP AL,BL CMP AL,BL ;ALAL和和BLBL比較比較 JNG BBB JNG BBB ;若若ALBL,ALBL,則轉則轉 XCHG AL,BL XCHG AL,BL ;若若ALALBL,BL,則交換則交換 BBB: CMP AL,CL BBB: CMP AL,CL ;ALAL和和CLCL比較比較 JNG CCC JNG CCC ;若若ALCL,ALCL,則轉則轉 XCHG AL,CL XCHG AL,

48、CL ;若若ALALCL,CL,則交換則交換 CCC: HLTCCC: HLT 乘法指令乘法指令 進行乘法時:進行乘法時:8 8位位* *8 8位位1616位乘積位乘積 16 16位位* *1616位位3232位乘積位乘積 (1) (1) 無符號數(shù)的乘法指令無符號數(shù)的乘法指令MUL(MEM/REG)MUL(MEM/REG) 格式:格式: MUL src 操作:字節(jié)操作數(shù)操作:字節(jié)操作數(shù) (AX) (AL) (src) 字操作數(shù)字操作數(shù) (DX, AX) (AX) (src) 指令例子:指令例子: MUL BL MUL BL ;(AL)(AL)(BL),(BL),乘積在乘積在AXAX中中 MUL

49、 CX MUL CX ;(AX)(AX)(CX),(CX),乘積在乘積在DX,AXDX,AX中中 格式與格式與MULMUL指令類似,只是要求兩操作數(shù)均為指令類似,只是要求兩操作數(shù)均為有符號有符號 數(shù)數(shù)。 IMUL BL IMUL BL ;(AX)(AL)(AX)(AL)(BL)(BL) IMUL WORD PTRSI IMUL WORD PTRSI ;(DX,AX)(AX)(DX,AX)(AX)(SI+1SI)(SI+1SI) (2) (2) 有符號數(shù)乘法指令有符號數(shù)乘法指令IMULIMUL 除法指令除法指令 進行除法時:進行除法時:1616位位/8/8位位8 8位商位商 3232位位/16/

50、16位位1616位商位商 對被除數(shù)、商及余數(shù)存放有如下規(guī)定:對被除數(shù)、商及余數(shù)存放有如下規(guī)定: 被除數(shù)被除數(shù) 商商余數(shù)余數(shù) 字節(jié)除法字節(jié)除法 AXAX AL AL AH AH 字除法字除法 DX:AXDX:AX AX AX DX DX 無符號除法無符號除法DIV 格式:格式: DIV src 操作:字節(jié)操作操作:字節(jié)操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余數(shù)的余數(shù) 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余數(shù)的余數(shù) 指令例子:指令例子: DIV CL DIV CL DI

51、V WORD PTRBX DIV WORD PTRBX 注:若除數(shù)為零或注:若除數(shù)為零或ALAL中商大于中商大于FFH(FFH(或或AXAX中商大于中商大于 FFFFH)FFFFH),則,則CPUCPU產生一個類型產生一個類型0 0的內部中斷。的內部中斷。 有符號數(shù)除法指令有符號數(shù)除法指令IDIV 格式:格式: IDIV src 操作與操作與DIVDIV類似。商及余數(shù)均為有符號數(shù)類似。商及余數(shù)均為有符號數(shù), ,且余數(shù)且余數(shù) 符號總是與被除數(shù)符號相同。符號總是與被除數(shù)符號相同。 注意注意: 對于對于DIV/IDIV指令指令 v AX(DX,AX)為隱含的被除數(shù)寄存器。為隱含的被除數(shù)寄存器。 v

52、AL(AX)為隱含的商寄存器。為隱含的商寄存器。 v AH(DX)為隱含的余數(shù)寄存器。為隱含的余數(shù)寄存器。 v src不能為立即數(shù)。不能為立即數(shù)。 v 對所有條件標志位均無定義。對所有條件標志位均無定義。 v除法運算要求被除數(shù)字長是除數(shù)字長的兩倍除法運算要求被除數(shù)字長是除數(shù)字長的兩倍, ,若若 不滿足則需對被除數(shù)進行擴展不滿足則需對被除數(shù)進行擴展, ,否則產生錯誤。否則產生錯誤。 v對于無符號數(shù)除法擴展,只需將對于無符號數(shù)除法擴展,只需將AHAH或或DXDX清零即可清零即可 。 v對有符號數(shù)而言對有符號數(shù)而言,則是符號位的擴展。可使用前則是符號位的擴展。可使用前 面介紹過的符號擴展指令面介紹過

53、的符號擴展指令CBW和和CWD (5)(5)字節(jié)字節(jié)- -字轉換指令字轉換指令 格式:格式:CBW ;把把AL的符號位復制到的符號位復制到AH CWD ;把把AX的符號位復制到的符號位復制到DX 用途:用于有符號數(shù)的除法。用途:用于有符號數(shù)的除法。 例如:例如:(AL) = A7H,則執(zhí)行,則執(zhí)行CBW后,后,AH 的內容為的內容為FFH。 例例: 寫出寫出34H25H的程序段。的程序段。 MOV AL,34H MOV BL,25H CBW ; AL的符號擴展到的符號擴展到AH IDIV BL ; 0034H25H,25H,結果為結果為 ; (AH)=0FH, (AL)=01H * *3.4.

54、3 BCD3.4.3 BCD碼運算的十進制調整碼運算的十進制調整 指令指令 v專用于對專用于對BCD碼運算的結果進行調整碼運算的結果進行調整 v包括:包括:AAAAAA、DAADAA、AASAAS、DASDAS、AAMAAM、AADAAD v均為隱含尋址,隱含的操作數(shù)為均為隱含尋址,隱含的操作數(shù)為ALAL和和AHAH v為何要對為何要對BCD碼的運算結果進行調整?碼的運算結果進行調整? bcd碼是一種用二進制編碼的十進制數(shù),又稱二碼是一種用二進制編碼的十進制數(shù),又稱二 十一進制數(shù)。它是用十一進制數(shù)。它是用4位二進制數(shù)表示一個十進制位二進制數(shù)表示一個十進制 碼的,由于這碼的,由于這4位二進制數(shù)的

55、權為位二進制數(shù)的權為8421,所以,所以 bcd碼又稱碼又稱8421碼。碼。 一個一個BCD碼占碼占4位,而一個字節(jié)有位,而一個字節(jié)有8位。若把二位。若把二 個個BCD碼放在一個字節(jié)中,就叫壓縮的碼放在一個字節(jié)中,就叫壓縮的BCD碼。碼。 而一個字節(jié)只放一個而一個字節(jié)只放一個BCD碼,高位置碼,高位置0,則叫非壓,則叫非壓 縮的縮的BCD碼。碼。 如:如:0011 1001 若將其理解為壓縮若將其理解為壓縮bcd碼,則碼,則 是十進制的是十進制的39 1 1) )加法的十進制調整指令加法的十進制調整指令 ( (1 1) )非壓縮非壓縮BCDBCD碼加法調整碼加法調整AAA 本指令對在本指令對在

56、ALAL中的由兩個未組合的中的由兩個未組合的BCDBCD碼相加后的碼相加后的 結果進行調正,得到一個正確的未組合的結果進行調正,得到一個正確的未組合的BCDBCD碼。碼。 vAAAAAA指令只影響指令只影響AFAF和和CFCF,其余標志無定義。其余標志無定義。 vAAAAAA指令應緊跟在指令應緊跟在ADDADD或或ADCADC指令之后。指令之后。 如果如果ALAL的低的低4 4位位9 9AF=1AF=1,則:則: AL(AL)+6,(AH)(AH)+1,AF1AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH) AL(AL)0FH) CFAF CFAF 否則否則AL(AL)0F

57、HAL(AL)0FH AAAAAA指令的操作如下:指令的操作如下: 調整原理:先看一個例子調整原理:先看一個例子 計算計算8 89 9 0000 10000000 1000 見右式見右式 +0000 1001 +0000 1001 0001 0001 00010001 1111 結果應為結果應為1717,而計算機相加為,而計算機相加為1111,原因在于運算過原因在于運算過 程中,如遇到低程中,如遇到低4 4位往高位往高4 4位產生進位時(此時位產生進位時(此時AF=1AF=1 )是按逢十六進一的規(guī)則,但是按逢十六進一的規(guī)則,但BCDBCD碼要求逢十進一碼要求逢十進一 ,因此只要產生進位,個位就

58、會少,因此只要產生進位,個位就會少6 6,這就要進行,這就要進行 加加6 6調正。調正。 實際上當?shù)蛯嶋H上當?shù)? 4位的結果位的結果9(9(即即A AF F之間之間) )時,也應進時,也應進 行加行加6 6調正調正 ( (原因是逢十沒有進位,故用加原因是逢十沒有進位,故用加6 6的方法的方法 強行產生進位強行產生進位) ) 。 如對上例的結果進行加如對上例的結果進行加6 6: 0001 0001 0001 0001 1111 + 0000 0110 + 0000 0110 6 6 0000 0111 0000 0111 17 17 0000 1111 0000 1111 - - 1 0000

59、1111 1 0000 1111 ( (2 2) )壓縮壓縮BCDBCD碼加法調整碼加法調整DAA l 兩個壓縮兩個壓縮BCDBCD碼相加結果在碼相加結果在ALAL中,通過中,通過DAADAA調整調整 得到一個正確的壓縮得到一個正確的壓縮BCDBCD碼碼. . l 指令操作指令操作( (調整方法調整方法) ): 若若ALAL的低的低4 4位位9 9AF=1AF=1 則則( (AL)(AL)+6AL)(AL)+6,AF1AF1 若若ALAL的高的高4 4位位9 9CF=1CF=1 則則( (AL)(AL)+60HAL)(AL)+60H,CF1CF1 l 除除OFOF外,外,DAADAA指令影響所

60、有其它標志。指令影響所有其它標志。 lDAADAA指令應緊跟在指令應緊跟在ADDADD或或ADCADC指令之后。指令之后。 例:例: 0100 1000 480100 1000 48H H MOV ALMOV AL,48H 48H + 0111 0100+ 0111 0100 74H74H MOV BLMOV BL,74H 1011 1100 BCH74H 1011 1100 BCH ADD AL ADD AL,BL BL + 0110 + 0110 01100110 66H66H DAA 1 0010 DAA 1 0010 00100010 1 22H 1 22H ( (進位進位) ) (

溫馨提示

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

評論

0/150

提交評論