匯編語言編程基礎(chǔ) 基于LoongArch
定 價(jià):49.9 元
叢書名:中國自主產(chǎn)權(quán)芯片技術(shù)與應(yīng)用叢書
匯編語言是人和計(jì)算機(jī)溝通的最直接的方式,它描述了機(jī)器最終所要執(zhí)行的指令序列。匯編語言和機(jī)器語言一樣都是和計(jì)算機(jī)體系架構(gòu)強(qiáng)綁定的低級(jí)語言。本書是龍芯自主指令集的首本匯編語言教程,系統(tǒng)講解龍芯處理器全新的自主指令系統(tǒng)架構(gòu) LoongArch。本書循序漸進(jìn)地介紹基于 LoongArch 的匯編語言知識(shí),包括計(jì)算機(jī)語言、使用匯編語言的場(chǎng)景等基礎(chǔ)知識(shí),寄存器、指令集、函數(shù)調(diào)用等匯編語言的核心內(nèi)容,以及編寫程序示例和常用的調(diào)試手段。本書并不是逐條地講解每一條指令的功能,而是通過關(guān)鍵指令的拆解來介紹計(jì)算機(jī)工作的基本原理,同時(shí)恰當(dāng)?shù)刂赋?LoongArch 的特殊之處,便于讀者理解、實(shí)踐、應(yīng)用 LoongArch。本書非常適合基于龍芯架構(gòu)的工程技術(shù)人員學(xué)習(xí)參考,也可作為從事計(jì)算機(jī)體系結(jié)構(gòu)或計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的工程技術(shù)人員的參考書,還可用作大學(xué)計(jì)算機(jī)專業(yè)的延伸閱讀資料。本書的讀者應(yīng)具備以下基礎(chǔ):具有計(jì)算機(jī)的使用經(jīng)驗(yàn),具有計(jì)算機(jī)基礎(chǔ)知識(shí),具有一門高級(jí)語言(C、Java、Python 等)的基本編程基礎(chǔ)知識(shí)。
1.龍芯專業(yè)開發(fā)人員編寫。2. 一窺LoongArch指令集特點(diǎn),圍繞如何使用龍芯匯編語言編寫程序展開講解,3.可參考示例多,快速入門龍芯匯編語言。4.工程性強(qiáng),擴(kuò)展介紹部分處理器體系結(jié)構(gòu)、程序編譯過程、程序調(diào)試工具等相關(guān)知識(shí)。
孫國云 龍芯中科技術(shù)股份有限公司軟件生態(tài)工程師。多年來從事 Linux系統(tǒng)開發(fā)、軟件移植,以及消費(fèi)類產(chǎn)品的軟件方案設(shè)計(jì)和研發(fā),在 Linux、移動(dòng)操作系統(tǒng)開發(fā)、音視頻編解碼等領(lǐng)域有著豐富的經(jīng)驗(yàn),申請(qǐng)了多項(xiàng)技術(shù)專利。 敖琪 博士,畢業(yè)于中國科學(xué)院計(jì)算技術(shù)研究所。龍芯 Java 虛擬機(jī)團(tuán)隊(duì)負(fù)責(zé)人,龍芯中科技術(shù)股份有限公司工程師,中國科學(xué)技術(shù)大學(xué)碩士研究生實(shí)踐導(dǎo)師。主要負(fù)責(zé)龍芯 JDK 相關(guān)工作,參與了龍芯平臺(tái)OpenJDK 和 .NET Core 虛擬機(jī)的研發(fā)和產(chǎn)品化。申請(qǐng)專利十余項(xiàng)。 王銳 開源愛好者、開發(fā)者,十年以上的 Linux用戶,Mozilla 社區(qū)的 JavaScript 虛擬機(jī)MIPS64 架構(gòu)的管理員,2011 年加入龍芯中科技術(shù)股份有限公司,從事基礎(chǔ)開源軟件研發(fā)與生態(tài)建設(shè)工作。
目 錄前言 xvii01 匯編語言和龍芯架構(gòu)簡(jiǎn)介1.1 計(jì)算機(jī)語言 0021.1.1 機(jī)器語言 0021.1.2 匯編語言 0041.1.3 高級(jí)語言 0041.2 匯編語言的使用場(chǎng)景 0051.2.1 場(chǎng)景1--快速定位問題和分析問題 0051.2.2 場(chǎng)景2-性能分析和優(yōu)化 0061.2.3 場(chǎng)景3-完成高級(jí)語言無法實(shí)現(xiàn)的功能 0071.3 龍芯系列處理器和龍芯架構(gòu)介紹 0081.3.1 龍芯系列處理器 0081.3.2 龍芯自主指令系統(tǒng) 0091.4 龍芯匯編語言程序編寫示例 0101.5 本章小結(jié) 0121.6 習(xí)題 01202 一窺LoongArch指令風(fēng)貌2.1 LoongArch指令特性 0142.1.1 指令組成和指令分類 0142.1.2 寄存器 0152.1.3 指令長(zhǎng)度和編碼格式 0162.1.4 指令匯編助記格式 0172.1.5 符號(hào)擴(kuò)展 0182.1.6 尋址方式 0192.2 C語言到LoongArch的編譯過程 0202.2.1 預(yù)處理和編譯階段 0222.2.2 機(jī)器指令生成階段 0242.2.3 鏈接階段 0252.3 本章小結(jié) 0262.4 習(xí)題 02603 LoongArch基礎(chǔ)整數(shù)指令集3.1 運(yùn)算指令 0283.1.1 算術(shù)運(yùn)算指令 0293.1.2 邏輯運(yùn)算和條件賦值指令 0343.1.3 移位運(yùn)算指令 0353.1.4 位操作指令 0373.2 訪存指令 0403.2.1 普通訪存指令 0403.2.2 邊界檢查訪存指令 0433.2.3 柵障指令 0453.2.4 原子訪存指令 0473.3 轉(zhuǎn)移指令 0513.3.1 有條件的分支指令 0513.3.2 無條件分支指令和跳轉(zhuǎn)指令 0523.3.3 跳轉(zhuǎn)范圍 0533.4 其他雜項(xiàng)指令 0543.4.1 系統(tǒng)調(diào)用指令 0543.4.2 斷點(diǎn)例外指令 0553.4.3 讀取恒定頻率計(jì)時(shí)器信息指令 0553.4.4 讀取CPU特性指令 0563.4.5 CRC指令 0563.4.6 地址邊界檢查指令 0573.5 特權(quán)等級(jí)和特權(quán)指令概述 0573.6 本章小結(jié) 0583.7 習(xí)題 05804 LoongArch基礎(chǔ)浮點(diǎn)數(shù)指令集4.1 浮點(diǎn)數(shù)存儲(chǔ)方式和數(shù)值范圍 0614.1.1 規(guī)格化的值 0614.1.2 非規(guī)格化的值 0614.1.3 正負(fù)無窮大或者NaN 0624.2 浮點(diǎn)寄存器 0624.2.1 浮點(diǎn)寄存器 0624.2.2 條件標(biāo)志寄存器 0624.2.3 浮點(diǎn)控制狀態(tài)寄存器 0634.3 浮點(diǎn)運(yùn)算指令 0634.4 浮點(diǎn)訪存指令 0654.4.1 浮點(diǎn)普通訪存指令 0654.4.2 浮點(diǎn)邊界檢查訪存指令 0664.5 浮點(diǎn)比較指令 0674.6 浮點(diǎn)分支指令 0684.7 浮點(diǎn)轉(zhuǎn)換指令 0694.8 浮點(diǎn)搬運(yùn)指令 0714.9 本章小結(jié) 0734.10 習(xí)題 07305 LoongArch ABI5.1 數(shù)據(jù)類型、數(shù)據(jù)對(duì)齊和字節(jié)序列 0755.1.1 數(shù)據(jù)類型 0755.1.2 數(shù)據(jù)對(duì)齊 0765.1.3 字節(jié)序列 0775.2 LoongArch 寄存器使用約定 0775.2.1 通用寄存器使用約定 0775.2.2 浮點(diǎn)寄存器使用約定 0805.3 函數(shù)調(diào)用約定 0815.3.1 函數(shù)參數(shù)傳遞 0815.3.2 函數(shù)返回值傳遞 0875.4 函數(shù)棧布局 0885.5 系統(tǒng)調(diào)用約定 0895.6 本章小結(jié) 0935.7 習(xí)題 09306 LoongArch目標(biāo)文件和進(jìn)程虛擬空間6.1 ELF文件格式解析 0956.1.1 ELF文件頭 0966.1.2 可重定向文件中的段和段頭表 0976.1.3 可執(zhí)行文件中的段和程序頭表 1006.1.4 符號(hào)和符號(hào)表 1026.1.5 重定位和重定位表 1056.2 進(jìn)程虛擬地址空間和頁大小 1086.3 可執(zhí)行文件與進(jìn)程虛擬地址空間的映射 1086.4 本章小結(jié) 1106.5 習(xí)題 11107 編寫LoongArch匯編源程序7.1 匯編源程序.s文件和.S文件 1137.2 匯編源文件中的匯編器指令 1137.2.1 符號(hào)定義相關(guān)的匯編器指令 1137.2.2 邏輯控制相關(guān)的匯編器指令 1177.3 匯編源文件中的匯編指令 1227.3.1 匯編指令 1227.3.2 匯編宏指令 1227.4 匯編源程序?qū)嵗募㭎ello.S 1247.5 沒有函數(shù)棧的匯編源程序 1257.6 本章小結(jié) 1267.7 習(xí)題 12608 內(nèi)嵌匯編8.1 內(nèi)嵌匯編基本格式 1288.1.1 輸入操作數(shù)和輸出操作數(shù) 1298.1.2 破壞描述 1318.1.3 有名操作數(shù) 1348.2 約束字符 1358.3 限制符volatile 1368.4 脫離libc庫的最小程序示例 1368.4.1 編寫主程序 1368.4.2 鏈接腳本 1378.4.3 程序的運(yùn)行 1398.5 本章小結(jié) 1398.6 習(xí)題 13909 調(diào)試匯編程序9.1 GDB 調(diào)試器的常用命令 1429.1.1 GDB的啟動(dòng)和退出 1429.1.2 斷點(diǎn)設(shè)置 1439.1.3 查看變量、內(nèi)存數(shù)據(jù)和寄存器信息 1499.1.4 查看堆棧信息 1559.2 程序單步調(diào)試 1579.2.1 語句單步調(diào)試 1579.2.2 匯編指令的單步調(diào)試 1589.2.3 退出當(dāng)前函數(shù) 1599.3 本章小結(jié) 1609.4 習(xí)題 16010 匯編程序性能優(yōu)化10.1 計(jì)算機(jī)體系架構(gòu)的三類并行技術(shù) 16210.2 使用向量指令 16210.3 指令融合和地址對(duì)齊 16310.4 指令調(diào)度 16410.4.1 指令流水線和流水線沖突 16410.4.2 指令調(diào)度 16510.5 循環(huán)展開 16710.6 性能分析工具perf 16810.6.1 perf stat的使用 17010.6.2 perf top的使用 17210.6.3 perf record/report的使用 17310.7 本章小結(jié) 17410.8 習(xí)題 174