匯編語言課件課件_第1頁
匯編語言課件課件_第2頁
匯編語言課件課件_第3頁
匯編語言課件課件_第4頁
匯編語言課件課件_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言的特點:Ø 面向機器的低級語言,通常是為特定的計算機或計算機系列專門設計的。Ø 保持了機器語言的優點,具有直接和簡捷的特點。Ø 可有效地訪問、控制計算機的各種硬件設備,如磁盤、存儲器、CPU、I/O端口等。Ø 目標代碼簡短,占用內存少,執行速度快,是高效的程序設計語言。Ø 經常與高級語言配合使用,應用十分廣泛。第一章 基礎知識教學目的和要求:Ø 熟練掌握進位計數制和各種進位計數制之間的數制轉換Ø 掌握計算機中數和字符的表示方法教學重點:Ø 二進制數和十六進制數運算教學難點:Ø 十六進制數的運算1.

2、1 進位計數制與不同基數的數之間的轉換1.1.1 二進制數轉換為十進制數方法:按權展開例如:1010110.1011B=26+24+21+2-1+2-3+2-41.1.2 十進制轉換為二進制數方法:整數部分:除基取余,自底向上小數部分:乘基取整,自頂向下例如:N=130D,求其對應的二進制數130D=10000010B1.1.3 十六進制數及其與二進制、十進制之間的轉換1十六進制數二進制數例如:3B2H=10110110010B1001001101B=24DH2十六進制數十進制數3B2H=3×162+11×161+2×16023D=17H1.2 二進制數和十六進制

3、數的運算1.2.1 二進制數運算逢二進一 借一為二加法規則 乘法規則 0 + 0 = 0 0 ´ 0 = 0 0 + 1 = 1 0 ´ 1 = 0 1 + 0 = 1 1 ´ 0 = 0 1 + 1 = 0 (進位1) 1 ´ 1 = 11.2.2 十六進制數運算1加法和減法逢十六進一 借一為十六2乘法化為十進制數,求得結果后再化為十六進制數1.3 計算機中數和字符的表示1.3.1 數的補碼表示規則:正數的補碼等于原碼負數的補碼等于其絕對值的原碼各位取反然后末位加一如:36D,機器字長為16位,求其補碼36的原碼為0000000000100100按位取

4、反:1111111111011011末位加一:11111111110111001.3.2 補碼的加法和減法加法規則:X+Y補碼 = X補碼 + Y補碼減法規則:X-Y補碼 = X補碼 + -Y補碼例如:機器字長為8,求3217補,326補3217補: 001000001110111100001111326補:001000000000011000100110注:補碼減法可轉換為補碼加法進位和溢出進位: 由于運算結果超出了位數,最高有效位向前的進位,這一位自然丟失,一般不表示結果的對錯。溢出:表示結果超出了字長允許表示的范圍,一般會造成結果出錯。1.3.3 無符號數1.3.4 字符表示法ASCII

5、碼:用一個字節來表示一個字符,低7位為字符的ASCII值,最高位一般用作校驗位。1.4 幾種基本的邏輯運算第二章 80x86計算機組織教學目的和要求:Ø 熟練掌握中央處理器的組成,以及存儲器的尋址方式等。教學重點:Ø CPU的組成、8086寄存器組、以及實模式存儲器尋址教學難點:Ø 8086寄存器組、實模式存儲器尋址2.1 80x86微處理器由80386微處理器芯片構成的微機稱為386微機,由80486微處理器芯片構成的微機稱為486微機,P15 表2.1反映出從8086PentiumII的一些主要技術參數,大家可通過它了解一下CPU的發展歷程。2.2 基于微處理

6、器的計算機系統構成2.2.1 硬件CPU運算器控制器存儲器由系統總線連接I/O設備大容量存儲器數據線地址線控制線輸入輸出系統運算器:所有算術與邏輯運算控制器:全機控制工作,從存儲器中取出指令,經譯碼分析后向全機發出取數、執行、存數等控制指令。存儲器:計算機的記憶部件I/O設備:負責與外界通信的輸入、輸出設備,如顯示器、鍵盤等大容量存儲器:可存儲大量信息的外部存儲器,如磁盤、光盤等數據線:傳送信息地址線:指出信息來源和目的地控制線:規定總線的動作注:系統總線的工作由總線控制邏輯指揮2.2.2 軟件軟件系統包括:系統軟件和應用軟件。2.3 中央處理機2.3.1 中央處理器CPU的組成算術邏輯部件控

