青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

 

1. 通用寄存器:

EAX

(accumulator)"累加器",很多加法乘法指令的缺省寄存器.

EBX

(base)"基地址"寄存器, 在內存尋址時存放基地址.

 

ECX

(counter)計數器, 是重復(REP)前綴指令和LOOP指令的內定計數

EDX

用來放整數除法產生的余數.

低16位:AX,BX,CX和DX

低8位 :AL,BL,CL和DL

高8位 :AH,BH,CH和DH

ESI

(source index)"源索引寄存器", DS:ESI指向源串,如:字符串操作指令中,

EDI

(destination index)"目標索引寄存器",ES:EDI指向目標串

EBP

(BASE POINTER)"基址指針",被用作高級語言函數調用的

,ESP(這個雖然通用,但
很少被用做除了堆棧指針外的用途) 這些32位可以被用作多種4個寄存器的又可

 函數的返回值經常被放在EAX中. ESI/EDI分別叫做"源/目標索引寄存器"(source/destination index

),因為在很多字符串操作指令中, DS:ESI指向源串,而. EBP是"基址指針"(BASE POINTER), 它最經常"

框架指針"(frame pointer). 在破解的時候,經常可以看見一個標準的函數起始代碼: push ebp ;保存當前ebp mov ebp,esp ;EBP設為當前堆棧指針

sub esp, xxx ;預留xxx字節給函數臨時變量. ... 這樣一來,EBP 構成了該函數的一個框架, 在EBP上方分別是原來的EBP, 返回地址和參數. EBP下

方則是臨時變量. 函數返回時作 mov esp,ebp/pop ebp/ret 即可. ESP 專門用作堆棧指針. 2. 段寄存器: CS(Code Segment,代碼段) 指定當前執

行的代碼段. EIP (Instruction pointer, 指令指針)則指向該段中一個具體的指令. CS:EIP指向哪個指令, CPU 就執行它. 一般只能用jmp, ret,

jnz, call 等指令來改變程序流程,而不能直接對它們賦值. DS(DATA SEGMENT, 數據段) 指定一個數據段. 注意:在當前的計算機系統中, 代碼和數

據沒有本質差別, 都是一串二進制數, 區別只在于你如何用它. 例如, CS 制定的段總是被用作代碼, 一般不能通過CS指定的地址去修改該段. 然而

,你可以為同一個段申請一個數據段描述符"別名"而通過DS來訪問/修改. 自修改代碼的程序常如此做. ES,FS,GS 是輔助的段寄存器, 指定附加的數

據段. SS(STACK SEGMENT)指定當前堆棧段. ESP 則指出該段中當前的堆棧頂. 所有push/pop 系列指令都只對SS:ESP指出的地址進行操作. 3. 標志

寄存器(EFLAGS): 該寄存器有32位,組合了各個系統標志. EFLAGS一般不作為整體訪問, 而只對單一的標志位感興趣. 常用的標志有: 進位標志C(

CARRY), 在加法產生進位或減法有借位時置1, 否則為0. 零標志Z(ZERO), 若運算結果為0則置1, 否則為0 符號位S(SIGN), 若運算結果的最高位置

1, 則該位也置1. 溢出標志O(OVERFLOW), 若(帶符號)運算結果超出可表示范圍, 則置1. JXX 系列指令就是根據這些標志來決定是否要跳轉, 從而

實現條件分枝. 要注意,很多JXX 指令是等價的, 對應相同的機器碼. 例如, JE 和JZ 是一樣的,都是當Z=1是跳轉. 只有JMP 是無條件跳轉. JXX 指

令分為兩組, 分別用于無符號操作和帶符號操作. JXX 后面的"XX" 有如下字母: 無符號操作: 帶符號操作: A = "ABOVE", 表示"高于" G = "

GREATER", 表示"大于" B = "BELOW", 表示"低于" L = "LESS", 表示"小于" C = "CARRY", 表示"進位"或"借位" O = "OVERFLOW", 表示"溢出" S

