微機原理與接口技術復習筆記_第1頁
微機原理與接口技術復習筆記_第2頁
微機原理與接口技術復習筆記_第3頁
微機原理與接口技術復習筆記_第4頁
微機原理與接口技術復習筆記_第5頁
免費預覽已結束,剩余23頁可下載查看

下載本文檔

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

文檔簡介

微機原理與接口技術復習筆記微機原理與接口技術復習筆記微機原理與接口技術復習筆記xxx公司微機原理與接口技術復習筆記文件編號:文件日期:修訂次數:第1.0次更改批準審核制定方案設計,管理制度程序(program):實現特定應用的數據定義和指令序列。其中,數據是計算機自動計算的對象,而指令(instruction)是指揮計算機執行各種基本操作的指令,一條指令對應一種基本操作。馮·諾依曼結構:計算機必須具備的5個基本部分:算術邏輯單元、存儲器、控制單元、輸入設備、輸出設備。算術邏輯單元實現數據處理,而數據處理是計算機最根本的功能。存儲器用以暫存原始數據、中間結果、最終處理結果及程序。控制單元:實現指令的執行,根據指令控制算術邏輯單元的操作及各部分之間的數據傳送。現代計算機:普遍采用的是以存儲器為中心的馮·諾依曼結構。算術邏輯單元算術邏輯單元存儲器控制單元輸入設備輸出設備計算機5個部分之間的關系,兩種信息流:數據流:以存儲器為中心,其他部分之間的數據傳送都要經過存儲器的暫存中轉。輸入設備輸入的原始數據和程序(計算機中各部分之間傳送的信息廣義上都是數據)要暫存在存儲器;控制單元從存儲器讀取指令;算術邏輯單元從存儲器得到原始數據,處理后的結果再存回存儲器;輸出設備輸出從存儲器傳送來的最終處理結果。數據流表征了配合數據處理和程序執行所必須的操作—數據傳送。控制流:以控制單元為中心。控制單元從存儲器讀取指令(數據流),根據指令譯碼產生發向其他部分的控制信號(控制流),指揮算術邏輯單元的數據處理,協調各部分之間的數據傳送(數據流)。控制流表征了計算機自動計算的實現—程序執行。微機在結構上兩個顯著特點:一是采用CPU,二是各組成部件之間采用總線連接。存儲器存儲器CPUI/O接口I/O接口時鐘輸入設備輸出設備微機結構時序脈沖的頻率就是CPU的工作頻率。時鐘周期:時序脈沖的周期。時鐘周期是微機的最小定時單位。總線周期:CPU訪問一次總線的時間即為總線周期。由四個時鐘周期構成。指令周期:執行一條指令的時間即為指令周期。指令周期由若干時鐘周期夠成。指令周期包括取指周期和執行周期,執行周期包括譯碼、取操作數、數據處理和存操作數等若干基本操作。微機的組成結構:總線:是連接各部件的一組公共信號線;CPU:算術邏輯單元與控制邏輯單元合稱為CPU,即中央處理器;存儲器:存儲數據和程序;I/O接口:輸入/輸出設備與總線之間的緩沖電路。在外設側以輸入/輸出設備通信標準信號實現數據交換,在總線側則與存儲器類似,被CPU通過總線標準信號訪問。在微機結構中,CPU與輸入/輸出設備不相關,雙方可以獨立發展。尋址:CPU從存儲器取指令時,必須發出指令所在存儲器單元的地址,程序計數器就是暫存在這個地址的寄存器。CPU根據指令訪問存儲器單元或I/O接口中的數據時,也必須發出相應的地址,地址寄存器就是暫存在這個地方。地址總線從CPU向存儲器和I/O接口的譯碼電路傳送地址。譯碼電路對地址譯碼之后,即可定位到相應的存儲器單元或I/O端口。總線的功能:地址總線:用于CPU尋址存儲器和I/O端口,針對采用獨立尋址方式和存儲器單元數目,定義為8位寬度。(功能是從CPU向存儲器和I/O接口的譯碼電路傳送地址。)數據總線:是各部件之間數據傳送的公共通道。控制總線:用于CPU控制單元控制數據總線上的傳送過程。三類信號線不是獨立作用的,協調完成數據的傳送:CPU首先通過地址總線和M/IO信號線尋址存儲器單元或I/O端口,然后通過RD或WR控制線確定數據傳送的方向,最后被選通的寄存器與CPU通過數據總線實現數據傳送。數據傳送是要實現的目的,數據總線是傳送通道,地址總線定位數據的所在,控制總線控制數據的傳送方向,三總線協調作用,共同實現數據傳輸的目的。數據傳輸的一端一定是CPU內部的寄存器,由控制單元在CPU內部直接控制,且同一時刻只能有一個CPU工作。模型機的指令集:共8條。2條數據處理指令(加法和減法操作),2條存儲器訪問指令,2條輸入/輸出訪問指令,1條流程控制指令(無條件轉移)和1條空操作指令。偽指令:用于向匯編程序指示存儲器分配的匯編命令(directive)。操作系統:一種控制硬件和調度軟件全面管理計算機資源的程序。執行指令:包括取指令和譯碼發出控制信號兩個階段。后一階段是通過指令譯碼器和控制邏輯電路對設計的指令集實現譯碼,并轉換成相應的控制信號。程序計數器(PC):是控制單元中的一個重要寄存器。其內容是控制單元要執行的下一字節指令的地址,控制單元根據這個地址從存儲器去的一字節指令后,就對程序計數器加1,始終指示下一字節指令的地址,這樣控制單元就可以不斷取得指令(取指令后自加1)。I/O接口的數據傳送方式:1、查詢方式(Query):不需增加額外的硬件,CPU輸入或輸出數據時,必須先查詢相應I/O接口是否就緒,若就緒則進行數據傳送,否則繼續查詢直到滿足條件。(耗時)2、中斷方式(Interrupt):當相應I/O接口滿足數據傳送條件時主動向CPU發出申請,由CPU中斷當前執行的程序,調用一個相應的子程序完成數據傳送,子程序返回后繼續執行被中斷的程序。(CPU運行效率高,但I/O接口想CPU申請的信號需要占用CPU引腳,而響應此過程也需要一定的CPU開銷,還有可能增加硬件)3、DMA方式(DirectMemoryAccess):DMA方式是通過增加一個硬件(DMA控制器)來專門完成I/O接口與存儲器的直接數據交換。DMA控制器發出地址信號、控制信號,而采用DMA方式時,CPU要出讓總線控制權,這時,CPU可以繼續執行當前程序,但不能訪問總線,還可能影響到對中斷的響應。微處理器:算術邏輯單元和控制邏輯單元,以及暫存數據和指令的寄存器組(RegisterSet)、高速緩沖存儲器(Cache)等特殊寄存器,這些部件集中在一片大規模或超大規模集成電路芯片上。(通常,微處理器不包含程序存儲單元)微機:以微處理器為核心,配以大規模集成電路的只讀存儲器ROM、讀寫存儲器RAM、輸入/輸出接口及總線。(微機已具有獨立運行的能力)微機系統:硬件和軟件的集合。8086微處理器是字長16位的定點微處理器,內部寄存器、算術邏輯單元和外部數據引腳均為16位,支持8位和16位的符號數/無符號數的算術運算和數據傳送。提供20位地址引腳(存儲周期20位地址有效;I/O周期16位地址有效),可尋址1M存儲器空間和64KI/O地址空間。流水線:分段尋址:把整個存儲器地址分為若干段,存儲器單元的定位被分解為所在的段和在段內的偏移,一次,存儲器單元的地址由兩部分組成:段地址和偏移地址。段地址和偏移地址通常記為segment:offset。段地址定位斷的位置,由8086內專門的段寄存器提供。偏移地址定位存儲器單元在段內的位置,如果是取指操作,偏移地址由指令指針寄器提供;如果是指令執行中訪問存儲器操作數,偏移地址在指令中指出。物理存儲器:連接在系統總線上實際存在的存儲器。物理地址:為了尋址物理存儲器,微處理器向系統地址總線發出的地址。物理地址是尋址物理存儲器的線性地址,線性是指連續而有序的意思。8086的分段地址稱為邏輯地址。要訪問系統總線上的物理存儲器,邏輯地址必須轉換為物理地址,所以邏輯地址只存在于8086中,即邏輯地址對物理存儲器是透明的。總線接口單元BIU段寄存器:段寄存器組:CS、SS、DS、ES。CS(CodeSegment):保存代碼段的段地址,代碼段用于存儲程序的指令。SS(StackSegment):保存堆棧段的段地址,堆棧段用于形成堆棧區。DS(DataSegment):保存數據段的段地址,數據段用于暫存原始數據和處理后的中間結果及最終結果。ES(ExtraSegment):保存擴展段的段地址,擴展段與數據段類似,一般情況下,數據段用于存儲局部變量,擴展段用于存儲全局變量。地址加法器:將執行單元提供的16位費重定位地址重定位為20位的存儲器物理地址,用于存儲器接口訪問總線上實際存無的物理存儲器。工作分兩步:1.將段寄存器提供的16位段地址左移4位,得到20位的段首地址。位段首地址再加上16位的偏移地址,即可得到20位的物理地址。指令指針寄存器:存儲代碼段內的偏移地址,,與CS儀器構成取指所需的程序計數器。程序計數器由總線接口單元自動改變,始終指向順序存儲的下一字節指令。除控制程序流指令可以改變程序計數器外,其他指令都不能直接修改程序計數器。(8086復位后,CS全部置位而IP全部復位,程序計數器的值為FFFFH:0000H,轉換為物理地址為FFFF0H)存儲器接口:指令流字節隊列:執行單元EU控制器:從指令流字節隊列順序讀取指令,根據指令譯碼控制8086中其他部分進行相應的操作,以實現指令要求的功能。控制器根據要求修改程序計數器的內容之后,必須等待總線接口單元清空指令流字節隊列,并按修改后的程序計數器內容重新取指填充指令流字節隊列后,控制器才能繼續從指令流字節隊列取指令。算術邏輯單元:這個16位算術邏輯單元,根據控制器的控制,可完成8位或16位的二進制算術運算和邏輯運算,實現對數據的處理。標志寄存器:標志寄存器設計為16位,實際使用9位,其中6位用于存放算術邏輯單元運算后的結果特征,稱為狀態標志;CF(CarryFlag):進位/借位標志。(最高位)PF(ParityFlag):奇偶標志。(置位位的個數,為偶則PF=1,表示為PE;為奇則PD=0,表示為PO)AF(AuxiliaryCarryFlag):輔助進位/借位標志,用于BCD加法的調整。(運算的低四位產生了進位或借位,AF=1,表示為AC;否則AF=0,表示為NA)ZF(ZeroFlag):零標志。(運算結果為0,則標志置位;否則復位)SF(SignFlag):符號標志,用于標志符號的正負。(運算結果最高位為1,則標志置位,表示為NG;否則標志復位,表示為PL)OF(OverflowFlag):溢出標志,用于標志符號數的運算結果是否超出表達范圍(無符號數的溢出以CF標志)。(雙高異或判別)另外3位通過人為設置,用以控制8086的3種特定操作,稱為控制標志。TF(TrapFlag):陷阱標志,也稱為單步標志,用于程序的單步執行調試。IF(InterruptFlag):中斷標志。(IF=1,表示為EI,即允許響應可屏蔽中斷的請求;IF=0,表示為DI,即禁止響應可屏蔽中斷的請求)DF(DirectionFlag):方向標志。(DF=1,表示為DN,即down,串操作后地址指針自動減量;DF=0,表示為UP,即up,串操作后地址指針自動增量)通用寄存器組:是8086中暫存數據,指針的寄存器陣列,相比使用存儲器,可以減少訪問總線的次數,有利于提高數據處理速度。8086包含8個16位寄存器,使用上一般沒有限制,但有些特定操作要求必須使用指定的寄存器。寄存器定義為:AX(Accumulator),累加寄存器;主要用于乘除運算和輸入輸出操作時存儲操作數、優化移動操作。BX(Base),基寄存器;主要用于存儲器間接尋址時存儲數據段的基地址。CX(Counter),計數寄存器;主要用于循環、重復、移位操作時存儲計數值。DX(Data),數據寄存器;主要用于乘除運算時存儲操作數、輸入輸出操作間接尋址時存儲I/O地址。SP(StackPointer),堆棧指針寄存器;用于存儲站定的偏移地址。BP(BasePointer)基指針寄存器;主要用于存儲器間接尋址時存儲堆棧段的基地址。SI(SourceIndex),索引源寄存器;主要用于存儲器間接尋址時存儲索引地址、串操作時存儲原串偏移地址。DI(DestinationIndex),目的索引寄存器;主要用于存儲器間接尋址時存儲索引地址、串操作時存儲目的串偏移地址。如果I/O端口中的是字數據時,最好分配偶地址存儲。計算機中的指令由操作碼和操作數兩部分構成。操作碼也稱為指令碼,說明計算機要執行哪種操作,是指令中不可缺少的部分;而操作數是參加本指令運算的數據,也就是各種操作的對象。為限制指令的長度,8086指令系統規定,一條指令的操作數最多只能有2個,且它們不能同時位于存儲器中。根據指令的不同,操作數可以是1個,即單操作數,也可以是兩個,即雙操作數(源操作數和目的操作數)。有的指令還可以沒有操作數或隱含操作數。基本數據類型:字節、字、雙字。指令中的立即數是字符,則用單引號括起來。8086CPU的尋址方式(計算機中操作數地址的形成就是尋址方式)操作數包含在指令中,稱為立即操作數。操作數包含在CPU的某個內部寄存器中,稱為寄存器操作數。約定操作數事先存放在存儲器中存放數據的某個單元,稱為存儲器操作數。立即數尋址:立即數只能作為源操作數,不能作為目的操作數。寄存器尋址:是指操作數就在CPU的內部寄存器中,那么寄存器名課在指令中指出。CS和IP不可直接由指令修改,exp:MOV AX,CS——正確;MOV CS,BX——錯誤;MOV AX,IP——錯誤在一條指令中,可以對源操作數采用寄存器尋址,也可以對目的操作數進行寄存器尋址,還可以兩者都用寄存器尋址方式。采用寄存器尋址方式的指令在執行時,操作就在CPU內部進行,而不需要訪問存儲器,因而速度很快。存儲器尋址:用存儲器尋址的指令,操作數一般位于代碼段之外的數據段、堆棧段或附加段的存儲器中,指令中給出的是存儲器單元的地址或生成存儲器單元地址的信息。 物理地址(PA)=(段寄存器)x16+有效地址(EA)一條指令中,只能有一個存儲器操作數,或者源操作數,或者目的操作數。存儲器尋址分為直接尋址、寄存器間接尋址、基址尋址、變址尋址、基址加變址尋址。直接尋址:操作數在存儲器中,存儲單元的有效地址由指令直接指出。直接尋址,是在指令的操作碼后直接給出操作數的16位偏移地址,因而直接尋址是對存儲器進行訪問時可采用的最簡單的方式。寄存器間接尋址:PA=16x(DS)+EA寄存器相對尋址:基址變址尋址:相對基址變址尋址:I/O端口尋址8086采用獨立編址的I/O端口,用專門的輸入輸出指令(IN/OUT)對I/O端口進行操作。當端口編號小于255時,可以直接尋址;大于255時,只能用DX作為間接尋址。直接端口尋址:Exp:IN AL,60H;將60H端口中的數據輸入到AL中; IN AX,80H;將80H與81H相鄰兩端口的16位數據輸入到AX中;IN/OUT指令不支持立即數尋址,所以指令中出現的數據是直接尋址的端口地址,不是立即數。寄存器的間接端口尋址:Exp:MOV DX,333H; 將端口地址送入DX OUT DX,AL; 將AL中的數據輸出到DX所指的端口中 MOV DX,330H; 將端口地址送入DX IN AL,DX; 將DX所指的端口中的數據輸入到AL中只能用DX作為I/O指令的間接尋址寄存器,不能用其他寄存器作為I/O指令的間接尋址。8086CPU的指令按功能可分為:數據傳送、算術運算、邏輯運算和移位、串操作、控制轉移和處理器控制指令6種。數據傳送指令:通用數據傳送指令:MOV;格式:MOV dst,src數據交換指令:XCHG;格式:XCHG dst,src;1)源操作數與目的操作數不能同時為內存單元;2)不能使用CS、IP作為操作數;3)不影響標志位。堆棧操作指令:PUSH、POP,在調用子程序時要保存返回地址;在中斷處理過程中要保存斷點地址;進入子程序和中斷處理后還要保留通用寄存器的值;子程序執行完畢和中斷處理完畢返回時,又要恢復通用寄存器的值,并分別將返回地址或斷點地址恢復到指令指針寄存器中。1)8086的堆棧操作都是字(16位)操作,不允許字節的堆棧操作,因此PUSHAH是錯誤的。2)堆棧指令中的操作數只能是存儲器或寄存器操作數,而不能是立即數。3)堆棧操作指令中,有一個操作數是隱含的,這就是堆棧指針SP只是的棧頂存儲單元。4)入棧時“先減后壓”(SP先減2,在壓入操作數),出棧時“先彈后加”(彈出操作數后,SP加2)。5)CS寄存器可以入棧,而出棧指令POP CS卻是非法指令。因為8086CPU指令系統不允許CS寄存器目的操作數。執行POP CS將改變代碼段寄存器CS的內容,會導致CPU從一個與程序無關的新段中去取下一條指令,從而使程序錯誤地運行。累加器專用傳送指令:XLAT、IN、OUT。XLAT:換碼指令,不影響標志位,也稱為查表指令。查表結果送入“AL”。8086系統的I/O指令中有:直接尋址和寄存器間接尋址兩種尋址方式,只能用累加器AL/AX與I/O端口進行數據傳送。地址傳送指令:LEA、LDS、LES。LEA:取有效地址指令。將一個任意尋址的存儲器操作數的有效地址送給一個16位目標寄存器中,指令的源操作數必須是存儲器操作數的地址,目的操作數必須是16位寄存器操作數。該指令常用來設置一個16位寄存器作為地址指針。LDS:全地址指針傳送指令。傳送一個32位全地址指針到兩個16位目標寄存器,地址指針包括一個段地址和一個偏移地址。首先從32位的雙字存儲單元取得低位字,作為全地址指針的偏移地址復制到一個指定的寄存器中(目的操作數中),再將高位字作為全地址指針的段地址復制到DS中。LES:全地址指針傳送指令。與LDS指令功能類似,只是把DS換ES。操作時首先從32位的雙字存儲單元取低位字,作為全地址指針的偏移地址復制到一個指定的寄存器中(目的操作數中),再將高位字作為全地址指針的段地址復制到ES寄存器。LEA與LDS、LES允許的操作數類型相同,主要區別在于:LEA指令的目的操作數是16位偏移地址,而LDS、LES指令的目的操作數是32位的全地址指針。標志寄存器傳送指令:LAHF、SAHF、PUSHF、POPF。LAHF(LoadAHFromFlags):讀取標志指令。指令格式:SAHF,該指令的執行不影響標志位。將寄存器中的低8位傳送到AH中,包括5個狀態標志SF、ZF、AF、PF、CF,其對應的位是第7、6、4、2、0,而第5、3、1位沒有定義。SAHF(StoreAHintoFlags):設置標志指令。指令格式:SAHF,該指令執行時,標志位被新的值所替代。LAHF與SAHF剛好相反,執行時將AH寄存器的相應位送到標志寄存器的低8位,完成對5個狀態標志位SF、ZF、AF、PF、CF的設置。PUSHF(PUSHFlags):標志入棧指令。指令格式:PUSHF。POPF(POPFlags):標志出棧指令。PUSHF與POPF指令分別起保護標志和恢復標志的作用。算術運算類指令:無符號數與有符號數采用同一套加減法指令的條件:1、要求參與加減法運算的加數、被減數或減數必須同為無符號數或有符號數;2、要用不同的狀態標志位檢測無符號數或有符號數的運算結果是否溢出(CF/OF)。除INC/DEC指令不影響進位標志CF外,其他算術運算指令對OF、SF、ZF、AF、PF、CF均會產生影響。加法:ADD、ADC、INC。ADD:不帶進位加。格式:ADD dst,src;注意:dst不能為立即數,dst,src不能同為存儲器操作數。ADC:帶進位加。格式:ADC dst,src;注意:dst=dst+src+CF。ADC主要用于多字節運算。Exp:兩個32位操作數1234A9A9H和5678C8C8H依次存在1000H開始的單元,低位在前高位在后,要求編程求和,結果仍然存在1000H開始的連續單元。1000H A9; MOV SI,1000H1001H A9; MOV DI,1004H1002H 34; MOV AX,[SI]1003H 12; ADD AX,[DI]1004H C8; MOV [SI],AX1005H C8; MOV AX,[SI+2]1006H 78; ADC AX,[DI+2]1007H 56; MOV [SI+2],AXMOV WORDPTR [SI+4],0 ADC WORDPTR [SI+4],0減法:SUB、SBB、DEC、NEG、CMP。DEC:減量指令。注意:段寄存器不能使用該指令。NEG:取補指令。格式:NEG dst,該指令執行的結果總是使CF=1,除非操作數為0才使CF=0。注意:當操作數dst=0時,結果不變;當操作數為-128(補碼為80H)或-32768(補碼為8000H)時,結果數值不變,但使OF置1。乘法指令:MUL、IMUL。特點:在指令中總有一個操作數隱含在AL或AX中。指令中的操作數字節,則另一個操作數隱含在AL中,乘積在AX中;指令中的操作數為字,則另一個操作數隱含在AX中,乘積在DX、AX中,其中DX作為存放乘積的高位擴展。MUL:只對CF、OF有定義。乘積的高半部分不為0,則CF=OF=1;否則CF=OF=0。CF=OF=1表示結果的高半部分包含乘積的有效位,代表乘積的長度擴展;CF=OF=0代表乘積的長度沒有擴展。源操作數不能為立即數。IMUL:格式與功能上與MUL類似,不同的是,MUL要求兩乘數都為帶符號數(補碼),且乘積也是補碼表示的數。除法指令:DIV、IDIV、CBW、CWD。特點:無符號數的除法DIV與帶符號數的除法IDIV,被除數隱含在累加器AX(字節除)或DX和AX(字除)中。在除法運算中,如果除數是8位的,則要求被除數是16位的;除數是16位的,則要求被除數是32位的。除法指令對所有狀態標志均無定義。DIV:對于字節除法,所得商存于AL,余數存于AH;對于字除法,商存于AX,余數存于DX。若除數為0,則在內部產生一個類型0的中斷。IDIV:與DIV指令相同,只是操作數是帶符號數的補碼,商和余數也是補碼。其中,商可能為正或負,余數總是與被除數的符號相同,為正或負。除法指令的尋址方式與乘法指令相同,其目的操作數必須存放在AX中,或DX與AX中。注意:源操作數不能為立即數。CBW(ConvertBytetoWord):字節擴展指令。對標志位無影響,功能:把AL中的符號擴展到AH中。AL<80H,則擴展后(AH)=00H;否則擴展后(AH)=0FFH。CWD(ConvertWordtoDoubleWord):字擴展指令。對標志位無影響,功能:將AX中的符號擴展到DX中。AX<8000H,則擴展后(DX)=0000H;否則擴展后(DX)=FFFFH。BCD碼調整指令:AAA、DAA、AAS、DAS、AAM、AAD。AAA:加法的非壓縮BCD碼調整指令(ASCII碼調整)。僅影響CF和AF。DAA:加法的壓縮BCD碼調整指令(十進制加法調整)。僅OF無定義。AAS:減法的非壓縮BCD碼調整指令。僅影響CF和AF。DAS:減法的壓縮BCD碼調整指令。僅OF無定義。AAM:乘法的非壓縮BCD碼調整指令。僅影響PF、SF、ZF。AAD:除法的非壓縮型BCD碼調整指令。僅影響PF、SF、ZF。邏輯運算與移位指令需要對字節或字數據的各個二進制位進行操作時,可采用二進制位操作類指令。邏輯運算類指令:AND、OR、NOT、XOR、TEST。AND:邏輯與。格式:AND dst,src。兩個操作數的對應位進行運算,與運算的結果送回到目的操作數。常用于對指定位進行清零。OR:邏輯或。格式:OR dst,src。兩個操作數按位進行或運算,結果送回目的操作數。常用于對指定位進行置1操作。XOR:邏輯異或。XOR dst,src。兩個操作數按位進行異或運算,結果送回目的操作數。注意:上述幾種運算的目的操作數不能為立即數,兩個操作數不能同時為存儲器數。TEST:測試指令。格式:TEST dst,src。將dst指定的內容按位做邏輯與運算,但不送回操作結果,只根據結果影響標志位。TEST指令的操作數尋址與AND指令相同。常用來檢測操作數的某些位是1還是0。注意:上述指令對標志位的影響:標志位CF、OF復位,SF、PF和ZF由操作結果確定,AF未定義。NOT:邏輯非。格式:NOT dst。指定的寄存器或存儲單元的內容按位取反。常用來對某個數做求反運算。非循環移位指令:SHL、SHR、SAL、SAR。SHL:邏輯左移指令。指令格式:SHL dst,CL;CL是移位的位數。功能:將操作數左移,CL指定移位位數,最高位移入進位標志CF,移動后空出的最低位補0。注意:操作數dst可以位寄存器數或存儲器數。當只移1位時,若符號位SF發生變化,則OF=1;否則OF=0。Exp:MOV BL,01110101 MOV CL,4 SHL BL,CL運算結果:(BL)=01010000,SF=0,CF=1,OF=1,ZF=0。SHR:邏輯右移指令。指令格式與SHL類相同。功能:將操作數右移,CL指定移位位數,最高位補0,最低位移入CF。SHR指令的操作數尋址方式也與SHL相同。當只移1位時,若移位后的符號位SF發生變化,則OF=1;否則OF=0。以上兩種操作:標志位SF、ZF、PF根據移位結果置位。SAL:算數左移指令。與SHL指令功能相同,最高位移入標志位CF,但SAL將操作數視為帶符號數。移動后空出的低位補0。SAR:算術右移指令。與SHR指令功能相同,最低位移入標志位CF,但符號位保持不變。循環移位指令:ROL、ROR、RCL、RCR。ROL(RotateLeft):循環左移指令。最高位進入標志位CF并移入最低位,按一個閉環回路進行移位。目的操作數可以是寄存器數或存儲器數。格式:ROR dst,CL;CL是移位的位數。Exp:ROL AL,1 MOV CL,4 ROL AL,CL循環移位為1位時,若移位后的操作數的最高位不等于標志位CF,則溢出標志OF=1;否則OF=0.用來表示移位前后操作數的符號位是否發生改變(OF=0表示符號位為改變)。ROR(RotateRight)循環右移指令,與ROL指令的功能相似,僅移動方向相反,最低位進入標志位CF并移入最高位。只移1位時,移位后的操作數的最高位與次高位不相等,則溢出標志OF=1;否則OF=0。可由此判斷移位前后操作數的符號位是否發生改變。RCL:帶進位的循環左移指令。最高位移入標志位CF,CF移入最低位形成環路。循環移位為1位時,若移位后的操作數的最高位與標志位CF不相等,則溢出標志OF=1;否則OF=0。可由此判斷移位前后操作數的符號位是否發生改變。RCR:帶進位的循環右移指令。最低位移入標志位CF,CF移入最高位。形成環路。循環移位為1位時,若移位后的操作數的最高位與次高位不相等,則溢出標志CF=1;否則OF=0。可由此判斷移位前后操作數的符號位是否發生改變。串操作指令:是用一條指令實現對一串字符或數據的操作。串是存儲器中一系列連續的字或字節,串操作就是針對這些字或字節進行的某種相同的操作。8086串操作特點:所有串操作指令都用SI對DS段中的源操作數進行間接尋址,用DI對ES段中的目的操作數進行間接尋址,即目的串和源串地址分別有ES:DI和DS:SI提供。使用前應先設定好SI和DI的初值。串操作指令執行時自動修改地址指針,地址指針的修改與方向標志DF有關。若源串和目的串在同一段中,則把數據段基址DS和附加段基址ES設成相同的數字,即DS=ES,仍由SI和DI分別指出源串和目的串的有效地址。任何一條串操作指令,可在前面加一個“重復前綴”,通過它們來控制串操作指令的重復執行。串操作指令是唯一的一組源操作數和目的操作數都在存儲單元的指令。重復前綴:REP、REPZ(REPE)、REPNZ(REPNE)。功能是重復執行緊跟其后的串操作指令,不能單獨使用,只能加在串操作指令前用來控制串操作的重復執行,且不影響標志位。REP:重復前綴(無條件重復)。執行操作時,(CX)=0,退出重復串操作;否則重復串操作。過程如下:若(CX)=0,退出重復操作REP,否則往下執行;修改CX,即CX=CX-1;執行串操作一次,并修改SI、DI,執行第1步。其中,DF=0,則SI、DI內容自動加1或加2;否則自動減1或2.用途:用于字串傳送MOVS或保存字串STOS指令的的前綴。REPZ(REPE):相等重復前綴。若執行的操作為(CX)~=0且ZF=1,重復串操作;否則,退出重復操作。用途:用于比較兩個字符串,找出不同的字。REPZ(REPE)與串操作指令CMPS與SCAS配合。表示只有當兩數相等時才繼續比較;否則可提前結束串操作。REPNZ(REPNE):不相等重復前綴。執行的操作為(CX)~=0且ZF=1,重復串操作;否則不重復。用途:在一個字串中,找到需要的字。也可用于比較兩個字串,找出相同的字。REPNZ(REPNE)和串操作指令CMPS與SCAS配合。表示只有當兩書不相等時才繼續比較;否則可提前結束串操作。串傳送指令格式:MOVSB/MOVSW;用于字節/字的傳送。操作:((ES:DI))<—((DS:SI));不影響標志位。該指令把數據段一SI為有效地址的源串中的字節或字傳送到附加段以DI為有效地址的目的串中,同時自動修改SI和DI中的有效地址,使之指向下一個元素。串比較指令格式:CMPSB/CMPSW;源字節串比較或字串比較。((ES:EI))<—((DS:SI));6個標志位:AF、ZF、OF、PF、CF、SF反映了目的串與源串的關系。CMPS指令把由SI指定的數據段中源串的一個字節或字與DI指定的附加段目的串的一個字節或字相減,但不回送結果,只是影響標志位。比較后按照DF的值修改地址指針SI和DI。SCAS:串掃描指令。格式:SCASB/SCASW;字節串或字串掃描。操作:把AL/AX的內容減去DI指定的目的串中的一個字節或字數據。不送運算結果,只根據結果影響標志位,并按照DF的值修改DI。用于從一個字串中查找一個與AL或AX中不同的字符,或查找一個相同的字符。LODS:讀取串指令。格式:LODSB/LODSW。操作:把源串中的一個字節或字的數據送入AL或AX中,同時按照DF標志修改SI。該指令正常情況是不重復操作的,因為每重復一次操作,累加器的內容就會改寫,但在軟件設計中,該指令是十分有用的。STOS:存串指令。格式:STOSB/STOSW。操作:把AL或AX中的一個字節或字的內容送入目的串所在單元,并按照DF的值修改DI。STOS指令常用于初始化某一緩沖區為同一數據。控制轉移類指令:無條件轉移指令、條件轉移指令、循環控制指令、中斷指令。JMP:無條件轉移指令。可實現短、近、遠轉移,使用方便,包括段內直接轉移、段內間接轉移、段間直接轉移、段間間接轉移。CALL/RET:調用和返回指令。子程序完成功能之后,最后執行的一條指令必須是返回指令RET,返回地址由執行CALL調用指令時入棧保存的斷點值提供。條件轉移指令:滿足條件,則轉移到指定的目標地址;否則,繼續執行該條件轉移指令的下一條指令。條件轉移分為:單個狀態條件轉移、無符號條件轉移、帶符號條件轉移3種。指令格式:JX Target;X代表轉移條件,條件成立,則轉到標號Target處執行;否則順序執行;Target是短目標地址。LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ:短目標標號。第四章:表達式:由若干操作數和運算符構成的有意義的組合序列。表達式可出現于源程序的任何地方,在匯編過程中可產生確定的值。表達式是常數、寄存器、標號、變量與運算符的組合。匯編時按優先規則對表達式進行計算,計算出具體數值,在運行時不能改變,而寄存器間接尋址的地址計算則是按照執行指令時寄存器的值先取指后計算的。運算符:算術運算符、邏輯運算符、關系運算符、分析運算符、合成運算符。算術運算符:+、-、*、/、取模運算(MOD)。Exp: MOV AL, 5MOD2 ;匯編后為MOV AL,1‘/’是取商部分,只有整數部分,沒有余數;而MOD只是取余數。邏輯運算符:AND、OR、XOR、NOT。邏輯運算符在兩個操作數之間按位進行布爾運算,邏輯表達式只能對常數進行運算,所得結果也是常數。關系運算符:在兩個無符號操作數之間進行大小關系比較,滿足關系則返回全1,否則返回全0。包括:相等(EQ)、不相等(NE)、小于(LT)、大于(GT)、小于等于(LE)、大于等于(GE)。運算結果是一個邏輯值,即真或假。1)關系運算符只能對常數(或相當于常數)進行運算,且為無符號數。2)關系為真,結果為全1;否則為全0。分析運算符:SEG、OFFSET、TYPE、LENGTH、SIZE。SEG:取變量或標號的段地址。OFFSET:取變量或標號偏移地址。TYPE:取變量的類型,對于變量類型返回值可以是1(字節)、2(字)、4(雙字)、6(三字)、8(四字)、10(五字);對于標號類型,返回值可以是-1(NEAR)或-2(FAR)。LENGTH:取變量中元素的個數。若使用DUP()定義的數組變量,結果為單元的個數;否則結果為1。SIZE:取所定義存儲區的字節數(等于LENGTH*TYPE)。若使用DUP(),取所定義的變量或字節個數;沒使用DUP(),則取第1個數據的字節數。合成運算符:對已定義的但個操作數重新生成段基地址、偏移量相同而類型不同的新操作數,主要介紹PTR、THIS。PTR:用來指定地址操作數的類型。格式為:<新類型> PTR <存儲器操作數>類型:BYTE、WORD、DWORD、NEAR、FAR。功能:指定原存儲器的操作數為新類型,新操作數的段基地址和偏移量與原操作數相同;PTR也可用來進行強制類型轉換。THIS:指定“新類型”。格式為:THIS <新類型>;代表新的操作數的類型即為式中指定的“新類型”。偽指令:符號定義偽指令、數據定義偽指令。符號定義偽指令:EQU、=。格式:<符號> EQU <表達式>。用EQU定義的符號未清除前不能進行重定義。清除EQU定義可用:PURGE偽指令。格式:PURGE <符號>。用“=”定義的符號可在任何時候進行重定義,其他用法與EQU完全相同。兩者均不占用存儲空間,僅是給符號賦值在編譯過程中完成。數據定義偽指令:<變量名> 數據定義偽指令 <操作數,操作數,···>操作數可以是常數、變量或表達式。常用的數據定義偽指令有:DB定義字節、DW定義字、DD定義雙字、DQ定義4字、DT定義5字。Exp:DATA DB ‘HELLO’復制操作符:DUP定義重復的數據可使用復制操作符,括號中的內容可以為DUP重復定義的嵌套。Exp:DATA DB 8DUP(8 DUP(0));連續分配64個字節單元,初值為0。$表示取當前地址。段定義偽指令:格式:<段名> SEGMENT [定位類型][組合方式][類別] <匯編語言語句> <段名> ENDSSEGMENT和ENDS總是成對出現的,且段名一樣。SEGMENT說明一個段的開始,ENDS則說明一個段的結束。ASSUME:明確段與寄存器的關系。Exp:ASSUME CS:CODE DS:DATA ES:DATAORG:規定了段內的指令或數據存放的開始地址,格式:ORG <表達式>,表達式的值即為開始地址,從此地址連續存放程序或數據。PROC、ENDP:過程定義偽指令。注意:PROC和ENDP必須成對出現,且過程名相同。過程的類型有NEAR、FAR兩種,分別表示段內、段間調用,默認模式為NEAR。END:匯編結束偽指令。格式:END <表達式>,表達式通常就是第一條指令的標號,指示程序的入口地址。中斷:當CPU內部或外部出現某種事件(中斷源)需要處理時,終止正在執行的程序(

溫馨提示

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

評論

0/150

提交評論