7、制邏輯工作寄存器386后出現了高速緩沖存儲器2.3.2 80x86寄存器組寄存器是運算器中的存儲單元。分為:程序可見的寄存器(在匯編語言程序設計中用到的寄存器)程序不可見的寄存器(程序設計不可用,由系統調用的)程序可見的寄存器包括:通用寄存器,專用寄存器,段寄存器1、通用寄存器(1)數據寄存器(AX、BX、CX、DX)用來暫時存放計算過程中所用到的操作數、結果或其它信息,可以以字(16位)也可以以字節(8位)的形式訪問。以AX為例:(2)指針(或變址)寄存器(SP、BP、SI、DI)運算過程中存放操作數,只能以字(16位)為單位使用;存儲器尋址時,提供偏移地址。Ø SP(堆棧指針寄存

8、器)用來指示段頂的偏移地址;Ø BP(基址指針寄存器)可作為堆棧區中的某一個基地址,與堆棧段寄存器SS聯用來確定堆棧段中的某一存儲單元的地址;Ø SI(源變址寄存器)和DI(目的變址寄存器)一般用來確定數據段中某一存儲單元的地址。2、專用寄存器(IP、SP、FLAGS)Ø IP(指令指針寄存器)存放代碼段CS中的偏移地址。在程序運行的過程中,始終指向下一條指令的首地址,與代碼段CS聯用來確定下一條指令的物理地址。Ø SP(堆棧指針寄存器)與堆棧段寄存器SS聯用來確定堆棧段中棧頂的地址,即存放棧頂的偏移地址。Ø FLAGS(標志寄存器/程序狀態寄

9、存器PSW)包括條件碼標志、控制標志、系統標志,可按位操作。圖2.4 80X86的標志寄存器(1)條件碼標志位記錄程序中運行結果的狀態信息,根據有關指令的運行結果由CPU自動設置,用作后續條件轉移指令的轉移控制條件。溢出標志(OF)在運算過程中,如操作數超出了機器能表示的范圍稱為溢出。此時OF置1,否則置0。符號標志(SF)記錄運算結果的符號,負時置1,否則置0。零標志(ZF)運算結果為0時置1,否則置0。進位標志(CF)最高有效位有進位時置1,否則置0。輔助進位標志(AF)記錄運算時第3位產生的進位值,有進位時置1,否則置0。奇偶標志(PF)用來為機器中傳送信息時可能產生的代碼出錯情況提供檢

10、驗條件。當結果操作數中1的個數為偶數時置1,否則置0。(2)控制標志位方向標志(DF)在串處理指令中控制處理信息的方向。當DF為1時,每次操作后使變址寄存器SI和DI減小,串處理從高地址向低地址方向處理。當DF為0時,每次操作后使變址寄存器SI和DI增大,串處理從低地址向高地址方向處理。(3)系統標志位用于I/O、中斷屏蔽、程序調試、任務切換和系統工作方式等的控制。一般應用程序不必關心這些位,只有系統程序員或需要編制低層I/O設備控制等程序時才需要。陷阱標志(TF)用于調試時的單步方式操作。TF為1時,每條指令執行完后產生陷阱,由系統控制計算機;TF為0時,CPU正常工作,不產生陷阱。中斷標志

