《彙編語言編程基礎基於LoongArch》是2023年人民郵電出版社出版的圖書,作者是孫國雲、敖琪、王銳。
基本介紹
- 中文名:彙編語言編程基礎基於LoongArch
- 作者:孫國雲、敖琪、王銳
- 出版時間:2023年1月
- 出版社:人民郵電出版社
- ISBN:9787115595423
- 類別:圖書>計算機/網路>程式設計>其他
- 開本:128 開
- 裝幀:平裝-膠訂
- 叢書名:中國自主產權晶片技術與套用叢書
內容簡介,圖書目錄,作者簡介,
內容簡介
彙編語言是人和計算機溝通的直接的方式,它描述了機器終所要執行的指令序列。彙編語言和機器語言一樣都是和計算機體系架構強綁定的低級語言。本書是龍芯自主指令集的首本彙編語言教程,系統講解龍芯處理器全新的自主指令系統架構 LoongArch。
本書循序漸進地介紹基於 LoongArch 的彙編語言知識,包括計算機語言、使用彙編語言的場景等基礎知識,暫存器、指令集、函式調用等彙編語言的核心內容,以及編寫程式示例和常用的調試手段。本書並不是逐條地講解每一條指令的功能,而是通過關鍵指令的拆解來介紹計算機工作的基本原理,同時恰當地指出 LoongArch 的特殊之處,便於讀者理解、實踐、套用 LoongArch。
本書非常適合基於龍芯架構的工程技術人員學習參考,也可作為從事計算機體系結構或計算機系統設計的工程技術人員的參考書,還可用作大學計算機專業的延伸閱讀資料。本書的讀者應具備以下基礎:具有計算機的使用經驗,具有計算機基礎知識,具有一門高級語言(C、Java、Python 等)的基本編程基礎知識。
圖書目錄
前言 xvii
01 彙編語言和龍芯架構簡介
1.1 計算機語言 002
1.1.1 機器語言 002
1.1.2 彙編語言 004
1.1.3 高級語言 004
1.2 彙編語言的使用場景 005
1.2.1 場景1--快速定位問題和分析問題 005
1.2.2 場景2-性能分析和最佳化 006
1.2.3 場景3-完成高級語言無法實現的功能 007
1.3 龍芯系列處理器和龍芯架構介紹 008
1.3.1 龍芯系列處理器 008
1.*.* 龍芯自主指令系統 009
1.4 龍芯彙編語言程式編寫示例 010
1.5 本章小結 012
1.6 習題 012
02 一窺LoongArch指令風貌
2.1 LoongArch指令特性 014
2.1.1 指令組成和指令分類 014
2.1.2 暫存器 015
2.1.3 指令長度和編碼格式 016
2.1.4 指令彙編助記格式 017
2.1.5 符號擴展 018
2.1.6 定址方式 019
2.2 C語言到LoongArch的編譯過程 020
2.2.1 預處理和編譯階段 022
2.2.2 機器指令生成階段 024
2.2.3 連結階段 025
2.3 本章小結 026
2.4 習題 026
03 LoongArch基礎整數指令集
3.1 運算指令 028
3.1.1 算術運算指令 029
3.1.2 邏輯運算和條件賦值指令 034
3.1.3 移位運算指令 035
3.1.4 位操作指令 037
*.* 訪存指令 040
*.*.1 普通訪存指令 040
*.*.2 邊界檢查訪存指令 043
*.*.3 柵障指令 045
*.*.4 原子訪存指令 047
3.3 轉移指令 051
3.3.1 有條件的分支指令 051
3.*.* 無條件分支指令和跳轉指令 052
3.3.3 跳轉範圍 053
3.4 其他雜項指令 054
3.4.1 系統調用指令 054
3.4.2 斷點例外指令 055
3.4.3 讀取恆定頻率計時器信息指令 055
3.4.4 讀取CPU特性指令 056
3.4.5 CRC指令 056
3.4.6 地址邊界檢查指令 057
3.5 特權等級和特權指令概述 057
3.6 本章小結 058
3.7 習題 058
04 LoongArch基礎浮點數指令集
4.1 浮點數存儲方式和數值範圍 061
4.1.1 規格化的值 061
4.1.2 非規格化的值 061
4.1.3 正負無窮大或者NaN 062
4.2 浮點暫存器 062
4.2.1 浮點暫存器 062
4.2.2 條件標誌暫存器 062
4.2.3 浮點控制狀態暫存器 063
4.3 浮點運算指令 063
4.4 浮點訪存指令 065
4.4.1 浮點普通訪存指令 065
4.4.2 浮點邊界檢查訪存指令 066
4.5 浮點比較指令 067
4.6 浮點分支指令 068
4.7 浮點轉換指令 069
4.8 浮點搬運指令 071
4.9 本章小結 073
4.10 習題 073
05 LoongArch ABI
5.1 數據類型、數據對齊和位元組序列 075
5.1.1 數據類型 075
5.1.2 數據對齊 076
5.1.3 位元組序列 077
5.2 LoongArch 暫存器使用約定 077
5.2.1 通用暫存器使用約定 077
5.2.2 浮點暫存器使用約定 080
5.3 函式調用約定 081
5.3.1 函式參數傳遞 081
5.*.* 函式返回值傳遞 087
5.4 函式棧布局 088
5.5 系統調用約定 089
5.6 本章小結 093
5.7 習題 093
06 LoongArch目標檔案和進程虛擬空間
6.1 ELF檔案格式解析 095
6.1.1 ELF檔案頭 096
6.1.2 可重定向檔案中的段和段頭表 097
6.1.3 執行檔中的段和程式頭表 100
6.1.4 符號和符號表 102
6.1.5 重定位和重定位表 105
6.2 進程虛擬地址空間和頁大小 108
6.3 執行檔與進程虛擬地址空間的映射 108
6.4 本章小結 110
6.5 習題 111
07 編寫LoongArch彙編源程式
7.1 彙編源程式.s檔案和.S檔案 113
7.2 彙編源檔案中的彙編器指令 113
7.2.1 符號定義相關的彙編器指令 113
7.2.2 邏輯控制相關的彙編器指令 117
7.3 彙編源檔案中的彙編指令 122
7.3.1 彙編指令 122
7.*.* 彙編宏指令 122
7.4 彙編源程式實例檔案hello.S 124
7.5 沒有函式棧的彙編源程式 125
7.6 本章小結 126
7.7 習題 126
08 內嵌彙編
8.1 內嵌彙編基本格式 128
8.1.1 輸入運算元和輸出運算元 129
8.1.2 破壞描述 131
8.1.3 有名運算元 134
8.2 約束字元 135
8.3 限制符volatile 136
8.4 脫離libc庫的“小”程式示例 136
8.4.1 編寫主程式 136
8.4.2 連結腳本 137
8.4.3 程式的運行 139
8.5 本章小結 139
8.6 習題 139
09 調試彙編程式
9.1 GDB 調試器的常用命令 142
9.1.1 GDB的啟動和*出 142
9.1.2 斷點設定 143
9.1.3 查看變數、記憶體數據和暫存器信息 149
9.1.4 查看堆疊信息 155
9.2 程式單步調試 157
9.2.1 語句單步調試 157
9.2.2 彙編指令的單步調試 158
9.2.3 *出當前函式 159
9.3 本章小結 160
9.4 習題 160
10 彙編程式性能最佳化
10.1 計算機體系架構的三類並行技術 162
10.2 使用向量指令 162
10.3 指令融合和地址對齊 163
10.4 指令調度 164
10.4.1 指令流水線和流水線衝突 164
10.4.2 指令調度 165
10.5 循環展開 167
10.6 性能分析工具perf 168
10.6.1 perf stat的使用 170
10.6.2 perf top的使用 172
10.6.3 perf record/report的使用 173
10.7 本章小結 174
10.8 習題 174
作者簡介
孫國雲 龍芯中科技術股份有限公司軟體生態工程師。多年來從事 Linux系統開發、軟體移植,以及消費類產品的軟體方案設計和研發,在 Linux、移動作業系統開發、音視頻編解碼等領域有著豐富的經驗,申請了多項技術專利。 敖琪 博士,畢業於中國科學院計算技術研究所。龍芯 Java 虛擬機團隊負責人,龍芯中科技術股份有限公司工程師,中國科學技術大學碩士研究生實踐導師。主要負責龍芯 JDK 相關工作,參與了龍芯平台OpenJDK 和 .NET Core 虛擬機的研發和產品化。申請專利十餘項。 王銳 開源愛好者、開發者,十年以上的 Linux用戶,Mozilla 社區的 JavaScript 虛擬機MIPS64 架構的管理員,2011 年加入龍芯中科技術股份有限公司,從事基礎開源軟體研發與生態建設工作。