= "SIGN", 表示"負" 通用符號: E = "EQUAL" 表示"等于", 等價于Z (ZERO) N = "NOT" 表示"非", 即標志沒有置位. 如JNZ "如果Z沒有置位則跳

轉" Z = "ZERO", 與E同. 如果仔細想一想,就會發現 JA = JNBE, JAE = JNB, JBE = JNA, JG = JNLE, JGE= JNL, JL= JNGE, .... 4. 端口 端口

是直接和外部設備通訊的地方。外設接入系統后,系統就會把外設的數據接口映射到特定的端口地址空間,這樣,從該端口讀入數據就是從外設讀

入數據,而向外設寫入數據就是向端口寫入數據。當然這一切都必須遵循外設的工作方式。端口的地址空間與內存地址空間無關,系統總共提供對

64K個8位端口的訪問,編號0-65535. 相鄰的8位端口可以組成成一個16位端口,相鄰的16位端口可以組成一個32位端口。端口輸入輸出由指令

IN,OUT,INS和OUTS實現,具體可參考匯編語言書籍。

 

中央處理器(CPU)在微機系統處于“領導核心”的地位。匯編語言被編譯成機器語言之后,將由處理器來執行。那么,首先讓我們來了解一下處理器的主要作用,這將幫助你更好地駕馭它。

典型的處理器的主要任務包括
  • 從內存中獲取機器語言指令,譯碼,執行
  • 根據指令代碼管理它自己的寄存器
  • 根據指令或自己的的需要修改內存的內容
  • 響應其他硬件的中斷請求

一般說來,處理器擁有對整個系統的所有總線的控制權。對于Intel平臺而言,處理器擁有對數據、內存和控制總線的控制權,根據指令控制整個計算機的運行。在以后的章節中,我們還將討論系統中同時存在多個處理器的情況。

處理器中有一些寄存器,這些寄存器可以保存特定長度的數據。某些寄存器中保存的數據對于系統的運行有特殊的意義。

新的處理器往往擁有更多、具有更大字長的寄存器,提供更靈活的取指、尋址方式。

寄存器

如前所述,處理器中有一些可以保存數據的地方被稱作寄存器。

寄存器可以被裝入數據,你也可以在不同的寄存器之間移動這些數據,或者做類似的事情。基本上,像四則運算、位運算等這些計算操作,都主要是針對寄存器進行的。

首先讓我來介紹一下80386上最常用的4個通用寄存器。先瞧瞧下面的圖形,試著理解一下:

上圖中,數字表示的是位。我們可以看出,EAX是一個32-bit寄存器。同時,它的低16-bit又可以通過AX這個名字來訪問;AX又被分為高、低8bit兩部分,分別由AH和AL來表示。

對于EAX、AX、AH、AL的改變同時也會影響與被修改的那些寄存器的值。從而事實上只存在一個32-bit的寄存器EAX,而它可以通過4種不同的途徑訪問。

也許通過名字能夠更容易地理解這些寄存器之間的關系。EAX中的E的意思是“擴展的”,整個EAX的意思是擴展的AX。X的意思Intel沒有明示,我個人認為表示它是一個可變的量 。而AH、AL中的H和L分別代表高和低 。

為什么要這么做呢?主要由于歷史原因。早期的計算機是8位的,8086是第一個16位處理器,其通用寄存器的名字是AX,BX等等;80386是Intel推出的第一款IA-32系列處理器,所有的寄存器都被擴充為32位。為了能夠兼容以前的16位應用程序,80386不能將這些寄存器依舊命名為AX、BX,并且簡單地將他們擴充為32位——這將增加處理器在處理指令方面的成本。

Intel微處理器的寄存器列表(在本章先只介紹80386的寄存器,MMX寄存器以及其他新一代處理器的新寄存器將在以后的章節介紹)

通用寄存器
下面介紹通用寄存器及其習慣用法。顧名思義,通用寄存器是那些你可以根據自己的意愿使用的寄存器,修改他們的值通常不會對計算機的運行造成很大的影響。通用寄存器最多的用途是計算。