11、(IF)當IF為1時,允許CPU響應可屏蔽中斷請求,否則關閉中斷。(第八章)I/O特權級(IOPL)在保護模式下,用于控制對I/O地址空間的訪問。 (第八章)(4)標志位的符號表示 表2-1 標志位的符號表示標 志 名標志為1標志為0OF 溢出(是否)DF 方向(減量增量IF 中斷(允許關閉)SF 符號(負正)ZF 零(是否)AF 輔助進位(是否)PF 奇偶(偶奇)CF 進位(是否)OVDNEINGZRACPECYNVUPDIPLNZNAPONC3. 段寄存器(放在2.4.2中講解)段寄存器:用于存放段地址的寄存器。8086/8088,80286中的段寄存器包括:代碼段寄存器:CS數據段寄存器

12、:DS堆棧段寄存器:SS附加段寄存器:ES80386以后增加了FS,GS,它們也是附加段寄存器。2.4 存儲器2.4.1 存儲單元的地址和內容1. 存儲單元的地址物理地址:在存儲器里以字節為單位存儲信息,每一個字節單元給以一個唯一的存儲器地址,稱為物理地址。說明:Ø 地址從0開始編號,順序地每次加1。Ø 在機器里,地址用無符號的二進制數表示,當常以無符號十六進制數做為書寫格式。思考:地址總線分別為20位、24位、32位、36位時,可訪問的單元地址范圍。2. 存儲單元的內容Ø 存儲單元的內容:一個存儲單元中存放的信息,書寫格式為:(地址)=內容例如:(0004)=3

13、4HØ 字數據存儲時,低位字節存入低地址,高位字節存入高地址,這樣兩個字節單元構成一個字單元,字單元地址以它的低地址表示。同理,雙字數據存放在連續的4個存儲單元內。例如:(0023H)=1234HØ 同一地址既可以看作字節單元地址,也可以看作字單元地址或雙字單元、四字單元地址。Ø 訪問存儲器時以字為單位進行,即機器以偶地址訪問存儲器,對于奇地址字單元需訪問兩次存儲器。Ø 設X為某存儲單元地址,則(X)表示該單元的內容,如果X的內容仍然為一個地址Y,則Y的內容表示為(X)。例如:(0004H)=1234H,(1234H)=231EH,則(0004H)= 2

14、31EH。2.4.2 實模式存儲器尋址1. 存儲器地址的分段為何要進行分段?分段的目的:解決16位字長的機器無法直接表示20位地址的問題。機器規定:從0地址開始,每16個字節為一小段。如下:00000,00001,00002,0000F;00010,00011,00012,0001F; ;FFFF0,FFFF1,FFFF2,FFFFF分段方法:對存儲器分段時,段可以起始于任意小段的首地址,而不是任意地址,段的大小可以是1B64KB的任意個字節。物理地址:在1M的存儲器里,每個存儲單元都有一個唯一的20位地址,稱為該單元的物理地址。段地址:每一段的起始地址,由于該地址的最低4位為0,故只取高16

15、位。偏移地址:段內相對于段起始地址的偏移量。例如:設段地址為1200H,則下圖中內存單元內容為56H的存儲單元偏移地址為0003H。物理地址的計算方法:物理地址=段地址×16+偏移地址例如:段地址為1234H,偏移地址為0002H,求其物理地址。1234H×16+0002H=12342H注:每個存儲單元都有唯一的物理地址,但可由不同的段地址和不同的偏移地址構成。例如:下列地址對應同一物理地址。段地址為2000H,偏移地址為003DH段地址為2003H,偏移地址為000DH2. 段寄存器段寄存器:專門存放段地址的寄存器。包括:(1)代碼段CS:存放當前正在運行的程序;(2)數

16、據段DS:數據段存放當前運行程序所用的數據,如果程序中使用了串處理指令,則其源操作數也存放在數據段中;(3)堆棧段SS:堆棧段定義了堆棧的所在區域;(4)附加段ES:附加段是附加的數據段,它是一個輔助的數據區,也是串處理指令的目的操作數存放區;在80386及其后繼的80X86中新增段寄存器(1)FS(2)GS 2.4.3 保護模式存儲器尋址(略)2.5 外部設備外部設備與主機(CPU和存儲器)的通信通過外設接口進行,每個外設接口包括一組寄存器,一般有三種不同的用途: 數據寄存器:存放在外設和主機間傳送的數據,起緩沖器的作用。 狀態寄存器:保存外部設備或接口的狀態信息,以便CPU了解和測試外設的

17、工作情況。 命令寄存器:CPU給外設或接口的控制命令。注:Ø 各種外部設備都有以上三種類型的寄存器,只是每個接口所配備的寄存器數量不同。Ø 外設中的每個寄存器都有一個端口(port)地址(端口號),組成了獨立于內存的I/O地址空間。第三章 80x86的指令系統和尋址方式教學目的和要求:Ø 熟練掌握8086的尋址方式Ø 熟練掌握8086的指令系統教學重點:Ø 8086的指令系統和尋址方式教學難點:Ø 尋址方式的理解,各指令的用法指令系統的一般格式:操作碼 操作數,操作數,操作數一地址指令:只有一個操作數二地址指令:有二個操作數,常見格式

18、為:操作碼 目的操作數,原操作數三地址指令:有三個操作數3.1 80x86的尋址方式操作數可存放的位置:Ø 立即數Ø 寄存器中Ø 存儲器中3.1.1 與數據有關的尋址方式1、立即尋址方式操作數直接存放在指令中。如:MOV AX,10A7H ;源操作數的尋址方式為立即尋址MOV AL,87H注:常用來表示常數,只能用于源操作數,不能用于目的操作數。2、寄存器尋址方式操作數存放在CPU內部的寄存器中,指令指定寄存器號。如:MOV AX,BX    INC CX    ADD BL,7 ;目的操作數的尋址方式為

19、寄存器尋址方式注:16位操作數,可用AX,BX,CX,DX,SP,BP,SI,DI    8位操作數,可用AL,AH,BL,BH,CL,CH,DL,DH(除了上述兩種尋址方式外,其他的尋址方式中操作數均保存在存儲器中,介紹之前先學習幾個定義)有效地址(EA:Effective Address):即偏移地址可由以下四部分組成:位移量:存放在指令中的一個8位,16位或32位的數或符號地址。基址:存放在基址寄存器中的內容。(常用于指向數據段中數組或字符串的首地址)變址:存放在變址寄存器中的內容。(常用于訪問數據段中數組的某個元素或字符串的某個字符)比例因子:用于386及

20、以后機型,可以是1,2,4,8,常用于訪問數組。808680286有效地址的組成部分:位移量8,16位基址寄存器BX,BP變址寄存器SI,DI比例因子無有效地址的計算公式:EA=基址+變址+位移量386以后:EA=基址+變址×比例因子+位移量3、直接尋址方式數據在存儲器中,有效地址由指令直接給出。EA=位移量注:有效地址就是偏移地址。如:MOV AX,1008H則:執行完后:(AX)=1234H注:1 可用符號地址(類似于變量名)代替數值地址。如MOV AX,VALUE 或者 MOV AX,VALUE2 有效地址直接給出,段地址默認為數據段。若訪問其他段的數據,需加段跨越前綴。MOV

21、 AX,ES:1008H3. 字數據存放在存儲器中時,高地址存放在高字節,低地址存放在低字節。4、寄存器間接尋址基址寄存器:BX,BP變址寄存器:SI,DI操作數在存儲器中,有效地址為基址寄存器或變址寄存器的內容。即:EA=基址/變址如:MOV AX,BX設(DS)=3000H,(BX)=2000H,(32000H)=12H,(32001H)=34H則:EA=(BX)=2000H物理地址=32000H執行后:(AX)=3412H注:當基址寄存器用BP時,默認段為SS,否則為DS。該規則在以后的幾種尋址方式中同樣適用。如:MOV AX,BP(DS)=3000H,(SS)=2000H,(BP)=2

22、000H則:物理地址=22000H5、寄存器相對尋址EA=基址/變址+位移量如:(1) MOV AX,BP+1000H(2) MOV AX,COUNTBX或MOV AX,BX+COUNTCOUNT為位移量。如果(DS)=3000H,(SS)=2000H,(BP)=2000H,(BX)=3120H,COUNT=0040H則:(1)物理地址=23000H (2)物理地址=33160h6、基址變址尋址方式EA=基址+變址如:MOV AX,BXSI 或 MOV AX,BX+SI7、相對基址變址尋址方式EA=基址+變址+位移量如:MOV AX,COUNTBXDI或MOV AX,BX+DI+COUNT(注

23、意:教材43-44,8-10的尋址方式為386以后機型增加的尋址方式,在此不再介紹。)3.1.2與轉移地址有關的尋址方式(略)3.2 程序占用的空間和執行的時間(略)補充:匯編語言的編寫及調試運行過程1、匯編語言源程序的基本格式注:Ø 程序必須有代碼段,而數據段、附加段、堆棧段只有必要時才有。Ø 用ASSUME將我們定義的各段與段寄存器相對應。Ø 在程序開始時,應將除代碼段以外的其余各段的段地址賦給相應的段寄存器。Ø 程序結束時要有返回DOS的語句。2、程序調試過程1、編輯.ASM匯編語言源程序。(在DOS下可用EDIT編寫)  &#

24、160; EDIT A.ASM2、用MASM對源程序匯編,產生.OBJ的目標文件。    MASM A.ASM 或 MASM A;注:如果提示有語法錯誤,則不產生.OBJ文件,此時我們要返回第1步修改源程序。3、用LINK對.OBJ文件進行連接,產生.EXE的可執行文件。    LINK A.OBJ 或 LINK A;4、執行.EXE可執行文件,或者用DEBUG對.EXE文件進行調試。    執行:A    調試:DEBUG A.EXE3、DEBUG常用指令簡介1、U (反匯

25、編)命令    格式:U 或 U 地址 或 U 地址1 地址2    功能:從代碼段中指定地址進行反匯編    常用方式:        U      從上次結束的位置進行反匯編        U 地址  從指定地址開始進行反匯編2、G(執行)命令    格式:G=地址1地址2&

26、#160;   功能:從地址1開始執行到地址2,或執行到程序結束。    常用方法:        G      從當前位置執行到程序結束        G 地址  從當前位置執行到指定地址3、T(跟蹤)命令    格式:T=地址1數值N    功能:從地址1起執行N條指令后停止。

27、0;   常用方法:        T    僅執行當前一條指令4、D(顯示)命令    格式:D地址或D地址1 地址2    功能:顯示指定內存單元的內容    常用方法:        D 地址   從指定地址開始顯示內存單元的內容    注:如果地址僅僅是偏移地址

28、,則系統默認為數據段。5、R(寄存器)命令    格式:R寄存器名    功能:顯示指定寄存器的值    常用方法:        R   顯示所有寄存器的值6、Q(退出)命令    格式:Q3.3 80x86的指令系統學習匯編語言指令應該把握以下幾點:    匯編指令的共性    ·雙操作數指令中,兩個操作數不能同為

29、存儲單元,也不能同為段寄存器,目的操作數不能為立即數。    ·單操作數指令中,操作數可以是除立即數以外的任何尋址方式    指令對標志寄存器的影響    各指令的格式、使用方法和注意事項1、傳送指令1)通用傳送指令包括:MOV、PUSH、POP、XCHG MOV 最基本的傳送指令格式:MOV  DST,SRC執行的操作:(DST)(SRC)說明:Ø 目的操作數不能為CS和IPØ 傳送的數據可以是8位或16位,取決于操作數的形式Ø 源操作數的長度應該小于或

