官术网_书友最值得收藏!

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所示。

主站蜘蛛池模板: 中江县| 湟源县| 浦城县| 九江市| 新巴尔虎右旗| 北票市| 甘孜| 永州市| 镇雄县| 霍山县| 富宁县| 罗城| 寿宁县| 黔江区| 湟源县| 阜城县| 瑞安市| 万宁市| 沂南县| 玛沁县| 丰原市| 朝阳区| 乌苏市| 石嘴山市| 柯坪县| 盈江县| 桐柏县| 友谊县| 黑龙江省| 根河市| 和平区| 中宁县| 盐津县| 阿拉善右旗| 巴中市| 遂宁市| 同江市| 筠连县| 托克托县| 曲麻莱县| 唐河县|