- x86匯編與逆向工程:軟件破解與防護(hù)的藝術(shù)
- (美)斯蒂芬妮·多馬斯 (美)克里斯托弗·多馬斯
- 535字
- 2025-02-10 16:05:44
2.4.2 寄存器的使用
在匯編過程中,通用寄存器可以被當(dāng)作變量來處理,并通過名稱進(jìn)行訪問。例如,指令mov eax, 1將數(shù)值1存到eax,而add eax, ebx則將eax的內(nèi)容加到ebx上。
請注意,所有這些寄存器的名稱都以字母e開頭。這是因?yàn)檫@些32位寄存器是從原始的16位寄存器中“擴(kuò)展”出來的。
寄存器內(nèi)容的低位部分可以通過從名稱中刪除這個e來訪問。例如,ax寄存器包含了eax寄存器的低16位。
如果寄存器的名稱以x結(jié)尾(如eax、ebx、ecx和edx),那么這個16位寄存器可以進(jìn)一步劃分為兩個8位寄存器,它們分別被標(biāo)識為l和h。al包含寄存器ax的低8位,而ah包含了高8位。這在圖2.6中有所說明,其中eax=0x01234567,ax=0x4567,ah=0x45,al=0x67。

圖2.6 eax寄存器的各個部分
64位寄存器
在64位的x86架構(gòu)中,所有的指令和行為與32位的x86一樣。不過,64位的架構(gòu)有更多、更大的寄存器。
圖2.7展示了64位x86常用的寄存器。除了有所不同的32位寄存器外,64位架構(gòu)還包括標(biāo)記為r8~r15的八個寄存器。
所有的64位寄存器都比它們的32位版本要大。對于32位x86中存在的寄存器,比如eax,它的全64位版本就會把e換成r,變成rax寄存器。這樣,就可以通過32位的名稱獲取寄存器的低32位,像ax、al、ah這樣的名稱的用法保持不變。
對于像r8這樣的新寄存器,64位的x86支持對其低32位、低16位和低8位的訪問。這些分別被標(biāo)記為r8d、r8w和r8b,如圖2.8所示。
推薦閱讀
- 敏捷軟件開發(fā)(珍藏版)
- 知行合一: 實(shí)現(xiàn)價值驅(qū)動的敏捷和精益開發(fā)
- 軟件工程理論與應(yīng)用
- ODPS權(quán)威指南 阿里大數(shù)據(jù)平臺應(yīng)用開發(fā)實(shí)踐
- 從缺陷中學(xué)習(xí)C/C++
- 手機(jī)軟件測試最佳實(shí)踐
- 3D打印創(chuàng)意小創(chuàng)客
- Verilog HDL數(shù)字系統(tǒng)設(shè)計及實(shí)踐
- BERT基礎(chǔ)教程:Transformer大模型實(shí)戰(zhàn)
- Unity手機(jī)游戲開發(fā):從搭建到發(fā)布上線全流程實(shí)戰(zhàn)
- 邊緣云部署與運(yùn)營:系統(tǒng)性實(shí)現(xiàn)方法
- 計算機(jī)網(wǎng)絡(luò)系統(tǒng)集成技術(shù)基礎(chǔ)與解決方案
- React Cookbook中文版:87個案例帶你精通React框架
- 獵豹行動:硝煙中的敏捷轉(zhuǎn)型之旅
- UG NX 8.0實(shí)例教程(第2版)