30、等于目的操作數的長度Ø 所有通用傳送指令都不改變標志位例如:MOV AX,BX       MOV AX,BX     MOV AX,0000H×MOV VALUE,24H       MOV CS,1243H    × PUSH、POP 堆棧操作指令·PUSH 進棧指令格式:PUSH SRC執行的操作:    (SP)(SP)-2 &#

31、160;  ((SP)+1,(SP))(SRC)·POP出棧指令格式:POP DST執行的操作:    (DST)((SP)+1,(SP))    (SP)(SP)+2說明:Ø PUSH和POP是字操作Ø 操作數為除立即數以外的任何形式Ø POP指令不能用CSØ 常用于對寄存器值的保存和恢復 交換指令XCHG格式:XCHG OPR1,OPR2操作:(OPR1)(OPR2)說明:Ø OPR表示操作數Ø 兩操作數中至少有一個為寄存器,但不能為段寄存器

32、或IPØ 允許字/字節操作如:    XCHG AX,BX          XCHG AX,0011H     XCHG BX,1       ×    XCHG BX,CS      ×2)累加器專用傳送指令包括:IN OUT XLAT    這組指令只限

33、于使用AX或AL傳送信息。用于與外設直接的數據傳遞。 IN輸入指令長格式:    IN AL,PORT(字節)    IN AX,PORT(字)執行的操作:    (AL)(PORT)(字節)    (AX)(PORT+1,PORT)(字)短格式:    IN AL,DX(字節)    IN AX,DX(字)執行的操作:    (AL)(DX)(字節)   

