匯編簡介

學習匯編兩大知識點:
1.匯編指令
2.寄存器

image.png

64bit:
RAX \RBX\RCX\RDX :通用寄存器
32bit:
EAX\EBX\ECX\EDX :通用寄存器
16bit:
AX\BX\CX\DX :通用寄存器

image.png

現代計算機普遍64位,以前是32位。為了向下兼容,如上圖,64位一半包含著32位的寄存器。

一般規律:
R開頭的寄存器是64位的,占8字節。
E開頭的寄存器是32位的,占4字節。

image.png

注意:寄存器是獨立存在的,不是連續的。
c++支持內聯匯編

__asm{
}

驗證eax包含ax


image.png

image.png

可以發現,ax的值發生了變化,變成了3344

匯編指令

move dest,src

  • 將src的內容復制到dest,類似于dest = src

[地址值]

  • 中括號里面包含的都是地址值

word是2字節,dword是4字節,qword是8字節
作用:
int a = 3;int類型告訴編譯器分配4個字節給a變量。

image.png

所以匯編要通過dword等告訴編譯器分配多少個字節。
ptr是固定寫法,表示指定單位大小。
一個格子代表1個字節。


image.png

指定大小后就知道占4個字節。


image.png

通常是向高地址存/取。[1128->112b而不是1128->1124]

通過cout<<&a,輸出a的地址值。然后查看匯編窗口里的ebp地址值。發現括號里面的值的確是a的地址值。


image.png
  • 全局變量地址是固定的。


    全局

cpu大小端模式

image.png

現在大部分cpu是小端模式,低字節放低地址,高字節放高地址(高高低低)。讀取從小端開始讀取。

lea dest,[地址值],直接把地址給dest

lea eax,[1122h]
等價于eax = 1122h
lea(load effect address)

ret 函數返回

xor op1,op2

異或操作,等價于op1 =op1^op2
類似的還有add,sub,inc(自增),dec

jmp [內存地址]

cpu跳轉到該內存地址進行執行

還有很多j開頭的指令,比如jne()jump not equal


jump
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.地址總線,數據總線,控制總線在哪里,它們有什么作用?答:它們都是cpu連接外部組件的線路。地址總線:地址總線A...
    MagicalGuy閱讀 1,532評論 0 1
  • 本篇是我本人博客中的專題“追根溯源 從C++到匯編”中的開篇。這是我第一次嘗試寫一個系列的文章出來與大家分享。如果...
    SlayerNux閱讀 2,960評論 0 4
  • 編程語言的發展 機器語言由0和1組成 匯編語言(Assembly Language)用符號代替了0和1,比機器語言...
    Jorunk閱讀 599評論 0 4
  • Xcode模擬器的架構是 x86,真機是ARM 常常聊得8086匯編實際是型號而已 匯編語言 -- Assembl...
    mkb2閱讀 196評論 2 1
  • 最早接觸簡書是在朋友圈看到一個師弟分享自己的文章。寫文章的地方很多,但像簡書這樣純粹寫文章的,現在看來還沒有爛大街...
    菜鳥nana閱讀 181評論 0 0