EAX
32-bit寬

通用寄存器。相對其他寄存器,在進行運算方面比較常用。在保護模式中,也可以作為內存偏移指針(此時,DS作為段 寄存器或選擇器)

EBX
32-bit寬

通用寄存器。通常作為內存偏移指針使用(相對于EAX、ECX、EDX),DS是默認的段寄存器或選擇器。在保護模式中,同樣可以起這個作用。

ECX
32-bit寬

通用寄存器。通常用于特定指令的計數。在保護模式中,也可以作為內存偏移指針(此時,DS作為 寄存器或段選擇器)。

EDX
32-bit寬

通用寄存器。在某些運算中作為EAX的溢出寄存器(例如乘、除)。在保護模式中,也可以作為內存偏移指針(此時,DS作為段 寄存器或選擇器)。

上述寄存器同EAX一樣包括對應的16-bit和8-bit分組。

用作內存指針的特殊寄存器

ESI
32-bit寬

通常在內存操作指令中作為“源地址指針”使用。當然,ESI可以被裝入任意的數值,但通常沒有人把它當作通用寄存器來用。DS是默認段寄存器或選擇器。

EDI
32-bit寬

通常在內存操作指令中作為“目的地址指針”使用。當然,EDI也可以被裝入任意的數值,但通常沒有人把它當作通用寄存器來用。DS是默認段寄存器或選擇器。

EBP
32-bit寬

這也是一個作為指針的寄存器。通常,它被高級語言編譯器用以建造‘堆棧幀’來保存函數或過程的局部變量,不過,還是那句話,你可以在其中保存你希望的任何數據。SS是它的默認段寄存器或選擇器。

注意,這三個寄存器沒有對應的8-bit分組。換言之,你可以通過SI、DI、BP作為別名訪問他們的低16位,卻沒有辦法直接訪問他們的低8位。

段寄存器和選擇器

實模式下的段寄存器到保護模式下搖身一變就成了選擇器。不同的是,實模式下的“段寄存器”是16-bit的,而保護模式下的選擇器是32-bit的。