34、 (AX)(DX)+1,(DX)(字) OUT輸入指令長格式:    OUT PORT,AL(字節)    OUT PORT,AX(字)執行的操作:    (PORT)(AL)(字節)    (PORT+1,PORT)(AX)(字)短格式:    OUT DX,AL(字節)    OUT DX,AX(字)執行的操作:    (DX)(AL)(字節)(DX)+1,(DX)(AX)(字)說明

35、:Ø IN指令:I/OAL或AXØ OUT指令:AL或AX I/OØ I/O設備中前256個端口(0-FFH)端口號可使用長格式直接在指令中指定。Ø 端口號>FFH時,只能用短格式。例如:寫出下列指令:把端口34H的字數據送到存儲單元str中。IN AX,34HMOV STR,AX或者:MOV DX,34HIN AX,DXMOV STR,AX把端口2AFH的字節數據送到存儲單元str1中。MOV DX,2AFHIN AL,DXMOV STR1,AL把存儲單元STR中的字數據送到端口28H中。MOV AX,STROUT 28H, AX 或:MOV A

36、X,STRMOV DX,28HOUT DX,AX把存儲單元STR1中的字節數據送到端口37AH中。MOV AL,STR1MOV DX,37AHOUT DX,AL換碼指令XLAT(略)3)地址傳送指令包括:LEA、LDS、LES、LSS LEA取有效地址指令   格式:LEA REG,SRC操作:(REG)SRC的有效地址注:REG為寄存器例如:設(BX)=1200H,(SI)=1000H,(DS)=3000H,(32224H)=12H,(32225H)=34H,試比較以下兩條指令的執行結果:    LEA BX,BX+SI+0024H 

37、;   MOV BX,BX+SI+0024H LDS地址送DS和寄存器指令   格式:LDS REG,SRC操作:    (REG)(SRC)    (DS)(SRC+2)如: LES地址送DS和寄存器指令   格式:LES REG,SRC操作:    (REG)(SRC)    (ES)(SRC+2) LSS地址送DS和寄存器指令   格式:LSS REG,SRC操作:  &

