版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3編語言指令?概?操作?尋址方?匯編語言語?匯編語言基本指令3.1概述3.1概述指令:在某種計算機結(jié)構(gòu)中定義的單個U操作,每條指令執(zhí)行一個特定的操作。指令也可以理解為:通知CPU執(zhí)行某種操作 令”。CPU全部指令的集合,稱為指令集。機器指令:用二進(jìn)制格式的序列(一串0,1代碼)書寫注意:硬件只能識別, ,運行機器指令符號指令:用字符串形式的序列(包含字符串形式的操作碼以及操作數(shù)助記符)書寫。80486符號指令與機器指操符號指機器指MOVAX, 34ADDAX, CX-SUBCX, MOV:MOVE傳 ADD: SUB: RET:RETURN返指令的組指令的組成
操作操作操作碼——告訴計算機要執(zhí)行的操作是什么加、減、邏輯與等操作執(zhí)行操作過程所要操作的數(shù),如加運算CPU只能識別 ,運行機器指令,而用機器
編輯、編譯
指令長規(guī)定:多字節(jié)指令占用連續(xù)的內(nèi)存單元,存放指令一字節(jié)的內(nèi)存單元地址,稱為“指令地址指令存指令由操作碼和操作數(shù)構(gòu)成,存放在內(nèi)存中 Endian),即:低位字節(jié)存放在低地址單元, 操作如:12345H單元中有一條指操作MOV操操作數(shù)符號指令的書寫格標(biāo)號操作碼助記空操作數(shù)助記;注如AX,;AX+BX→;SI+1→標(biāo)號:以字母或下劃線開頭,后跟字母,數(shù)字,下劃線,長度≤字符。標(biāo)號又稱符號地址,代表該指令的邏輯地址??梢院雎圆粚懀谠O(shè)置為程序的轉(zhuǎn)向目標(biāo)時必須寫出?!跋到y(tǒng)保留字”不能做標(biāo)號注解:以“;”開頭,不執(zhí)行,打印程序 3.2操作 操作數(shù):操作數(shù)表示指令的操作對象操作數(shù)包括:輸入數(shù)據(jù)(狀態(tài))和輸出數(shù)據(jù)(三個區(qū)域CPU的寄存器、計算機的器以及計算通用寄存器中的操作操作數(shù)存放在通用寄存器中時稱為寄存器操作數(shù)。寄存器操作數(shù)的字長由寄存器的名稱決定。D31~舉例:EAX寄存器中,不同名稱的寄存器可以存放字長不同的操作數(shù)。代碼段寄存器CS以及指令指針I(yè)P決定了U將要取出的指令。修改和IP的值則可以改變U取出的指令,在程序設(shè)計可以實現(xiàn)程序控制轉(zhuǎn)移,例如分支和循 段基址,偏移地址則依據(jù)相應(yīng)尋址方式的地址表達(dá)式給出標(biāo)志寄存 D19 RODITSZAPC80X86標(biāo)志寄存80X86標(biāo)志寄存器為32位,實際使用15位,共14個標(biāo)志。標(biāo)志分為兩類:狀態(tài)標(biāo)志和控制標(biāo)志狀態(tài)標(biāo)志記錄了當(dāng)前指令執(zhí)行后的狀態(tài)信息控制標(biāo)志用來控制微處理器操作本節(jié)首先介紹6種狀態(tài)標(biāo)狀態(tài)標(biāo)志寄ODITSZAPC進(jìn)位標(biāo)志C(CarryFlag)——當(dāng)結(jié)果的 產(chǎn)生一個進(jìn)位或借位,則C=1,否則C=0狀溢出標(biāo)志O(OverflowFlag)——在算術(shù)運算中,帶符號數(shù)的運算結(jié)果超出了8位或16 帶符號數(shù)能表達(dá)的范圍,則O=1,否則O=0 8位(字節(jié))運 --128—— 16位(字)運 --32768—符號標(biāo)志S(SignFlag)——結(jié)果的最 (D15或D7)為1,則S=1,否則S=0。零標(biāo)志Z(ZeroFlag)——若運算的結(jié)果為0,則Z=1,否則Z=0。奇偶標(biāo)志P(ParityFlag)——若結(jié)果中‘1’的個數(shù)為偶數(shù),則P=1,否則,P=0。輔助進(jìn)位標(biāo)志A(AuxitiaryFlag)在操作時,由低半字節(jié)(第3位)向高半字節(jié),有進(jìn)位或借位,則A=1,否則A=0控制志(DirectionFlag)D=1,串操作時地址自動減量,D=0,串操作時地址 動增量志中斷允許標(biāo)志(Interrupt—enableFlag)——I=1,則允許CPU接收外部的中I=0, 外部中斷請求復(fù)習(xí):有關(guān)溢出的幾個概什麼是溢運算結(jié)果超出寄存器能表示的范圍,稱為溢出。溢出和操作數(shù)的性質(zhì)有關(guān)。8位無符號數(shù)運算,結(jié)果 有溢16位無符號數(shù)運算,結(jié)果 有溢32位無符號數(shù)運算,結(jié)果> 有溢8位有符號數(shù)運算,-128>結(jié)果 有溢16位有符號數(shù)運算32768>結(jié)果>32767有溢32位有符號數(shù)運算,-231>結(jié)果> 有溢CPU由于溢出和操作數(shù)的性質(zhì)有關(guān),而操作數(shù)的性質(zhì)是由程序員定義的。U只能默認(rèn)一種選擇,即U一律默認(rèn)操作數(shù)是有符號補碼數(shù),并以此來設(shè)置溢出標(biāo)志,實際操作過程依據(jù)判溢電路進(jìn)行。OC標(biāo)志寄存OC判判溢電Zn- 進(jìn)
Zn-
進(jìn)( ( ( Xn-
Yn-
Xn- Yn- CPU運算器中的判 結(jié)果,O標(biāo)志置1表示溢出,否則不溢出。其邏輯表達(dá)式為OX
Zn1
X
O標(biāo)志和C標(biāo)志一起作為程序員判溢的例:下列指令執(zhí)行A.C.O.P.S.Z為何值 MOVAL AL
1
AL=90H,如果C8H為無符號數(shù)(值=200),則有溢出。如果C8H為有符號數(shù)(值=-56),則無溢出。這6個標(biāo)志中,C.O.P.S.Z可為程序的轉(zhuǎn)移提供測試條3.33.3尋址方式操作數(shù)是指令的操作對象,尋址方式就是在指令中,使用特定的助記符或助記符表達(dá)式(地址表達(dá)式),告知U如何計算出操作數(shù)的地址,從而正確地取出操作數(shù)進(jìn)行后繼的指令操作.計算出操作數(shù)地址的過程就是尋址。尋址方式”:通俗的講,就是通知CPU本條指令的操作數(shù)在哪兒?或者說用什么方式才能得到操作數(shù)。操作數(shù)存在方在微型計算機中,操作數(shù)可能以如下四種方式存操作數(shù)包含在指令中,這種操作數(shù)稱為立即數(shù)MOVAX,操作數(shù)存放在CPU的某個寄存器中,MOVDS, 器中,這種操作數(shù)稱為 MOVAX,DS:[2000H]操作數(shù)存放在I/O端口中,這種操作數(shù)稱為I/OINAL,操作數(shù)對應(yīng)的尋址方式(四種寄存寄存I/O端●●
操作數(shù)CPU讀入的指
●操作碼助記符操作數(shù)助記立即寄存I/O本章只講述前三種尋址方式,包含如下3類共計7種尋址方式立即尋址方式:獲得立即數(shù)寄存器尋址方式:獲得寄存器操作器尋址方式:獲得內(nèi)存操作數(shù) 器操作數(shù)學(xué)習(xí)重點:怎樣在符號指令中,正確的描述各種尋址式這種尋址方式所提供的操作數(shù)直接放在指令中,緊跟在操作碼的后面,與操作碼一起放在代碼段區(qū)域中。立即數(shù)可以是8、16、32位.操作數(shù)是指令的一部分,完整地取出該條指令,也就獲得了操作數(shù)。例
操作操作高立即尋址方式示意如EAX,BL,;AAH→CL,–;FCHDL,;41HAL,SI,;15上例源操作數(shù)即為立即尋址,立即數(shù)書寫立即數(shù)以數(shù)字開頭,以A~F開頭的16進(jìn)制數(shù),必須前綴0立即數(shù)的數(shù)制用后綴表示,B表示二進(jìn)制數(shù),H表示十六進(jìn)制數(shù),D缺省為十進(jìn)制數(shù),單引號括起來的字符編譯成相應(yīng)的ASCII碼。可以用 */組成立即數(shù)表達(dá) 寄存器尋操作數(shù)在U的某個寄存器中,符號指令中直接寫出寄存器名稱。例 操作操作 寄存器尋址方式示意如:下述6條指令,目標(biāo)操作數(shù)即為寄存器尋;AAH→CL,–;FCH;35H;15如: AX, ;DS內(nèi)容→ ;SI+1 (Increase增量 ;DI1→ (Decrease減量 在讀寫內(nèi)存操作數(shù)之前,CPU必須知道相 單元的物理地址由于CPU 器采用分段管理,因此指令格式中只能寫出存放操數(shù)的內(nèi)存單元的“邏輯地址程序員的責(zé)任僅在于正確的書寫邏輯地址表達(dá)式,然后由CPU算以求出物理地程序員給出的邏輯地址形偏移偏移地操作系統(tǒng)將程序調(diào)入內(nèi)存時才給段寄存器賦實際值。此時20位地址才是偏移地址可以由以下各種情況直接地址——包含在指令中的16位地址偏移量間接地址——由 某個16位寄存器的內(nèi)容決定,如BX、BP、SI、DI基址——基址寄存器BX或BP加上指令中包含的8位或16位位移量變址——變址寄存器SI或DI加上指令中包含的8位或16位位移量基址加變址——由一個基址寄存器BX或BP加上一個變址寄存器SI或DI,再加直接①地址表達(dá)式的格式1如:MOVAL,從ES附加段偏移地址為2CH的單如 AX,從數(shù)據(jù)段偏移地址為2000H的單這種格式很少使用,∵通常情況下,程序員不知道某單元的偏移②地址表達(dá)式的格式2:段寄存器:變量名 操作 操作 低代00段+
高
直接尋址方式示意 ALDS:XX;取數(shù)據(jù)段XX字節(jié)單元的內(nèi)或 AL, ; AXES:YY;取ES附加段YY字單元或 AX, ;說明匯編語言允許為某單元起一個“名字”,這個名字就稱為該單元的“名”,經(jīng)匯編之后,變量名有段基址和偏移量兩種屬性。變量名是唯一的,程序中不能有重復(fù)的變量名 “段寄存器操作數(shù)在內(nèi)存單元,該單元的段基址在段寄存器中有效地址在間址寄存器中,CPU首先進(jìn)行地址計算接尋址的段寄存器某單元的物理地址=段寄存器內(nèi)容×16 約定的間接尋址的地址表達(dá)式簡化為:[間址寄存器]某單元的物理地址=約定的段寄存器內(nèi)容×16③間址寄存器和約 的邏輯486間址寄存約堆棧16位尋址方數(shù)據(jù)堆棧32位尋址方數(shù)據(jù)操作例: AX,操作代05000500 10 10 510
高
間接尋址方式示意④舉例設(shè)數(shù)據(jù)段BUF字節(jié)單元的內(nèi)容為55H,取出該數(shù)→解1:用BX間,數(shù)據(jù)段段基,BUF單元的有效地, 等價于: AL,由于BX間址,約 的是數(shù)據(jù)段,∴“DS:”可解2:用BP,數(shù)據(jù)段段,BUF單元的有, 不能寫, 的是堆棧段,∴“DS:”不可省 DS,數(shù)據(jù)段段基 AL, 基址寄存器中,另一部分為常量。址尋址的地址表達(dá)式段寄物理地址=段寄存器內(nèi)容×16+ 約定的邏輯段,簡化的地址表[基址寄存器+位移量物理地址=約定的段寄存器內(nèi)容×16+③基址寄存器和約 的邏輯基址寄存約堆棧16位尋址方數(shù)據(jù)堆棧32位尋址方數(shù)據(jù)操作例操作低05000500H10 10 + +
數(shù)510
高
基址尋址方式示意設(shè)數(shù)據(jù)段BUF單元依次有則 DS,數(shù)據(jù)段段基
,,BUF單元有效地 , 變址尋①有比例因子的變址尋址其地址表達(dá)式段寄存器:[比例因子*變址寄存器+位移物理地址=段寄存器×16+比例因子②沒有比例因子的變址尋址其地址表達(dá)式為:約定的邏輯[變址寄存物理地址=約定的段寄存器×16+變址③變址寄存器與約 的邏輯變址寄存約定的邏輯適用于數(shù)據(jù)堆棧數(shù)據(jù)操作例操作低05000500H10 10 + +
數(shù)510
高
基址尋址方式示意說明:比例因子只能是1、2、4、因此:MOVAL, ,16位尋址不能使用比例因MOVAL,[10*ESI+5 MOVAL, 附加MOVAL, 數(shù)據(jù)基址單元的有效地址由3有比例因子的基址加變址的地址段寄存器:[基址寄存器+比例因子*變址寄存器+位移量約定邏輯段其地址表達(dá)式簡化為[基址寄存器+比例因子*變址寄存器+位移量②無比例因子基址地址表達(dá)式段寄存器:[基址寄存器+變址寄存器+位移量約定邏輯段:[基址寄存器+變址基址加變址尋址是基址尋址和變址尋址的組合,要★基址寄存器和變址寄存器都是16位或都是32位,否 ★默認(rèn)的段寄存器不一致,這樣的組合雖然是合但容易操作例:操作低05000500 ++
10020100200020
數(shù) 段高基址+變址尋址方式示意尋址方式的學(xué)習(xí)要點指令中的操作數(shù)有4種:立即數(shù),寄存器數(shù),內(nèi)存操作數(shù)和 直接尋址、間址、基址、變址、基址加變址I/O端口操作數(shù)的叫I/O端口尋址方式不同的尋址方式是為了程序員在寫指令,配合對應(yīng)的應(yīng)用場景,通過不同的 為指令提供操作數(shù)。關(guān)于16位尋址和32位尋16位尋址:采用16位間址、基址、變址、基址加變32位尋址:采用32位間址、基址、變址、基址加變在實模式下,一個邏輯段的體積最大為64K, 單元的有效地址為16位,不可能超過FFFFH,∴在實模式下運行的程序通常采用16位尋址關(guān)于在用間址、基址、變址、基址加變址尋址內(nèi)存操作數(shù)時,其地址表達(dá)式都有2種書寫格式有段前綴和①如用BP、EBP、ESP參與尋址,CPU自動認(rèn)為是堆棧段,∴段前綴“SS:”可省,;SS段,用BP間,②如用BP、EBP、ESP參與尋址非堆棧段,必須明確寫出段前綴,如:,;堆棧段,用BP間,明確寫出③如用BX、SI、DI、EAX~EDX、ESI、EDI參與尋址,自動認(rèn)為 數(shù)據(jù)段,∴“DS:”可 AL,DS:[BX] ④如用BX、SI、DI、EAX、EDX、ESI、EDI參與尋址非數(shù) MOVAL,ES:[BX]明確寫出使用段約 內(nèi)存操作數(shù)是最常用的編程風(fēng)BP=1000H,BX=1000H,SI=2000H移地址說明下面幾條指令的源操作數(shù)的尋址方式、偏移地址及結(jié)(2)(3)(4)
數(shù)據(jù)
堆棧堆棧 一.概 Windows系統(tǒng))調(diào)編輯程調(diào)編輯程 匯編源程
ASM文編.ASM文
如 .OBJ
如調(diào)可執(zhí)行文調(diào)匯編語言源程序包括的語句類型為:指令性語句和指示性語句。指令性語句即為通常所說的符號指令。指示性語句包括偽指令和宏指符號指令:經(jīng)匯編后,其目標(biāo)指令通知CPU偽指令:是非機器指令,是在匯編期間進(jìn)行操作的。為匯編程序 程序提供匯 信當(dāng)匯編語言語句類型為指令性語句(符號指令)標(biāo)號操作碼助記空操作數(shù)助記符(多個操作數(shù)之間用,隔開;注格式說明:指令性語句的格式就是符號指令的當(dāng)匯編語言語句類型為指示性語句(偽指令)變偽指令助記空操作數(shù)項(多個操作數(shù)之間用,隔開;注格式說明符號指符號 符號指符號 偽指此處無冒標(biāo)號名、變量名、 、過程名…命名規(guī)則:以除數(shù)字以外的字二.常用的變量DB一個或多個用逗號間隔的單字節(jié)如 0A6H,‘ ; 3說明DB—DefineByte縮寫,“定義字節(jié)—隨機數(shù)Dup~Duplicate(重復(fù)3Dup表35DupA表5個用逗號間隔的A的ASC∏ 12H,64,- 01010101B,‘A’,‘B’ 0A6H,‘ ;與下條 3單引號中的字符翻譯成ASC∏碼
匯編
121240FF09554142A648454C4C4FXXX 12H,64,-0A6H,;與下條等3功能
匯編
1240FF09554142A648454C4C1240FF09554142A648454C4C4FXXX
字定變量DW一個或多個用逗號間隔的雙字節(jié)343412424143如匯編 1234H,56,‘AB’,‘C’匯編 2說明
DW—DefineWord“字定義—雙字節(jié)隨機單引號中只能是一個或兩個2.字定變量DW一個或多個用逗號間隔的雙字節(jié)343412424143如 1234H,56,‘AB’,‘C’ 2
匯編功能通知匯編程序把DW后跟的雙字節(jié)數(shù) 即:低位字節(jié)字節(jié)相鄰的高址單
字定變量DW一個或多個用逗號間隔的雙字節(jié)343412424143如匯編 1234H,56,‘AB’,‘C’匯編 2功能用DW定義的這些單元的屬性都是“字如上例
這個單元 屬性都是“字型變量DD一串用逗號間隔的4字節(jié)數(shù)
5656功能通知匯編程序把DD后跟的數(shù)存入變量名開始的單元,每一個數(shù)占4個字節(jié),存放規(guī)則相同,即:低位字節(jié)低址單元 字節(jié)高址單元用DD定義的這些單元的屬性都是“雙字型”,上DNUM~DNUM+3單元,這些單元都是雙字型單元多字變量名DF一串用逗號間隔的6字節(jié)數(shù)變量名DQ一串用逗號間隔的8字節(jié)數(shù)變量名DT一串用逗號間隔的10字節(jié)數(shù)功能:通知匯編程序為DF/DQ/DT后跟的每一6/8/10等值符號常數(shù)EQU表達(dá)式如 功能義符號常數(shù)NUM的值為等號如:NUM=33功能:定義符號常數(shù)NUM的值為區(qū)別用EQU定義的符號常數(shù),其值在后繼語句中不能更用“=”定義的符號常數(shù),其值在后繼語句中可以重新定例如: MOVAL, MOVAL,33三.常用運算術(shù)運算符*,關(guān)系運算符EQ(等于NEGT(大于),LT(小于),$運算匯編程序?qū)υ闯绦蚴侵鹦袇R編的,$運算符可以返回匯編計數(shù)器的當(dāng)前值。應(yīng)用$DB、DW、DD偽指令之后,統(tǒng)計字符 DB’THE QUICKBROWNFOX’ 匯編后符號常數(shù)LLL的值即為SEG運算格式:SEG 功能:計算某一邏輯段的段基址如:MOV SEGDATA OFFSET運算格式:OFFSET標(biāo)號功能:算出邏輯段中某個變量或標(biāo)號名所在單元相對于段首的偏移地址(有效地址)。設(shè)以“DATA” 的數(shù)據(jù)段中,存 DB12,34代碼段 MOVAX,SEG以下兩條指令等價MOVBX,OFFSETBUF PTR格式:類型說明 地址表達(dá) BYTE(字節(jié)
內(nèi)存單元5子程序的名功能:在本條指令中臨時修改地址表達(dá)式的屬PTR運算符使用規(guī)指令的操作數(shù)至少有一個類型屬性要確定,否則必須PTR運算符說明其中的內(nèi)存操作數(shù)的若兩個操作數(shù)的類型屬性都確定,則必須保持一致。否則必須用PTR運算符改變其中的內(nèi)存操作數(shù)的類型,以保持前后屬性一致。類型屬性確定的操作數(shù)寄存 用變量名直接尋址的內(nèi)存操作間址、基址、變址、基址+變址尋址的內(nèi)存操作具體應(yīng)用方指令兩個)之一時,必須按照對應(yīng)要求使用PTR運算符。否在雙操作數(shù)指令中(例如:MOV,ADD,SUB等指令源操作數(shù)為立即數(shù),目標(biāo)操作數(shù)為直接尋址的器操作源操作數(shù)為單字節(jié)或雙字節(jié)立即數(shù),目標(biāo)操作數(shù)為間址、變址、基址或基址加變址尋址的 器操作數(shù),無論兩者類型屬性是否已經(jīng)一致,后者都必須用PTR顯式說明其類型屬性,使得源目操作數(shù)類型屬性一致。源操作數(shù),目標(biāo)操作數(shù)中有一方為直接尋址的器操作在單操作數(shù)指令中(例如:INC,DEC等指令 ,具體根據(jù)使用該條指令操作的意圖操作數(shù)是直接尋址方式的器操作數(shù),是否使用PTR要性一致(例如PUSH指令)或者依據(jù)使用該條指令的操作意舉例:設(shè)數(shù)據(jù)段有 匯編WBUF匯編 代碼段① AX,WORDPTR ;②
0③ WORDPTRBUF,1234H;BUF單元為34H,BUF+1單元為舉例:設(shè)數(shù)據(jù)段有匯編 匯編WBUF ④MOV BX,OFFSETXX SI,OFFSETYY
0DI,OFFSET PTR;XX單元為WORD ;XX單元為12H,XX+1單元為用方括號括起來的地址表達(dá)式是內(nèi)存操作數(shù)常用的尋址方式,方括號的另一用途是標(biāo)注數(shù)組元素的下標(biāo),下標(biāo)從0開始。如上例數(shù)據(jù)段:代碼段
例1。已知數(shù)據(jù)段12345H單元內(nèi)容為55H,X單元內(nèi)容為66H,連續(xù)執(zhí)行下列指令后,AL=?,X單元的內(nèi)容=?MOVAX,1000HMOVDS,AXMOVBX,2345HMOVAL,[BX]MOVSI,X單元的有效地MOV2。已知內(nèi)請問執(zhí)MOV3。一個有16個字的數(shù)據(jù)區(qū),它的起始地址為70A0:DDF6H,請寫出這個數(shù)據(jù)區(qū)首末字單元物理地址4。BUFDB‘THEQUICKBROWNFOX’LLEQU$-BUF DB LLLEQU$-SLLLLEQU$-BUF分別寫出LLLLL 分6類,為講授方 代表立即數(shù),N8、N16、N32代表8、16、32R 代表寄存器操作數(shù),R8、6、2代表8、16、32位寄存器操作數(shù)M 代表內(nèi)存操作數(shù),M8、M16、M32代表8、16、32位內(nèi)存操作數(shù) 在學(xué)習(xí)和使用指令時,應(yīng)注意以下三個指令中允許的合法的操作數(shù),以及這些操作數(shù)的尋址方式。指令執(zhí)行對標(biāo)志位,特別是對六個狀態(tài)標(biāo)志(A、CO、P、S、Z)是否產(chǎn)生總說明對于雙操作數(shù)指令(如★源、目操作數(shù)不可同為內(nèi)存操作★源、目操作數(shù)屬性一致(長度相同★當(dāng)目標(biāo)操作數(shù)為間址、變址、基址、基+存操作數(shù),而源操作數(shù)為單字節(jié)/雙字節(jié)立即數(shù),則目標(biāo)操作數(shù)必須用PTR說明類對于單操作數(shù)指令(如:I若操作數(shù)為間、變、 +變的內(nèi)存操作數(shù),則第一類本類指令執(zhí)行后,不影響狀態(tài)標(biāo)1.通用傳(1)1.通用傳(1)數(shù)據(jù)傳R/ ,R/M/S ,R;目標(biāo)不允許是CSR/M ,SR/S MCS注意事項:1.立即數(shù)不能直接送段寄存器MOVDS目標(biāo)操作數(shù)不允許用立即數(shù)方式MOV2000H,不允許在兩 單元間傳送數(shù)據(jù)不允許在兩個段寄存器之間傳送數(shù)據(jù)MOVDS源、為了深入理解數(shù)值定義偽指令、學(xué)習(xí)PTR運算符的使用,請仔細(xì)閱讀以下例題。【例】閱讀以下程序,寫出指令執(zhí)行后的目標(biāo)操作數(shù)設(shè)數(shù)據(jù)段 代碼段 DS,SEG數(shù)據(jù)段段基
設(shè)數(shù)據(jù)段 代碼 DS,SEG數(shù)據(jù)段段
設(shè)數(shù)據(jù)段 代碼段 MOVDS,SEG數(shù)據(jù)段段基 1122H,3344H,5566H DD 代碼段 MOVDS,SEG數(shù)據(jù)段段基
BX,WORDPTR 1122H,3344H,5566H DD ?代碼段 DS,SEG數(shù)據(jù)段段基 BX,WORDPTRDNUM[3]設(shè)數(shù)據(jù)段 代碼段 DS,SEG SI,OFFSETBNUM BX,[SI+1] 數(shù)據(jù)段經(jīng)過匯編之后
有效地址(偏移地址)LEAREG, (REG)目的操作 源操作(16位通用寄存器)(內(nèi)存操作數(shù)該指令常用來設(shè)置一個16該指令的執(zhí)行效果與 reg,OFFSETsrc相同 LEABX, 執(zhí)行后BX=100HLEABX,BUF
交換指 XCHGOPRD1, 源操作數(shù):寄存器、 目的操作數(shù):寄存器 執(zhí)行的操作:OPRD1)(OPRD2XCHGBX,(BX)=6F30H(BP)=0200H(SI)=0046H(SS)=2F00H(2F246H)=
(4)查表指X (4)查表指說明:←該指令查找數(shù)據(jù)段中的字節(jié)表,即要求數(shù)據(jù)表放←指令執(zhí)行前:EBX或BX=表頭的有效地 表元素相對于表頭的地址位移功能:DS:[BX+AL]→AL或2.堆?!凑障冗M(jìn)后出的原則組織的一段堆棧指針SP的初值決定了堆棧的大小,SP始終指向堆棧的頂部,即始終指向最后推入堆棧的信息所在的單元 棧底:棧區(qū)的高地★堆棧段寄存器SS:存放堆棧
★堆棧指針ESP(SP):存放棧頂單元的偏★SS、ESP(SP)初值,由程序員賦值或DOS賦★數(shù)據(jù)進(jìn)棧過程(以16位操作數(shù)進(jìn)棧為例高8位雙字節(jié)操作12341234
堆棧
XXXXXX★數(shù)據(jù)進(jìn)棧過程(以16位操作數(shù)進(jìn)棧為例高8位低8位12341234高字
堆棧
1212XXXX★數(shù)據(jù)進(jìn)棧過程(以16位操作數(shù)進(jìn)棧為例低8位12341234高字
堆棧
343412XXXX★數(shù)據(jù)出棧過程(以16位操作數(shù)出棧為例SS:[SP]→目標(biāo)(目標(biāo)寄存器,目標(biāo)單元)低856785678高字
堆棧
343412XXXX★數(shù)據(jù)出棧過程(以16位操作數(shù)出棧為例56345634高字
堆棧
343412XXXX★數(shù)據(jù)出棧過程(以16位操作數(shù)出棧為例343412XXXX12341234高字
堆棧
★數(shù)據(jù)出棧過程(以16位操作數(shù)出棧為例12341234高字
堆棧
343412XXXX★80X86的堆棧是向低地址方向延伸的,棧頂是“浮動”注:一次進(jìn)棧、出棧的數(shù)據(jù)至少是2字 ←進(jìn)棧指 源操作N16/S/R16/R32/M16/說明:非直接尋址的內(nèi)存操作數(shù),必須用PTR說明屬如出棧指 目標(biāo)操作R16/R32/M16/ 如說明非直接尋址的內(nèi)存操作數(shù),必須用PTR說明16位標(biāo)志寄存器入棧指令功能:將16位標(biāo)志寄存器Flag的內(nèi)容壓入堆棧保16位標(biāo)志寄存器出棧指令 注:該指令影響標(biāo)志位O、S、Z、A、P、C第二類、分名格功OSZAP指加法指ADD加法(字、字節(jié)OSZAP帶進(jìn)位加法指ADC帶進(jìn)位加法(字、字節(jié)OSZAP1指INC加1(字、字節(jié)OSZA指減法指SUB減法(字、字節(jié)OSZAP帶借位減法指SBB帶借位減法(字、字節(jié)OSZAP1指DEC減1(字、字節(jié)OSZA比較指比較(字、字節(jié)OSZAP求補指NEG求補OSZAP指無符號數(shù)乘MUL不帶符號數(shù)乘法(字,字節(jié) 帶符號數(shù)乘IMUL帶符號數(shù)乘法(字,字節(jié) 指無符號數(shù)除DIV不帶符號數(shù)除法(字,字節(jié)沒有定帶符號數(shù)乘IDIV帶符號數(shù)除法(字,字節(jié)沒有定符號擴展指擴展AL中的符不影符號擴展指擴展AX中的符不影十進(jìn)制調(diào)加法類指ADD 源操作數(shù):通用寄存器 器、立即 執(zhí)行的操作:DSTDST+SRC注:該指令影響標(biāo)志
010 注意:該指令適合有符號數(shù)和無符號數(shù)例1:MOVDX,4652H DX,0f0f0H465+f0f3741
010001100101001+1111000011110000011011101000011執(zhí)行后(DX) S= C= O= 問:問:對帶符號數(shù)和無符號數(shù)怎樣判斷是否溢出帶符號數(shù)的溢出用溢出標(biāo)志O判斷無符號數(shù)的溢出用進(jìn)位標(biāo)志C判斷ADCDST, 執(zhí)行的操作:DSTDSTSRC功能:主要用注:該指令影響標(biāo)
010 注意:該指令適合有符號數(shù)和無符號數(shù)的運算中分別存放著2F365H5E024H兩個數(shù),2F36+5E028D38
F36+EF36+E02D381000+00000012+5E028D38MOVAX,FirstADDAX,SecondMOVThird,AXMOVAX,First+2ADCAX,Second+2MOVThird+2,
INC 器(不能是段寄存器或立即數(shù))執(zhí)行的操作:OPRDOPRD+1功能:用于在循環(huán)中修改地址指針及循環(huán)次數(shù)等注:該指令影響標(biāo)志例INCINCbyteptr注意(1)該指令將操作數(shù)視為無符號(2)該指位
OPRD+ 010 數(shù)據(jù)代碼
0FFH,0FFH,0,MOVBX,OFFSET PTR ;N單元為 WORDPTR[BX] DWORDPTR ;N、N+1單元都為;且N+2單元為減法類指SUBDST, 執(zhí)行的操作:DSTDST注:該指令影響標(biāo)志
DST- 010 注意:該指令適合有符號數(shù)和無符號數(shù)SBBDST, 執(zhí)行的操作:DSTDSTSRC注:該指令影響標(biāo)志 010 注意:該指令適合有符號數(shù)和無符號數(shù)的運算DEC 器(不能是段寄存器或立即數(shù))執(zhí)行的操作:OPRDOPRD-1功能:用于在循環(huán)中修改地址指針及循環(huán)次數(shù)等注:該指令影響標(biāo)志例DECDECword注意(1)該指令將操作數(shù)視為無符號(2)該指位
OPRD- 010 NEG操作數(shù):通用寄存器 執(zhí)行的操作:求補指令,將操作數(shù)按位取反后加1,再送回操作數(shù)注:該指令影響標(biāo)志NEG的應(yīng)用:求出目標(biāo)操作
010 如 AH,AL,-;AH=-CMPDST, 執(zhí)行的操作:DST注:該指令影響標(biāo)志
DST- 0100000 APC注意:(1)該指令SUB但其不(2)該指令后面通常跟一條轉(zhuǎn)移指令,根據(jù)標(biāo)志位乘法指 SRC無符號數(shù)乘源操作數(shù):通用寄存器 器(不能是立即數(shù)目的操作數(shù):DX,AX(隱含執(zhí)行的操作:字節(jié)操作(AH,AL)(AL)(SRC)字操 (DX,AX)注:該指令影響標(biāo)志
AL 010 SRC帶符號數(shù) 目的操作數(shù):DX,AX(隱含)執(zhí)行的操作:字節(jié)操作(AH,AL)(AL)(SRC) (DX,AX)(AX)(SRC)注:該指令影響標(biāo)志
AL 010 例MOVAL,0B4HMOVBL,11HMULBL除法指 SRC無符號數(shù)除 SRC帶符號數(shù) 器(不能是立即數(shù))目的操作數(shù):DX,AX(隱含)執(zhí)行的操作:字節(jié)操作(AL(AX)(SRC)(AH)(AX)(SRC)余字操 (AX)(DX,AX)/(SRC)——(DX)(DX,AX)(SRC)余注:該指令對各標(biāo)志位均無定義注意:SRC的類型決定是字或BCD碼調(diào)整前面提到的所有運算指令都是二進(jìn)制數(shù)的運算指令,怎樣得到十進(jìn)制的算 ?806提供了一套BCD碼(十進(jìn)制)調(diào)整指令。十進(jìn)BCD碼——用二進(jìn)制編碼的十★組合/未組合BCD碼數(shù)(即壓縮/未壓縮BCD碼數(shù)8 8 十 個即,69H;則或,09H;則,06H;則若 ;則內(nèi)存數(shù)據(jù)即或若 則★BCD碼數(shù)的加減運∵BCD碼數(shù)是用4位二進(jìn)數(shù)代表1位十進(jìn)假設(shè):N1=7=0000,01BCDN2=6=(0000,則即結(jié)果應(yīng)當(dāng)?shù)扔?0001★如何實現(xiàn)BCD碼數(shù)的加法呢2調(diào)整原2調(diào)整原 011 110 +0110 0111 110 001 000100113不同的運算指令的調(diào)整方法不同,但道理是一樣3.3.加法:DAA組合BCD碼十進(jìn)制加法調(diào)整指令A(yù)AA未組合BCD減法DAS組合BCD碼十進(jìn)制減法調(diào)AAS未組合BCD碼十進(jìn)制減法調(diào)整指令。乘法AAM未組合BCD碼十進(jìn)制乘法調(diào)整指令。除法AAD未組合BCD碼十進(jìn)制除法調(diào)筆CPU運加法調(diào) ADD)C標(biāo)=0,A標(biāo)=0,高低四位均沒有出現(xiàn)非 低四位有進(jìn)位,即A標(biāo)=1,對運算結(jié)果06H修筆 CPU運
加法調(diào)+
ADD)
高四位出現(xiàn) BCD碼數(shù),對+
ADD)
因為C標(biāo)=1,低四位出現(xiàn)BCD碼,對運算結(jié)果加66H修例:計算 要求CPU完成的操作:加指令:ADD、方法一:二進(jìn)制字?jǐn)?shù)據(jù)?代碼 AL, PTRN1 PTRN2 BYTEPTRSUM AL, PTRN1+1 AL, PTRN2+1 BYTEPTRSUM+1 方法二:十進(jìn)制字?jǐn)?shù)據(jù)?代碼AL,PTR,AL AL PTR 方法三:二進(jìn)制字?jǐn)?shù)據(jù) SUMDW 代碼 AX, SUM 第三類、邏輯運算指分第三類、邏輯運算指分名格功OSZAP邏輯與指ANDDST,與(字、字節(jié)OS P邏邏輯或指ORDST,或(字、字節(jié)OS P運邏輯非指NOT非(字、字節(jié)不影指邏輯異或指XORDST,異或(字、字節(jié)OS P測試指TESTDST,測試(字、字節(jié)OS P邏輯左移指SHLOPRD,邏輯左移(字、字節(jié)OS P一算術(shù)左移指SALOPRD,算術(shù)左移(字、字節(jié)OS P移邏輯右移指SHROPRD,邏輯右移(字、字節(jié)OS P指算術(shù)右移移指SAROPRD,算術(shù)右移(字、字節(jié)OS P循不含進(jìn)位循環(huán)左移指ROLOPRD,循環(huán)左移(字,字節(jié) 不含進(jìn)位循環(huán)右移指ROROPRD,循環(huán)右移(字,字節(jié) 帶進(jìn)位循環(huán)左移指RCLOPRD, 帶進(jìn)位循環(huán)右移指RCROPRD,帶進(jìn)位循環(huán)右移(字, 節(jié)AND SRC邏輯源操作數(shù):通用寄存器 器、立即目的操作數(shù):通用寄存器 執(zhí)行的操作:DSTDSTand功能:實現(xiàn)兩個操作數(shù)的按O=0,C=0,P,S,Z反映操作的結(jié)
DST∧ 010 P例 AL寄存器的低四位MOV 1111111ANDAL ∧11110001111000
使一的該位0即例 AL寄存器的高兩位MOV 1111111ANDAL
使
∧00111110011111該位為0即ORDST,SRC邏輯 執(zhí)行的操作:DSTDSTor功能:實現(xiàn)兩個操作數(shù)的按O=0,C=0,P,S,Z反映操作的結(jié)果 DST∨ 010 P例1:使某數(shù)的第4、5位置1MOV 0000001OR ∨00110000011001
使一立的該位1即XOR SRC異 執(zhí)行的操作:DSTDSTxor功能:實現(xiàn)兩個操作數(shù)的按位異或運算O=0,C=0,P,S,Z反映操作的結(jié)果 DST⊕ 010 PTESTDST,SRC——測 執(zhí)行的操作DSTand功能:實現(xiàn)兩個操作數(shù)的按位與運算,結(jié)果不保存,只影響標(biāo)志位O=0,C=0,P,S,Z反映操作的結(jié)果 DST∧ 010 P例1:檢測AL中的最低位是否為1,若為10100000∧00000000000000∧Next:MOV∧TESTTEST通常用于檢測一些條件是否滿足,但又不希望改變原來操作數(shù)的情況,該指令后通常帶有條件轉(zhuǎn)移指令。∧例2:檢測CX內(nèi)容是否位0,為0∧ TEST∧JZNextNext:MOV∧ CMP Next:MOVAX,1 ——邏輯操作數(shù):通用寄存器 執(zhí)行的操作OPRDnot功能:實現(xiàn)操作數(shù)的按位取例如:NOTALNOTSALOPRD, ——算術(shù)SHLOPRD, ——邏輯操作數(shù):通用寄存器 CNT:移位次數(shù),只能是立即數(shù)或CL寄存0 注:該指令影響標(biāo)志 010 PSHROPRD, 邏輯操作數(shù):通用寄存器 CNT:移位次數(shù),只能是立即數(shù)或CL寄存執(zhí)行的操作:注:該指令
010 PSAROPRD, 算術(shù)操作數(shù):通用寄存器 CNT:移位次數(shù),只能是立即數(shù)或CL寄存執(zhí)行的操作 注:該指令
010 P例F0H除以2帶符MOV1111,000F0H=(-10H)=-SAR1111,100F8H=(-8H)=-移位指令的移位指令的移位指令通22的操左移一右移一操作數(shù)×2操作算術(shù)移邏輯MOV1111,000F0H=240SHR0111,10078H=120ROLOPRD, 循環(huán)左操作數(shù):通用寄存器 CNT:移位次數(shù),只能是立即數(shù)或CL寄存執(zhí)行的操作 注:該指令
010 ROROPRD, 循環(huán)右操作數(shù):通用寄存器 CNT:移位次數(shù),只能是立即數(shù)或CL寄存器執(zhí)行 注:該指令 010 RCLOPRD, 帶進(jìn)位操作數(shù):通用寄存器 CNT:移位次數(shù),只能是立即數(shù)或CL寄存執(zhí)行的操作 注:該指令 010 RCROPRD, 帶進(jìn)位操作數(shù):通用寄存器 CNT:移位次數(shù),只能是立即數(shù)或CL寄存執(zhí)行的操作 注:該指令 010 第四 轉(zhuǎn)移和調(diào)用指轉(zhuǎn)移類指令按照轉(zhuǎn)移條件分:無條件轉(zhuǎn)移和有條件轉(zhuǎn)移按照轉(zhuǎn)移范圍分:段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移按照獲取轉(zhuǎn)移地址的方法分:直接轉(zhuǎn)移和間接轉(zhuǎn)分指功無條件轉(zhuǎn)移JMP無條件轉(zhuǎn)條件轉(zhuǎn)移指JNZOPRD(等循環(huán)LOOP計數(shù)非零LOOPE/LOOPZ計數(shù)非零循環(huán)且結(jié)果為0循LOOPNE/LOOPNZ計數(shù)非零循環(huán)且結(jié)果不為0循子程序調(diào)用返回CALL調(diào)用子程從子程序中斷INT軟件中溢出時中中斷返JMPJMP<轉(zhuǎn)向地址分名段內(nèi)轉(zhuǎn)段內(nèi)直接轉(zhuǎn)段段內(nèi)間接轉(zhuǎn)段段間轉(zhuǎn)段間直接轉(zhuǎn)段段間間接轉(zhuǎn)段段內(nèi)直接轉(zhuǎn) 標(biāo)moval,blcmpal,0jnSmovds:[1000],aljmpnextpdata:movds:[2000],al 根據(jù)上一條指令影響的狀態(tài)位來判斷是 特特點條件轉(zhuǎn)目標(biāo)地址在當(dāng)前指令的-128~127范圍目標(biāo)地址由操作數(shù)OPRD條件轉(zhuǎn)根據(jù)單個條根據(jù)單個條件標(biāo)志的設(shè)置情況轉(zhuǎn)指功轉(zhuǎn)移條JZ/ 結(jié)果為0相等則轉(zhuǎn)JNZ/ 結(jié)果不為0不相等JS結(jié)果為負(fù)則JNS結(jié)果不為負(fù)JO溢出則轉(zhuǎn)JNO不溢出則轉(zhuǎn)JP/JPE奇偶位為1則轉(zhuǎn)JNP/JPO奇偶位為0則轉(zhuǎn)JCXZCX=0則轉(zhuǎn)根據(jù)組合條件標(biāo)志的設(shè)置情況轉(zhuǎn)移——主要用來比較兩個數(shù)的大無符號數(shù)大小的比指 功 轉(zhuǎn)移條 低于/不高于等于/有借位則轉(zhuǎn) 不低于/高于等于/無借位則轉(zhuǎn) 低于或等于/不高于則轉(zhuǎn) 不低于或等于/高于則轉(zhuǎn) 帶符號數(shù)大小的比指 功 轉(zhuǎn)移條 小于/不大于等于則轉(zhuǎn) S⊕O=1且 不小于/大于或等于則轉(zhuǎn) S⊕O=0或 小于或等于/不大于則轉(zhuǎn) S⊕O=1或 不小于等于/大于則轉(zhuǎn) S⊕O=0且例:兩無符號數(shù)相加,結(jié)果正確則AX中存入1,若溢出則AX中存入0MOVAX,XMOVBX,YADDBX,JCERRORMOVAX,1JMPEXITERROR:MOVAX,0
010 S 例3:有一組無符號數(shù),與50比較,大于50的存入另一 si,array1 di,array2Movcx,nAgain:MovCmpal,
array105 Mov[di],alIncdinext:IncLoop
al- 010 S
3. 指 功 循環(huán)條 LOOPZ/LOOPEOPRD CX0且Z=1LOOPNZ/LOOPNE 計數(shù)器不為零且不相等時循環(huán)CX0且CX循環(huán)次數(shù)LOOPZ(CX=0? Y例:數(shù)出長度為10的,以STRING為首地址的字符串中 SI,STRINGMOVCX,0AHMOVAL, 空格的ASCII碼為MOVAH 結(jié)果在AH CMPAL,JZADDA INC
轉(zhuǎn)向的地址范圍-128~+127之 INCLOOP
循環(huán)條件①(CX)-1 是,循環(huán)結(jié)否,繼續(xù)循4.4.CALL<調(diào)用地址>★調(diào)用:調(diào)用子程序,即無條件轉(zhuǎn)到子程序的第一條指★返回:返回斷點,即返回到CALL的后繼指★子程序:能完成一定功能的相對獨立的程序主程…… 斷點:
XYZ子程………說明
過程名:子程序名,以字母開頭,長度≤經(jīng)匯編之后,過程名就是子程序第一條指令的地址PROC/ENDP序的定界語句屬性有2種描述NEAR(或缺省)代表近過即該子程序和調(diào)用它的那條指令在同一個代碼FAR表遠(yuǎn)過即該子程序和調(diào)用它的那條指令不在同一個代碼RET子程序返回指分類名段內(nèi)直接調(diào)調(diào)間接轉(zhuǎn)直接調(diào)用間接調(diào)返返帶立即返
指CALLCALLWORDPTRCALLFARPTRADDRCALLDWORDPTROPRD
操作near-標(biāo)far-標(biāo)器(32位
舉CALLchangeCALLBXCALLfarptrtranCALLDWORDPTR[BX] 段內(nèi)調(diào)用:CALL段內(nèi)調(diào)用:CALL(SP)(SP)-(SP)+1,(SP)(IP)調(diào)用段段內(nèi)返回:IP(SP)+1,(SP)RET 而子程序返回后,該參數(shù)即無用,若留在堆棧中則占用堆棧空間RETEXP指令將例如RET
參數(shù)參數(shù) 參數(shù) 參數(shù) 第五類串操作指例:把數(shù)據(jù)段SOURCE開始的若干字節(jié),依次傳送ES附加段BUF開始的緩沖思路
數(shù)據(jù) 12H,…… 附加段 N
初始SI+1→SIDI+1→DS:[SI]→ALAL→SI+1→SIDI+1→DS:[SI]→ALAL→CX-1→CX-1→控
代碼給ES賦初 SI,OFFSETSOURCE DI,OFFSETBUF AGA:MOV 返回 返回關(guān)于串操作指令的總說80X86有6條串操作指令,它們是串傳送
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度水利工程項目投標(biāo)擔(dān)保委托保證合同3篇
- 二零二五版葫蘆島市房屋繼承合同范本3篇
- 基于二零二五年業(yè)績目標(biāo)的小型餐飲店面館飯店加盟合同3篇
- 二零二五年湖南機關(guān)事業(yè)單位合同制工人醫(yī)療保險聘用合同3篇
- 二零二五版電梯門套工程安全風(fēng)險評估與應(yīng)急預(yù)案合同3篇
- 二零二五年電子商務(wù)糾紛解決機制合同2篇
- 二零二五年度辣椒種植與農(nóng)業(yè)科技創(chuàng)新合作合同3篇
- 二零二五年度物流配送中心場地租賃合同BF06023篇
- 二零二五年度服裝調(diào)換貨及退貨處理合同范本3篇
- 二零二五年度酒店住宿代理服務(wù)合同示范文本2篇
- 新版DFMEA基礎(chǔ)知識解析與運用-培訓(xùn)教材
- 制氮機操作安全規(guī)程
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(全真題庫)
- 護理安全用氧培訓(xùn)課件
- 《三國演義》中人物性格探析研究性課題報告
- 注冊電氣工程師公共基礎(chǔ)高數(shù)輔導(dǎo)課件
- 土方勞務(wù)分包合同中鐵十一局
- 乳腺導(dǎo)管原位癌
- 冷庫管道應(yīng)急預(yù)案
- 司法考試必背大全(涵蓋所有法律考點)
- 公共部分裝修工程 施工組織設(shè)計
評論
0/150
提交評論