CS 代碼段,或代碼選擇器。同IP寄存器(稍后介紹)一同指向當前正在執行的那個地址。處理器執行時從這個寄存器指向的段(實模式)或內存(保護模式)中獲取指令。除了跳轉或其他分支指令之外,你無法修改這個寄存器的內容。
DS 數據段,或數據選擇器。這個寄存器的低16 bit連同ESI一同指向的指令將要處理的內存。同時,所有的內存操作指令 默認情況下都用它指定操作段(實模式)或內存(作為選擇器,在保護模式。這個寄存器可以被裝入任意數值,然而在這么做的時候需要小心一些。方法是,首先把數據送給AX,然后再把它從AX傳送給DS(當然,也可以通過堆棧來做).
ES 附加段,或附加選擇器。這個寄存器的低16 bit連同EDI一同指向的指令將要處理的內存。同樣的,這個寄存器可以被裝入任意數值,方法和DS類似。
FS F段或F選擇器(推測F可能是Free?)。可以用這個寄存器作為默認段寄存器或選擇器的一個替代品。它可以被裝入任何數值,方法和DS類似。
GS G段或G選擇器(G的意義和F一樣,沒有在Intel的文檔中解釋)。它和FS幾乎完全一樣。
SS 堆棧段或堆棧選擇器。這個寄存器的低16 bit連同ESP一同指向下一次堆棧操作(push和pop)所要使用的堆棧地址。這個寄存器也可以被裝入任意數值,你可以通過入棧和出棧操作來給他賦值,不過由于堆棧對于很多操作有很重要的意義,因此,不正確的修改有可能造成對堆棧的破壞。

* 注意 一定不要在初學匯編的階段把這些寄存器弄混。他們非常重要,而一旦你掌握了他們,你就可以對他們做任意的操作了。段寄存器,或選擇器,在沒有指定的情況下都是使用默認的那個。這句話在現在看來可能有點稀里糊涂,不過你很快就會在后面知道如何去做。

特殊寄存器(指向到特定段或內存的偏移量):

EIP 這個寄存器非常的重要。這是一個32位寬的寄存器 ,同CS一同指向即將執行的那條指令的地址。不能夠直接修改這個寄存器的值,修改它的唯一方法是跳轉或分支指令。(CS是默認的段或選擇器)
ESP 這個32位寄存器指向堆棧中即將被操作的那個地址。盡管可以修改它的值,然而并不提倡這樣做,因為如果你不是非常明白自己在做什么,那么你可能造成堆棧的破壞。對于絕大多數情況而言,這對程序是致命的。(SS是默認的段或選擇器)

IP: Instruction Pointer, 指令指針
SP: Stack Pointer, 堆棧指針

好了,上面是最基本的寄存器。下面是一些其他的寄存器,你甚至可能沒有聽說過它們。(都是32位寬):

CR0, CR2, CR3(控制寄存器)。舉一個例子,CR0的作用是切換實模式和保護模式。

還有其他一些寄存器,D0, D1, D2, D3, D6和D7(調試寄存器)。他們可以作為調試器的硬件支持來設置條件斷點。

TR3, TR4, TR5, TR6 和 TR? 寄存器(測試寄存器)用于某些條件測試。

最后我們要說的是一個在程序設計中起著非常關鍵的作用的寄存器:標志寄存器。

Posted on 2005-11-11 13:06 艾凡赫 閱讀(1666) 評論(0)  編輯 收藏 引用 所屬分類: 基礎知識
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久女同精品一区二区| 午夜欧美大片免费观看| 在线播放一区| 欧美日韩国产综合视频在线观看中文 | 午夜精品视频在线| 一色屋精品视频免费看| 麻豆亚洲精品| 国产精品一区二区久久久久| 国产精品久久久免费| 国产精品中文字幕欧美| 狠狠色香婷婷久久亚洲精品| 亚洲国产天堂网精品网站| 亚洲精品美女在线观看| 亚洲美女福利视频网站| 亚洲手机视频| 久久久精彩视频| 亚洲制服丝袜在线| 久久久久久久综合狠狠综合| 免费试看一区| 亚洲美女视频网| 中文av一区特黄| 久久本道综合色狠狠五月| 欧美成人dvd在线视频| 欧美四级电影网站| 一区二区在线免费观看| 亚洲无亚洲人成网站77777| 久久亚洲精品网站| 在线视频欧美精品| 免费成人高清视频| 国产精品日韩欧美一区二区| 亚洲人体影院| 久久嫩草精品久久久精品一| 亚洲伦理在线免费看| 久久成人人人人精品欧| 欧美大片免费| 免费的成人av| 亚洲精品美女免费| 欧美一区二区视频在线观看| 久久精品人人做人人爽| 一区二区三区精品视频| 欧美亚洲日本网站| 亚洲美女免费精品视频在线观看| 久久久久国产成人精品亚洲午夜| 免费观看亚洲视频大全| 国产精品久久久久久久久借妻| 国产精一区二区三区| 国内精品免费在线观看| 最新中文字幕一区二区三区| 亚洲午夜高清视频| 浪潮色综合久久天堂| 亚洲精品久久7777| 亚洲与欧洲av电影| 久久久精品欧美丰满| 欧美乱妇高清无乱码| 国产午夜精品在线| 欧美一级视频一区二区| 欧美在线视屏| 老妇喷水一区二区三区| 国产精品系列在线播放| 韩国久久久久| 亚洲欧美日韩国产中文| 亚洲第一区色| 欧美一区视频在线| 国产精品videosex极品| 国产精品久久久久久久第一福利 | 欧美肥婆在线| 亚洲精品一二区| 麻豆av福利av久久av| 国产农村妇女精品一二区| 一个人看的www久久| 亚洲春色另类小说| 久久免费偷拍视频| 狠狠色丁香婷婷综合| 久久成人人人人精品欧| 久久综合一区二区三区| 亚洲一区国产| 久久久久久久成人| 欧美午夜激情小视频| 一个色综合av| 欧美国产日韩一区二区三区| 欧美在线一二三区| 国产在线成人| 欧美在线观看一区| 久久精品国产亚洲aⅴ| 亚洲日本中文| 欧美理论在线播放| 欧美激情综合在线| 久久亚洲私人国产精品va| 国产精品久久久久久久久婷婷| 亚洲精选视频免费看| 91久久一区二区| 欧美理论大片| 一区二区三区视频观看| 欧美一级二区| 欧美承认网站| 久久综合激情| 亚洲人成网站精品片在线观看 | 日韩网站在线观看| 亚洲精品日韩久久| 欧美午夜免费电影| 欧美一区二区三区喷汁尤物| 亚洲欧洲综合| 欧美日韩国产999| 日韩视频免费看| 久久综合激情| 免费视频一区| 一区二区av在线| 一区二区高清| 好吊日精品视频| 亚洲国产精品黑人久久久| 欧美色精品天天在线观看视频| 亚洲精品美女久久7777777| 亚洲第一区色| 国产欧美在线| 亚洲第一精品影视| 国产欧美1区2区3区| 欧美 亚欧 日韩视频在线| 欧美精品大片| 亚洲美女性视频| 亚洲美女性视频| 国产资源精品在线观看| 欧美91视频| 国产精品久久久久久久久久免费看| 久久久99久久精品女同性| 欧美韩日亚洲| 久久免费视频这里只有精品| 欧美日韩国产色综合一二三四| 亚洲人成绝费网站色www| 99在线精品免费视频九九视| 亚洲激情成人| 国产精品日日摸夜夜摸av| 久久中文久久字幕| 欧美午夜在线| 亚洲国产成人在线视频| 国产亚洲欧美在线| 一本色道久久综合亚洲精品按摩| 国内揄拍国内精品久久| 亚洲视频网在线直播| 国产精品视频久久久| 久热精品视频| 国产午夜精品麻豆| 亚洲一级片在线观看| 99精品国产高清一区二区 | 亚洲成色777777在线观看影院| 免费观看亚洲视频大全| 欧美激情视频一区二区三区不卡| 一区二区三区在线看| 欧美一级大片在线观看| 欧美人与性动交a欧美精品| 麻豆9191精品国产| 国产日韩欧美三区| 欧美岛国激情| 国产精品啊啊啊| 亚洲精品美女在线观看| 欧美激情国产高清| 国产欧美日韩一区二区三区| 9人人澡人人爽人人精品| 亚洲自拍偷拍一区| 午夜精品视频在线| 欧美一区免费视频| 亚洲欧洲精品一区二区三区不卡 | 欧美福利影院| 亚洲欧美日本伦理| 欧美精品18videos性欧美| 欧美国产免费| 亚洲动漫精品| 另类综合日韩欧美亚洲| 亚洲国产天堂久久国产91| 亚洲欧洲日夜超级视频| 在线日韩中文字幕| 免费在线亚洲| 亚洲区免费影片| 亚洲特黄一级片| 国产精品丝袜xxxxxxx| 午夜激情综合网| 日韩小视频在线观看专区| 久久久久久亚洲精品杨幂换脸| 久久夜色精品国产欧美乱| 亚洲成人资源网| 亚洲欧洲一级| 鲁大师影院一区二区三区| 久久人体大胆视频| 亚洲国产一成人久久精品| 欧美国产在线观看| 中日韩高清电影网| 久久免费黄色| 国产亚洲一区二区在线观看 | 欧美在线视屏| 在线欧美影院| 欧美日韩一区二区国产| 午夜视频在线观看一区二区三区| 99国产精品99久久久久久粉嫩| 欧美成人一区二区三区在线观看| 亚洲国产一区二区精品专区| 亚洲一区二区三区在线观看视频| 欧美韩日精品| 99re热精品| 美女黄毛**国产精品啪啪 | 亚洲精品欧美激情| 欧美人成在线|