38、#160; (REG)(SRC)    (SS)(SRC+2)說明:·該組指令的操作數可以使用16位寄存器,但是不能使用段寄存器·源操作數可以是除立即數和寄存器以外的任何一種存儲器尋址方式·不影響標志位4)標志傳送指令包括:LAHF、SAHF、PUSHF、POPF LAHF讀取標志指令(load ah with flags)格式:LAHF操作:(AH)(標志寄存器FLAGS的低字節) SAHF設置標志指令(store ah into flags)格式:SAHF操作:(FLAGS的低字節)(AH) 對標志寄存器的入棧和出棧的指令格式:P

39、USHF操作:    (SP)(SP)-2    ((SP)+1,(SP))(FLAG)格式:POPF操作:    (FLAG)((SP)+1,(SP))    (SP)(SP)+25)類型轉換指令CBW(convert byte to word) 字節轉換為字命令格式:CBW操作:AL的內容符號擴展到AH,形成AX中的字。說明:若AL的符號位為0,則(AH)=0;若AL的符號位為1,則(AH)=0FFH。例如:(AL)=01H,則CBW執行后,(AX)=0001H

40、(AL)=0F1H,則CBW執行后,(AX)=0FFF1HCWD(convert word to double word) 字轉換為雙字命令格式:CWD操作:AX的內容符號括號到DX,形成DX:AX中的雙字。2、算術運算指令1)加法指令包括:ADD、ADC、INC ADD不帶進位位的加法指令格式:ADD DST,SRC操作:(DST)(DST)+(SRC) ADC帶進位位的加法指令格式:ADC DST,SRC操作:(DST)(DST)+(SRC)+CF INC增量指令格式:INC OPR操作:(OPR)(OPR)+1說明: 均可為字/字節操作 均影響標志位,但INC不影響CF標志位 對標志位的

41、影響·結果為負,則SF=1,否則SF=0·結果為0,則ZF=1,否則ZF=0·最高有效位有進位時CF=1,否則CF=0·當兩個操作數的符號相同,而結果的符號與之相反,則OF=1,否則OF=0 CF=1表示無符號加法溢出,OF=1表示帶符號加法溢出(P60 例(1)(4)2)減法指令包括:SUB、SBB、DEC、NEG、CMP SUB不考慮借位的減法指令格式:SUB DST,SRC操作:(DST)(DST)-(SRC) SBB考慮借位的減法指令格式:SBB DST,SRC操作:(DST)(DST)-(SRC)-CF DEC減量指令格式:DEC OPR操作:

42、(OPR)(OPR)-1 NEG求補指令格式:NEG OPR操作:(OPR)0FFFFH-(OPR)-1 (字)  (OPR)0FFH-(OPR)-1 (字節) 即各位取反加1如:NEG AX設(AX)=1234H,則結果(AX)=0EDCCH CMP比較指令格式:CMP OPR1,OPR2操作:(OPR1)-(OPR2),結果不保存,只根據結果設置標志位說明:1、均可為字/字節操作2、均影響標志位,但DEC不影響CF3、對標志位的影響Ø :CF:反映無符號數運算的借位情況,若減數>被減數,此時有借位,則CF=1,否則CF=0Ø :OF:若兩個操作數的符號相

43、反,而結果與減數的相同,則OF=1Ø :CF:OPR為0,則CF=0,否則CF=1 OF:字節運算時OPR為-128或字運算時OPR為-32768時,OF=1,否則為0(求補即為求其相反數的補碼,實際還是超出了機器的表示范圍)例如:P63 例3.48,例3.49加減運算綜合舉例,例如:P63 例3.50data segment x dd 01234000h y dd 0000ea30h z dd 00000010h w dd ?data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov ax

44、,x mov dx,x+2 add ax,y adc dx,y+2 add ax,24 adc dx,0 sub ax,z sbb dx,z+2 mov w,ax mov w+2,dx mov ah,4ch int 21hcode ends end start3)乘法指令包括:MUL 無符號相乘、IMUL帶符號數相乘格式:MUL SRC  或  IMUL SRC操作:     字節:(AX)(AL)*(SRC)    字:(DX,AX)(AX)*(SRC)說明: 由SRC決定是字操作還是字節操作 SRC不可用立即尋

