iOS彙編研究-1-初識彙編 一、什麼是彙編語言 二、彙編語言的特點 三、iOS設備與彙編語言的版本 四、內存 五、學習彙編需要了解的幾個內容

一、什麼是彙編語言

        人類操作計算的能力需要使用一種方式來表達、需要使用一種方式來實現。目前,都是通過編程來實現的,簡單來說,就是告知計算機要遇到什麼情況怎麼處理。既然是告知,那麼就需要使用語言。計算能夠直接聽懂的語言就是機器語言,什麼是機器語言?其實就是一大堆的01序列。例如,01010101011000。那麼這句話表達的是什麼意思呢?人類是不是很難看懂!
        所以人類就對機器語言進行了一些簡化。例如,機器語言01000000,就使用add來代替;例如,機器語言01000000,就使用sub來代替。這種把機器能溝聽懂的只包含01序列的語言,使用助記符來優化的語言就是彙編語言。
        雖然彙編語言相對於機器語言來說更加易懂,但是對人類依然不是很友好。所以,人類就對彙編語言進行優化,進而發展出高級語言,像C、C++、Java、OC、Swift等。


二、彙編語言的特點

        與高級語言相比,彙編語言具有以下特點:

  • 高級語言操作的是內存
  • 彙編語言可以操作內存和寄存器
  • 彙編語言不可移植(其與具體的芯片相關,所以不可移植)

三、iOS設備與彙編語言的版本

編號 彙編語言的版本 適用設備
1 armv6 iPhone、iPhone2、iPhone3G,第一代iPod Touch、第二代iPod Touch
2 armv7 iPhone3GS、iPhone4、iPhone4S,iPad、iPad2,iPad3、iPad mini,iPod Touch 3G、iPod Touch 4
3 armv8 iPhone5、iPhone 5C,iPad 4
4 armv64 iPhone5S 以後,iPad 4以後

備註
本文的彙編只包含Arm64

四、內存

        一個進程可用的地址空間如下圖所示。



        對於程序員來說,其看到的內存空間是連續的,實際內存的空間是破碎的——由於同時有多個進程存在,每個進程都會佔用不同的內存空間,但是這個問題由操作系統爲我們解決——它提供了虛擬內存。一般情況下,在程序員眼中,內存作爲一個連續的內存空間使用即可。

五、學習彙編需要了解的幾個內容

5.1 寄存器

        對於日常使用高級語言的程序員來說,其看到的是連續的內存空間。但是對於使用匯編的程序原來說,其面對的主要是寄存器。事實上,CPU內部也是分爲運算器、控制器、寄存器、多級緩存。對於基於彙編語言的程序開發來說,寄存器是必須瞭解的一個概念,下文會對寄存器進行詳細解釋。

5.2 彙編指令

        高級語言一般使用if、for等關鍵字來表達;對於彙編語言來說,我們使用匯編指令來進行表達,例如sub、mov、add等。我們所學習的arm系列彙編是精簡指令集的,其比intel系列的彙編要件的多。對於彙編指令可以先學習簡單的幾個,然後再碰到不理解的,就去查資料。
        ARM彙編開發指用ARM提供的彙編指令,進行ARM程序的開發。ARM彙編開發,有兩種開發方式,一種是使用ARM彙編,一種是使用ARM GNU彙編。兩種彙編開發,使用的彙編指令是完全一樣的,區別是宏指令,僞指令,僞操作不一樣。其實兩種開發方式的區別在於所使用的編譯工具不一樣。對於ARM彙編,使用的是ARM公司開發的編譯器,而ARM GNU彙編,是使用GNU爲ARM指令集開發的編譯器,也就是arm-gcc。不過這些差異一般都集中在宏指令,僞指令,僞操作幾方面,對於我們入門學習影響不大。

5.3 堆棧

        我們都知道函數調用涉及到堆棧的管理,理解函數調用、嵌套函數等需要了解堆棧。下圖展示了函數A調用函數B後的堆棧示意圖。


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