x86彙編學習之第一天

x86寄存器篇

通用寄存器:

32位 16位 8位
EAX AX AL
ECX CX CL
EDX DX DL
EBX EX BL
ESP SP AH
EBP BP CH
ESI SI DH
EDI DI BH

注意:

1、AX存2個字節,正好就是EAX的低兩個字節;AL存1個字節,正好就是EAX的低字節,同樣也是AX的低字節;bcd類似;

2、這裏ESP、EBP、ESI、EDI比較特殊只有低兩個字節的寄存器,並沒有一個字節的寄存器

MOV指令:

  • 立即數到寄存器
    例:mov eax , 1

  • 寄存器到寄存器
    例: mov eax , ecx

  • 寄存器到內存
    例:
    mov byte ptr ds:[合理地址] , al (單字節)
    mov word ptr ds:[合理地址] , ax (雙字節)
    mov dword ptr ds:[合理地址] , eax (雙字)

  • 內存到寄存器
    例:
    mov bl , byte ptr ds:[合理地址] (單字節)
    mov bx , word ptr ds:[合理地址] (雙字節)
    mov ebx , dword ptr ds:[合理地址] (雙字)

  • 立即數到內存
    例: mov word ptr ds:[合理地址] , 0x1122

內存地址幾種表現形式:

1、立即數形式
例:
mov eax , 0x113344 讀內存
mov 0x113355 , edx 寫內存

2、寄存器形式
例:
mov eax,dword ptr:ds [ edx ]
mov dword ptr:ds [ eax ] , ecx

3、寄存器+立即數形式
例:
mov eax,dword ptr:ds [ edx + 4 ]
mov dword ptr:ds [ eax - 4 ] , ecx

4、寄存器+寄存器x{1,2,4,8}形式
例:
mov eax,dword ptr:ds [ edx + ecx*4 ]
mov dword ptr:ds [eax - edx *2] , ecx

5、寄存器+寄存器x{1,2,4,8}+立即數形式
例:
mov eax,dword ptr:ds [ edx + ecx*4 +4]
mov dword ptr:ds [eax - edx *2 - 4 ] , ecx

存儲模式:

首先我們都知道32位系統下,每個進程會有4GB的虛擬內存空間,假設如下排列:
在這裏插入圖片描述
接着我們在看一下下面幾條指令:

<1> mov byte ptr ds:[0x00000000],0x20
這一條毋庸置疑,是把0x20這個一個字節立即數放到內存裏面

<2> mov byte ptr ds:[0x00000000],0x2030
那麼這個我們就會產生思考,放的是0x20,還是0x30??

<3> mov byte ptr ds:[0x00000000],0x20304050
這邊也是類似的疑問!

由此我們就可以簡單講一下大端模式和小段模式兩種計算機的存儲模式了!

兩句口訣:

1、大端模式:數據高位在低地址,數據低位在高地址

2、小端模式:數據低位在低地址,數據高位在高地址

怎麼理解呢?我們可以利用DTDebug的內存區來進行觀察:
敲入指令:
MOV WORD PTR DS:[EFFB38],2030
MOV DWORD PTR DS:[EFFB3C],20304050
在這裏插入圖片描述
很明顯我們發現數據的低字節在低地址,很明顯的小端模式!!!

注:大部分的x86架構都是小端模式,許多Arm架構的爲大端模式

老鐵們覺得有用的話記得給個贊哦!!!我是航行的土豆!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章