45、址 對標志位的影響對除CF和OF以外的條件碼無定義。(無定義即運算后條件碼的狀態不定)對CF和OF的影響:MUL:若乘積的高一半為0,則CF和OF位均為0,否則為1。IMUL:若乘積的高一半為低一半的符號擴展,則CF和OF位均為0,否則為1。注意:可通過CF,OF判斷乘積是否擴展到了高一半。例如:P65 例3.524)除法指令包括:DIV 無符號數除法、IDIV帶符號數的除法格式:DIV SRC  或  IDIV SRC操作:    字節:        (AL)(AX)/(

46、SRC)的商        (AH)(AX)/(SRC)的余數    字:        (AX)(DX,AX)/(SRC)的商        (DX)(DX,AX)/(SRC)的余數說明: SRC不允許為立即尋址方式 除法指令對各標志位無定義 8086中規定余數符號和被除數的符號相同    例如:-30/8 

47、0;      商    余數        -4    2    ×        -3    -6    若被除數與除數的位數相同,需要對被除數進行擴展例如:-8/2程序為:MOV AL,-8MOV BL,2CBWIDIV BLMOV AX, -

48、8MOV BL,2IDIV BL結果:商al=0fcH,余數ah=0再例:P67 例3.55 3.565)十進制調整指令(略)3、邏輯運算和移位指令1) 邏輯運算指令包括AND、OR、NOT、XOR、TEST AND 邏輯與指今格式:AND DST,SRC操作:(DST)(DST) (SRC)注:常用于屏蔽某些位例如:屏蔽AL的第0,1,4位。MOV AL,0BFHAND AL,0ECH OR 邏輯或指令格式:OR DST,SRC操作:(DST)(DST) (SRC)注:常用于對某些位置1。例如:置BL的第1,5位為1MOV BL,87HOR BL,22H NOT 邏輯非指令格式:NOT OP

49、R操作:(OPR)() XOR 異或指令格式:XOR DST,SRC操作:(DST)(DST)(SRC)注:常用于對某些位取反。例如:將ax的第0,4,7,12,14位取反。MOV AX,4A3BHXOR AX,5091H TEST 測試指令格式:TEST OPRl,OPR2操作:(OPRl) (OPR2) (不保存結果,根據結果設置標志位)注:常用于測試某些位是否為0。例如:測試al的第0,1,2,3,5,7位是否為0.MOV AL,40HTEST AL,0AFHZF=1:結果為0.說明:1. 可以為字/字節操作2. 對標志位的影響: NOT不影響標志位 其余的指令使CF,OF為0,AF無定

50、義,SF,ZF,PF根據結果設置。2) 移位指令包括:SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR 邏輯左移指令格式:SHL OPR,CNT注:CNT=1時,可以直接寫1,如:SHL OPR,1    CNT>1時 必須把CNT放在CL中,然后在指令中指定CL。如:要將AX邏輯左移5位MOV CL,5SHL AX,CL操作: 算術左移指令格式:SAL OPR,CNT操作:與SHL相同 邏輯右移指令格式:SHR OPR,CNT操作: 算術右移指令格式:SAR OPR,CNT操作: 循環左移指令格式:ROL OPR,CNT操作: 循環右移指令格

51、式:ROR OPR,CNT操作: 帶進位循環左移指令格式:RCL OPR,CNT操作: 帶進位循環右移指令格式:RCR OPR,CNT操作:說明:1. 可以為字/字節操作2. 對條件碼的影響(CF)3. OPR可以是除立即數以外的任何尋址方式4、串操作指令包括: MOVS,CMPS,SCAS ,LODS,STOS與上述指令配合使用的前綴有:REP 重復REPE/REPZ 當相等/為零時重復REPNE/REPNZ 當不相等/不為零時重復1)重復指令 REP重復串操作格式:REP 串指令操作:1. CX=0時,退出REP,否則繼續執行2. CX=CX-13. 執行REP后面的串指令4. 重復1.3

52、. REPE/REPZ 當相等/為零時重復串操作格式:REPE(或REPZ) 串指令操作: 1. CX=0或ZF=0時退出,否則繼續執行2. CX=CX-13. 執行REPE/REPZ后面的串指令4. 重復1.3. REPNE/REPNZ 當不相等/不為零時重復串操作當CX=0或ZF=1時退出,其余的操作與REPE/REPZ相同2)串處理指令 MOVS 串傳送指令格式:MOVSB 字節操作,MOVSW字操作操作:·(DI)(SI)·修改SI,DI 字節:(SI)(SI)±1 ,(DI)(DI)±1 字:(SI)(SI)±2 ,(DI)(DI)&

