OD常識-CPU寄存器和匯編指令_第1頁
OD常識-CPU寄存器和匯編指令_第2頁
OD常識-CPU寄存器和匯編指令_第3頁
OD常識-CPU寄存器和匯編指令_第4頁
OD常識-CPU寄存器和匯編指令_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、使用OD須知常識,CPU寄存器和匯編指令 【標(biāo) 題】:使用OD須知常識,CPU寄存器和匯編指令 【作 者】:iloveyq 用OD和CE,總連續(xù)找匯編材料,解讀指令,實(shí)在是累。總算找到篇相比完好的材料,與大眾分享。 32位CPU所含有的寄存器有: 4個數(shù)據(jù)寄存器(EAX、EBX、ECX和EDX 2個變址和指針寄存器(ESI和EDI 2個指針寄存器(ESP和EBP 6個段寄存器(ES、CS、SS、DS、FS和GS 1個指令指針寄存器(EIP 1個標(biāo)志寄存器(EFlags 1、數(shù)據(jù)寄存器 數(shù)據(jù)寄存器主要用來保存作數(shù)和運(yùn)算結(jié)果等消息,從而節(jié)省讀取作數(shù)所需占用總線和訪問存儲器的光 。 32位CPU有4

2、個32位的通用寄存器EAX、EBX、ECX和EDX。 對低16位數(shù)據(jù)的存取,不會影響高16位的數(shù)據(jù)。 這些低16位寄存器分別命名為:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4個16位寄存器又可決裂成8個獨(dú)立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL,每個寄存器都有本人的稱呼,可獨(dú)立存取。 步驟員可利用數(shù)據(jù)寄存器的這種“可分可合”的特,靈便地處理字/字節(jié)的消息。 寄存器EAX一般稱為累加器(Accumulator,用累加器進(jìn)行的作可能需求更少光 ??捎糜诔恕?除、輸進(jìn)/輸出等作,使用頻次很高; 寄存器EBX稱為基地點(diǎn)寄存器(Base

3、Register。它可作為存儲器指針來使用; 寄存器ECX稱為計(jì)數(shù)寄存器(Count Register。 正在循環(huán)和字符串作時,要用它來控制循環(huán)次數(shù);正在位作中,賣移多位時,要用CL來指明移位的位數(shù); 寄存器EDX稱為數(shù)據(jù)寄存器(Data Register。正在進(jìn)行乘、除運(yùn)算時,它可作為默許的作數(shù)參與運(yùn)算,也可用于寄放I/O的端口地點(diǎn)。 正在16位CPU中,AX、BX、CX和DX不克作為基址和變址寄存器來寄放存儲單位的地點(diǎn), 正在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不但可傳送數(shù)據(jù)、暫存數(shù)據(jù)保存算術(shù)邏輯運(yùn)算結(jié)果, 并且也可作為指針寄存器,所以,這些32位寄存器更具有通用。

4、 2、變址寄存器 32位CPU有2個32位通用寄存器ESI和EDI。 其低16位對應(yīng)先前CPU中的SI和DI,對低16位數(shù)據(jù)的存取,不影響高16位的數(shù)據(jù)。 寄存器ESI、EDI、SI和DI稱為變址寄存器(Index Register,它們主要用于寄放存儲單位正在段內(nèi)的恰恰移量, 用它們可完成多種存儲器作數(shù)的尋址方式,為以差別的地點(diǎn)方式訪問存儲單位提供方便。 變址寄存器不可決裂成8位寄存器。作為通用寄存器,也可存儲算術(shù)邏輯運(yùn)算的作數(shù)和運(yùn)算結(jié)果。 它們可作一般的存儲器指針使用。正在字符串作指令的施行過程中,對它們有特定的請求,并且還具有非凡的功能。 3、指針寄存器 其低16位對應(yīng)先前CPU中的B

5、P和SP,對低16位數(shù)據(jù)的存取,不影響高16位的數(shù)據(jù)。 32位CPU有2個32位通用寄存器EBP和ESP。 它們主要用于訪問貨倉內(nèi)的存儲單位,并且規(guī)定: EBP為基指針(Base Pointer寄存器,用它可直接存取貨倉中的數(shù)據(jù); ESP為貨倉指針(Stack Pointer寄存器,用它只可訪問棧頂。 寄存器EBP、ESP、BP和SP稱為指針寄存器(Pointer Register,主要用于寄放貨倉內(nèi)存儲單位的恰恰移量, 用它們可完成多種存儲器作數(shù)的尋址方式,為以差別的地點(diǎn)方式訪問存儲單位提供方便。 指針寄存器不可決裂成8位寄存器。作為通用寄存器,也可存儲算術(shù)邏輯運(yùn)算的作數(shù)和運(yùn)算結(jié)果。 4、段

6、寄存器 段寄存器是憑據(jù)內(nèi)存分段的治理方式而設(shè)置的。內(nèi)存單位的物理地點(diǎn)由段寄存器的值和一個恰恰移量組合而成 的,這樣可用兩個較少位數(shù)的值組合成一個可訪問較大物理空間的內(nèi)存地點(diǎn)。 CPU內(nèi)部的段寄存器: ECS代段寄存器(Code Segment Register,其值為代段的段值; EDS數(shù)據(jù)段寄存器(Data Segment Register,其值為數(shù)據(jù)段的段值; EES附加段寄存器(Extra Segment Register,其值為附加數(shù)據(jù)段的段值; ESS貨倉段寄存器(Stack Segment Register,其值為貨倉段的段值; EFS附加段寄存器(Extra Segment Re

7、gister,其值為附加數(shù)據(jù)段的段值; EGS附加段寄存器(Extra Segment Register,其值為附加數(shù)據(jù)段的段值。 正在16位CPU零碎中,它只要4個段寄存器,所以,步驟正在任何時辰至多有4個正正在使用的段可直接訪問;正在32位 微機(jī)零碎中,它有6個段寄存器,所以,正在此環(huán)境下開發(fā)的步驟最多可同時訪問6個段。 32位CPU有兩個差別的勞動方式:實(shí)方式和掩護(hù)方式。正在每種方式下,段寄存器的作用是差別的。相關(guān)規(guī)定簡 單描繪如下: 實(shí)方式: 前4個段寄存器CS、DS、ES和SS與先前CPU中的所對應(yīng)的段寄存器的含義完整一致,內(nèi)存單位的邏輯 地點(diǎn)仍為“段值:恰恰移量”的方式。為訪問某內(nèi)

8、存段內(nèi)的數(shù)據(jù),務(wù)必使用該段寄存器和存儲單位的恰恰移量。 掩護(hù)方式: 正在此方式下,情況要雙雜得多,裝進(jìn)段寄存器的不再是段值,而是稱為“挑選子”(Selector的某個值。 5、指令指針寄存器 32位CPU把指令指針擴(kuò)展到32位,并記作EIP,EIP的低16位與先前CPU中的IP作用相反。 指令指針EIP、IP(Instruction Pointer是寄放下次將要施行的指令正在代段的恰恰移量。 正在具有預(yù)取指令功能的零碎中,下次要施行的指令一般已被預(yù)取到指令行列隊(duì)伍中,除非發(fā)生轉(zhuǎn)移情況。 所以,正在理解它們的功能時,不考慮存正在指令行列隊(duì)伍的情況。 6、標(biāo)志寄存器 一、 運(yùn)算結(jié)果標(biāo)志位 1、進(jìn)位

9、標(biāo)志CF(Carry Flag 進(jìn)位標(biāo)志CF主要用來反映運(yùn)算能否孕育發(fā)生進(jìn)位或借位。假如運(yùn)算結(jié)果的最高位孕育發(fā)生了一個進(jìn)位或借位,那么,其值為1,不然其值為0。 使用該標(biāo)志位的情況有:多字(字節(jié)數(shù)的加減運(yùn)算,無標(biāo)記數(shù)的巨細(xì)相比運(yùn)算,移位作,字(字節(jié)之間移位,特地改變CF值的指令等。 2、奇偶標(biāo)志PF(Parity Flag 奇偶標(biāo)志PF用于反映運(yùn)算結(jié)果中“1”的個數(shù)的奇偶。假如“1”的個數(shù)為偶數(shù),則PF的值為1,不然其值為0。 利用PF可進(jìn)行奇偶校驗(yàn)檢查,或孕育發(fā)生奇偶校驗(yàn)位。正在數(shù)據(jù)傳送過程中,為了提供傳送的可靠,假如接納奇偶校驗(yàn)的要領(lǐng),就可使用該標(biāo)志位。 3、輔助進(jìn)位標(biāo)志AF(Auxili

10、ary Carry Flag 正在發(fā)生下列情況時,輔助進(jìn)位標(biāo)志AF的值被置為1,不然其值為0: (1、正在字作時,發(fā)生低字節(jié)向高字節(jié)進(jìn)位或借位時; (2、正在字節(jié)作時,發(fā)生低4位向高4位進(jìn)位或借位時。 對以上6個運(yùn)算結(jié)果標(biāo)志位,正在一般編程情況下,標(biāo)志位CF、ZF、SF和OF的使用頻次較高,而標(biāo)志位PF和AF的使用頻次較低。 4、零標(biāo)志ZF(Zero Flag 零標(biāo)志ZF用來反映運(yùn)算結(jié)果能否為0。假如運(yùn)算結(jié)果為0,則其值為1,不然其值為0。正在斷定運(yùn)算結(jié)果能否為0時,可使用此標(biāo)志位。 5、標(biāo)記標(biāo)志SF(Sign Flag 標(biāo)記標(biāo)志SF用來反映運(yùn)算結(jié)果的標(biāo)記位,它與運(yùn)算結(jié)果的最高位相反。正在微機(jī)

11、零碎中,有標(biāo)記數(shù)接納表示法,所以,SF也就反映運(yùn)算結(jié)果的正負(fù)號。運(yùn)算結(jié)果為正數(shù)時,SF的值為0,不然其值為1。 6、溢出標(biāo)志OF(Overflow Flag 溢出標(biāo)志OF用于反映有標(biāo)記數(shù)加減運(yùn)算所得結(jié)果能否溢出。假如運(yùn)算結(jié)果超出賣前運(yùn)算位數(shù)所能表示的范疇,則稱為溢出,OF的值被置為1,不然,OF的值被清為0。 “溢出”和“進(jìn)位”是兩個差別含義的觀點(diǎn),不要混淆。假如不太明確的話,請查閱計(jì)算機(jī)組成原理課程中的相關(guān)章節(jié)。 二、形態(tài)控制標(biāo)志位 形態(tài)控制標(biāo)志位是用來控制CPU作的,它們要經(jīng)過特地的指令才華使之發(fā)生改變。 1、追蹤標(biāo)志TF(Trap Flag 賣追蹤標(biāo)志TF被置為1時,CPU進(jìn)進(jìn)單步施行方

12、式,即每施行一條指令,孕育發(fā)生一個單步中綴懇求。這種方式主要用于步驟的調(diào)試。 指令零碎中沒有特地的指令來改變標(biāo)志位TF的值,但步驟員可用其它要領(lǐng)來改變其值。 2、中綴答應(yīng)標(biāo)志IF(Interrupt-enable Flag 中綴答應(yīng)標(biāo)志IF是用來抉擇CPU能否呼應(yīng)CPU外部的可屏蔽中綴發(fā)出的中綴懇求。 但不管該標(biāo)志為何值,CPU都務(wù)必呼應(yīng)CPU外部的不可屏蔽中綴所發(fā)出的中綴懇求,以及CPU內(nèi)部孕育發(fā)生的中綴懇求。 具體規(guī)定如下: (1、賣IF=1時, CPU可以呼應(yīng)CPU外部的可屏蔽中綴發(fā)出的中綴懇求; (2、賣IF=0時,CPU不呼應(yīng)CPU外部的可屏蔽中綴發(fā)出的中綴懇求。 CPU的指令零碎中

13、也有特地的指令來改變標(biāo)志位IF的值。 3、偏向標(biāo)志DF(Direction Flag 偏向標(biāo)志DF用來抉擇正在串作指令施行時相關(guān)指針寄存器發(fā)生調(diào)解的偏向。具體規(guī)定正在第5.2.11節(jié)字符串作指令中給出。 正在微機(jī)的指令零碎中,還提供了特地的指令來改變標(biāo)志位DF的值。 三、32位標(biāo)志寄存器添加的標(biāo)志位 1、I/O特權(quán)標(biāo)志IOPL(I/O Privilege Level I/O特權(quán)標(biāo)志用兩位二進(jìn)制位來表示,也稱為I/O特權(quán)級字段。該字段指定了請求施行I/O指令的特權(quán)級。 假如賣前的特權(quán)級別正在數(shù)值上小于即是IOPL的值,那么,該I/O指令可施行,不然將發(fā)生一個掩護(hù)異常。 2、嵌套任務(wù)標(biāo)志NT(Ne

14、sted Task 嵌套任務(wù)標(biāo)志NT用來控制中綴返回指令I(lǐng)RET的施行。具體規(guī)定如下: (1、賣NT=0,用貨倉中保存的值恢雙EFLAGS、CS和EIP,施行通例的中綴返回作; (2、賣NT=1,經(jīng)過任務(wù)轉(zhuǎn)換完成中綴返回。 3、重發(fā)動標(biāo)志RF(Restart Flag 重發(fā)動標(biāo)志RF用來控制能否接受調(diào)試阻礙。規(guī)定:RF=0時,表示“接受”調(diào)試阻礙,不然拒盡之。 正在成功施行完一條指令后,處理機(jī)把RF置為0,賣接遭到一個非調(diào)試阻礙時,處理機(jī)就把它置為1。 4、虛擬8086方式標(biāo)志VM(Virtual 8086 Mode 假如該標(biāo)志的值為1,則表示處理機(jī)處于虛擬的8086方式下的勞動形態(tài),不然,處

15、理機(jī)處于一般掩護(hù)方式下的勞動形態(tài)。 匯編指令聚攏 一、常用指令 1. 通用數(shù)據(jù)傳送指令. MOV 傳送字或字節(jié). MOVSX 先標(biāo)記擴(kuò)展,再傳送. MOVZX 先零擴(kuò)展,再傳送. PUSH 把字壓進(jìn)貨倉. POP 把字彈出貨倉. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI順次壓進(jìn)貨倉. POPA 把DI,SI,BP,SP,BX,DX,CX,AX順次彈出貨倉. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI順次壓進(jìn)貨倉. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX順次彈出貨倉. BSWAP 交換32位寄存器里字節(jié)

16、的順序 XCHG 交換字或字節(jié).( 至多有一個作數(shù)為寄存器,段寄存器不可作為作數(shù) CMCHG 相比并交換作數(shù).( 第二個作數(shù)務(wù)必為累加器AL/AX/EAX XADD 先交換再累加.( 結(jié)果正在第一個作數(shù)里 XLAT 字節(jié)查表轉(zhuǎn)換. BX 指向一張 256 字節(jié)的表的起程點(diǎn), AL 為表的索引值 (0-255,即 0-FFH; 返回 AL 為查表結(jié)果. ( BX+AL->AL 2. 輸進(jìn)輸出端口傳送指令. IN I/O端口輸進(jìn). ( 語法: IN 累加器, 端口號DX OUT I/O端口輸出. ( 語法: OUT 端口號DX,累加器 輸進(jìn)輸出端口由賣即方式指定時, 其范疇是 0-255;

17、由寄存器 DX 指定時,其范疇是 0-65535. 3. 手法地點(diǎn) 傳送指令. LEA 裝進(jìn)有效地點(diǎn). 例: LEA DX,string ;把恰恰移地點(diǎn)存到DX. LDS 傳送目標(biāo)指針,把指針內(nèi)容裝進(jìn)DS. 例: LDS SI,string ;把段地點(diǎn):恰恰移地點(diǎn)存到DS:SI. LES 傳送目標(biāo)指針,把指針內(nèi)容裝進(jìn)ES. 例: LES DI,string ;把段地點(diǎn):恰恰移地點(diǎn)存到ESDI. LFS 傳送目標(biāo)指針,把指針內(nèi)容裝進(jìn)FS. 例: LFS DI,string ;把段地點(diǎn):恰恰移地點(diǎn)存到FSD. LGS 傳送目標(biāo)指針,把指針內(nèi)容裝進(jìn)GS. 例: LGS DI,string ;把段地點(diǎn)

18、:恰恰移地點(diǎn)存到GSDI. LSS 傳送目標(biāo)指針,把指針內(nèi)容裝進(jìn)SS. 例: LSS DI,string ;把段地點(diǎn):恰恰移地點(diǎn)存到SSDI. 4. 標(biāo)志傳送指令. LAHF 標(biāo)志寄存器傳送,把標(biāo)志裝進(jìn)AH. SAHF 標(biāo)志寄存器傳送,把AH內(nèi)容裝進(jìn)標(biāo)志寄存器. PUSHF 標(biāo)志進(jìn)棧. POPF 標(biāo)志出棧. PUSHD 32位標(biāo)志進(jìn)棧. POPD 32位標(biāo)志出棧. 二、算術(shù)運(yùn)算指令 ADD 加法. ADC 帶進(jìn)位加法. INC 加 1. AAA 加法的ASCII調(diào)解. DAA 加法的十進(jìn)制調(diào)解. SUB 減法. SBB 帶借位減法. DEC 減 1. NEC 求反(以 0 減之. CMP 相比

19、.(兩作數(shù)作減法,僅變動標(biāo)志位,不回送結(jié)果. AAS 減法的ASCII調(diào)解. DAS 減法的十進(jìn)制調(diào)解. MUL 無標(biāo)記乘法. IMUL 整數(shù)乘法. 以上兩條,結(jié)果回送AH和AL(字節(jié)運(yùn)算,或DX和AX(字運(yùn)算, AAM 乘法的ASCII調(diào)解. DIV 無標(biāo)記除法. IDIV 整數(shù)除法. 以上兩條,結(jié)果回送: 商回送AL,余數(shù)回送AH, (字節(jié)運(yùn)算; 或 商回送AX,余數(shù)回送DX, (字運(yùn)算. AAD 除法的ASCII調(diào)解. CBW 字節(jié)轉(zhuǎn)換為字. (把AL中字節(jié)的標(biāo)記擴(kuò)展到AH中走 CWD 字轉(zhuǎn)換為雙字. (把AX中的字的標(biāo)記擴(kuò)展到DX中走 CWDE 字轉(zhuǎn)換為雙字. (把AX中的字標(biāo)記擴(kuò)展到

20、EAX中走 CDQ 雙字?jǐn)U展. (把EAX中的字的標(biāo)記擴(kuò)展到EDX中走 三、邏輯運(yùn)算指令 AND 與運(yùn)算. OR 或運(yùn)算. XOR 異或運(yùn)算. NOT 取反. TEST 測試.(兩作數(shù)作與運(yùn)算,僅變動標(biāo)志位,不回送結(jié)果. SHL 邏輯左移. SAL 算術(shù)左移.(=SHL SHR 邏輯右移. SAR 算術(shù)右移.(=SHR ROL 循環(huán)左移. ROR 循環(huán)右移. RCL 經(jīng)過進(jìn)位的循環(huán)左移. RCR 經(jīng)過進(jìn)位的循環(huán)右移. 以上八種移位指令,其移位次數(shù)可達(dá)255次. 移位一次時, 可直接用作. 如 SHL AX,1. 移位>1次時, 則由寄存器CL給出移位次數(shù). 如 MOV CL,04 SHL

21、 AX,CL 四、串指令 DS:SI 源串段寄存器 :源串變址. ES I 目標(biāo)串段寄存器:目標(biāo)串變址. CX 重雙次數(shù)計(jì)數(shù)器. AL/AX 掃描值. D標(biāo)志 0表示重雙作中SI和DI應(yīng)主動增量; 1表示應(yīng)主動減量. Z標(biāo)志 用來控制掃描或相比作的結(jié)束. MOVS 串傳送. ( MOVSB 傳送字符. MOVSW 傳送字. MOVSD 傳送雙字. CMPS 串相比. ( CMPSB 相比字符. CMPSW 相比字. SCAS 串掃描. 把AL或AX的內(nèi)容與目標(biāo)串作相比,相比結(jié)果反映正在標(biāo)志位. LODS 裝進(jìn)串. 把源串中的元素(字或字節(jié)逐一裝進(jìn)AL或AX中. ( LODSB 傳送字符. LO

22、DSW 傳送字. LODSD 傳送雙字. STOS 保存串. 是LODS的逆過程. REP 賣CX/ECX0時重雙. REPE/REPZ 賣ZF=1或相比結(jié)果相等,且CX/ECX0時重雙. REPNE/REPNZ 賣ZF=0或相比結(jié)果不相等,且CX/ECX0時重雙. REPC 賣CF=1且CX/ECX0時重雙. REPNC 賣CF=0且CX/ECX0時重雙. 五、步驟轉(zhuǎn)移指令 1.簡略的條件轉(zhuǎn)移指令 JZ(或jE OPR-結(jié)果為零轉(zhuǎn)移, 測試條件ZF=1 JNZ(或jNE OPR -結(jié)果不為零轉(zhuǎn)移,測試條件ZF=0 JS OPR-結(jié)果為負(fù)轉(zhuǎn)移, 測試條件SF=1 JNS OPR-結(jié)果為正轉(zhuǎn)移, 測試條件SF=0 JO OPR- 溢出轉(zhuǎn)移, 測試條件OF= JNO OPR -不溢出轉(zhuǎn)移 , 測試條件SF=0 JP OPR -結(jié)果為偶轉(zhuǎn)移, 測試條件SF=1 JNP OPR -結(jié)果為奇轉(zhuǎn)移 , 測試條件SF=0 JC OPR - 有進(jìn)位轉(zhuǎn)移 , 測試條件SF=1 JNC OPR -無進(jìn)位轉(zhuǎn)移, 測試條件SF=0 2.無標(biāo)記相比條件轉(zhuǎn)移指令(以下指令經(jīng)常是CMP OPD,OPS后面的指令憑據(jù)相比結(jié)果

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論