成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

入門匯編語言的五大技巧

開發 后端
本文使用RISC-V 為例來向大家展示,來如何使用編寫語言設計程序邏輯,并最終將程序邏輯轉換為匯編語言的程序。

編程是門藝術,大多數開發者實際工作中只是開發App,正常來說是不會接觸到匯編的,主要有兩大原因,一來編譯語言不容易學習,二來,日常生活中比較少用到。

匯編語言是最古老的編程語言,在所有的語言中,它與原生機器語言最為接近。它能直接訪問計算機硬件,要求用戶了解計算機架構和操作系統。學習匯編最大的用處就是可以幫助我們更好地理解高級語言,因此還是很有必要的,

本文使用RISC-V 為例來向大家展示,來如何使用編寫語言設計程序邏輯,并最終將程序邏輯轉換為匯編語言的程序。

用合適的語言設計邏輯

這是最難的一步,許多學生想直接編寫完整的功能模塊的軟件包。但是,如果你不喜歡匯編,那么這是一種注定要失敗的方法,相反,為了把邏輯從語言中分離出來,我們必須用我們能理解的語言來寫。

如果一個學生不懂C語言或一些低級語言,那么我建議他們用偽代碼來寫。太高級的語言編譯困難,而太低級的語言又會講邏輯設計困難,所以,推薦使用C/C++或其他類似的語言。

在翻譯時,有些編輯器可以把它們并排放在一起,這是很有幫助的。因為在大腦中保留一份指令列表是很困難的,特別是當你在編譯一個復雜的程序時。

一步一個腳印

許多學生試圖從頭到尾編寫整個程序,而中間沒有測試任何內容。如果是初學者,我建議用增量式編程,關鍵是在完成一部分邏輯時進行測試。這可以像完成一個for循環就進行測試。

測試的一種方法是將C/C++程序與匯編程序連接在一起,你可以通過在C++中創建函數程序集的原型并在兩者之間切換來實現這一點。你需要確保兩者是不同的,否則鏈接會出錯,按照一般的做法通常會在C函數前面加上一個“c”來區分。我們可以調用Show來運行匯編語言編寫的函數:

  1. extern "C" { // Turn off name mangling 
  2.     void show(int *x); 

extern " C "將告訴c++函數遵循C的"調用約定"。我們真正關心的是關閉名稱修改,這樣我們就可以創建一個名為“show”的標簽,并擁有我們的函數。

了解匯編語言的功能定位

正如巨石強森(Dwayne Johnson)常說的那樣:“認清自己的角色”。知道C/ C++為我們做了什么和程序集沒有為我們做什么是很重要的。。例如,4 + 3 * 4將自動將運算排序為先執行乘法,再執行加法。然而,在匯編中,我們必須先選擇乘法指令,然后再選擇加法指令。

知道如何調用函數

大多數ISA架構都會附帶調用約定手冊,比如ARM和RISC-V。這些只是為在所有語言中調用函數制定了一些基本規則。不過幸運的是RISC-V寄存器的 “ABI” 命名規則,有助于程序員理解它們的含義。比如:

  • 整數參數在寄存器 A0-A7 中,浮點參數在寄存器 FA0-FA7 中
  • 通過對堆棧指針的 sub 操作去分配函數堆棧。在調用完成后使用 add 操作進行銷毀
  • 堆棧大小必須以 8 的整數倍形式分配
  • 所有參數和臨時寄存器必須在函數調用后,被視為銷毀態
  • 在函數調用之后,已保存寄存器才能被顯式保存。如果使用了任何已保存的寄存器,則必須在函數返回之前還原它們的原始值
  • 通過 a0 寄存器做為返回值,將數據返回給調用方。
  1. .global main 
  2. main: 
  3.     addi    sp, sp, -8 
  4.     sd      ra, 0(sp) 
  5.     la      a0, test_solve 
  6.     call    solve 
  7.     mv      a0, zero 
  8.     ld      ra, 0(sp) 
  9.     addi    sp, sp, 8 
  10.     ret 

你可以從上面的代碼中看到,我們首先分配我們的堆棧框架,保存所有需要保存的寄存器,執行,然后在返回之前撤消的所有寄存器。

文檔

用C或其他語言編寫匯編代碼會讓你為每一行C代碼編寫多行匯編代碼。如果你試圖調試程序,這可能會讓你有些難度,所以,我總是寫C代碼作為匯編的注釋,然后把它拆開,并展示我做它的每一步。

你可以從上面的代碼中看到,我有原始的C代碼(第一個注釋),然后對每個片段進行內聯注釋。這樣的方式使我們能夠保證程序可以正確地執行每一步。

 

責任編輯:趙寧寧 來源: 程序員書庫
相關推薦

2019-04-12 10:03:38

云端數據集成數字化

2011-01-14 14:08:17

Linux匯編語言

2010-08-05 14:16:37

路由器配置

2019-06-04 10:40:07

2011-01-14 14:39:32

Linux匯編語言

2010-07-14 17:03:52

編程語言

2013-11-26 09:10:26

優化網絡基礎設施技巧

2024-12-31 08:03:12

2012-02-09 09:00:54

匯編語言

2013-09-02 10:15:42

云備份云存儲云安全

2011-06-22 15:47:16

2015-11-17 09:29:47

2014-05-12 11:07:43

虛擬機性能虛擬機

2012-05-29 09:59:34

2014-02-18 09:37:54

政府云計算

2011-01-14 14:22:50

Linux匯編語言

2017-01-12 11:07:25

網絡數據技巧

2017-01-12 17:19:02

數據中心葉脊架構網絡標準

2013-12-19 13:35:13

開源社區開源軟件

2011-01-14 14:15:11

Linux匯編語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩国产不卡 | 成人精品鲁一区一区二区 | 成人精品一区二区 | 精产嫩模国品一二三区 | 久久精品成人 | 韩国主播午夜大尺度福利 | 国产成人高清 | 天堂久久av| 中文字幕在线观看www | 欧美做暖暖视频 | 久久国产精品一区二区三区 | 久久高清| 久久九九网站 | 一区二区在线免费观看 | 91精品国产日韩91久久久久久 | 欧美日韩国产一区二区三区 | 亚洲欧美日韩系列 | 国产黑丝在线 | 欧美精品久久 | 欧美精品成人一区二区三区四区 | 91久久网站 | 视频三区| 精品久久久久一区二区国产 | 亚洲精品一区二区在线观看 | 亚洲精品国产偷自在线观看 | 免费在线观看一区二区 | 不卡在线视频 | 免费黄色在线观看 | 中文字幕在线一区二区三区 | 午夜资源 | 天天躁日日躁狠狠躁2018小说 | 中文字幕在线三区 | 久久精品国产99国产 | 伊人精品久久久久77777 | 九九热九九 | 亚洲精品免费观看 | 午夜小影院| 免费观看av| 久久不射电影网 | 久久九九99| 日韩欧美三区 |