53、#177;2注:DF=0時,用+,DF=1時,用-功能:把SI指向的數據段中的一個字/字節傳送到由DI指向的附加段的一個字/字節單元中。設置DF的指令:    設置DF=0,CLD    設置DF=1,STD例如:將數組STR1的內容傳送到數組STR2中。設  STR1 DB HELLO ;(在數據段中)    STR2 DB 5 DUP(?) ;(在附加段中)程序LEA SI,STR1 LEA DI,STR2 MOV CX,5CLDREP MOVSB由此可知,要想傳送整個字符串,需做以下工作:

54、1. 設置SI,DI2. 將字符串長度送CX寄存器3. 設置DF4. 執行REP MOVSB CMPS 字符串比較指令格式:CMPSB 字節操作,CMPSW字操作操作:·(SI)(DI)·修改SI,DI 字節:(SI)(SI)±1 ,(DI)(DI)±1 字:(SI)(SI)±2 ,(DI)(DI)±2功能:將SI指向的數據段中的一個字/字節單元的內容與DI指向的附加段中的一個字/字節單元的相減,但不保存結果,根據結果設置標志位。例如:比較字符串STR1與字符串STR2是否相等。設 STR1 DB HELLO ;(在數據段中)

55、0;  STR2 DB HELOO ;(在附加段中)程序如下:LEA SI,STR1LEA DI,STR2MOV CX,5CLDREPE CMPSBJE MATCHJNE NOMATCHMATCH:NOMATCH: SCAS 字符串檢索指令格式:SCASB 字節操作,SCASW字操作操作:· 字節:(AL)(DI),(DI)(DI)±1· 字: (AX)(DI),(DI)(DI)±2功能:常用于查找某字符是否在某字符串中。例如:在附加段中定義如下字符串STR,查找空格是否在該字符串中。STR DB WHAT IS THIS程序如下:MOV AL

56、,20HLEA DI,STRMOV CX,12CLDREPNE SCASBJNZ NOFOUNDJZ FOUNDFOUND:NOFOUND: LODS 取字符串指令格式:LODSB 字節操作,LODSW字操作操作:· 字節:(AL)(SI),(SI)(SI)±1· 字: (AX)(SI),(SI)(SI)±2功能:把由SI指向的數據段中的一個字/字節單元的內容傳送到AL/AX中。 STOS 存字符串指令格式:STOSB 字節操作,STOSW字操作操作:· 字節:(DI)(AL),(DI)(DI)±1· 字: (DI)(AX)

57、,( DI)(DI)±2功能:把AL/AX中的內容傳送到由DI指向的附加段中的一個字/字節單元中。5、控制轉移指令1)無條件轉移指令格式:JMP OPR功能:轉移到指定的地方繼續執行2)條件轉移指令JE/JZ OPR相等,則轉移JNE/JNZ OPR 不相等,則轉移·帶符號數的比較(大于:Greater 小于:Less 等于:Equal)JG/JNLE OPR 大于,則轉移JNG/JLE OPR 不大于,則轉移JL/JNGE OPR 小于,則轉移JNL/JGE OPR 不小于,則轉移·無符號數的比較(高于:Above 低于:Belove 等于:Equal)JB/J

58、NAE OPR 低于,則轉移JNB/JAE OPR 不低于,則轉移JA/JNBE OPR 高于,則轉移JNA/JBE OPR 不高于,則轉移·根據某個標志位的值JZ OPR ZF為1,則轉移JNZ OPR ZF為0,則轉移JS OPR SF為1,則轉移JNS OPRSF為0,則轉移JO OPR OF為1,則轉移JNO OPR OF為0,則轉移JP OPR PF為1,則轉移JNP OPRPF為0,則轉移JC OPR CF為1,則轉移JNC OPR CF為0,則轉移·測試CX之為零則轉移指令JCXZ OPR ;CX的值為0,則轉移例如:比較AX和BX中兩個帶符號數的大小,如果(AX)(BX),則令CX=0;否則令CX=0FFFFH(條件設置指令 略)3)循環指令 LOOP 循環指令格式:LOOP OPR 循環條件:(CX)0 LOOPZ/LOOPE 當相等或為零時循環指令格式:LOOPZ/LOOPE OPR 循環條件:ZF=1且(CX)0 LOOPNZ/LOOPNE 當不相等或不為零時循環指令格式:LOOPNZ/LOOPNE OPR 循環條件:ZF=0且(CX)0以上三條指令執行的步驟:1. (CX)=(CX)-12. 判斷測試條件,滿足條件則進行循環,否則退出循環。例如:設在數據段中有如下數組:ARRAY DW 1,2,3,4,5求該數組各元素

溫馨提示

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

評論

0/150

提交評論