匯編語言編程基礎 基於LoongArch

孫國雲 敖琪 王銳

  • 出版商: 人民郵電
  • 出版日期: 2023-01-01
  • 定價: $299
  • 售價: 8.5$254
  • 語言: 簡體中文
  • 頁數: 174
  • ISBN: 7115595429
  • ISBN-13: 9787115595423
  • 相關分類: Assembly
  • 立即出貨

  • 匯編語言編程基礎 基於LoongArch-preview-1
  • 匯編語言編程基礎 基於LoongArch-preview-2
匯編語言編程基礎 基於LoongArch-preview-1

買這商品的人也買了...

商品描述

匯編語言是人和電腦溝通的最直接的方式,它描述了機器最終所要執行的指令序列。匯編語言和機器語言一樣都是和電腦體系架構強綁定的低級語言。本書是龍芯自主指令集的首本匯編語言教程,系統講解龍芯處理器全新的自主指令系統架構 LoongArch。

本書循序漸進地介紹基於 LoongArch 的匯編語言知識,包括電腦語言、使用匯編語言的場景等基礎知識,寄存器、指令集、函數調用等匯編語言的核心內容,以及編寫程序示例和常用的調試手段。本書並不是逐條地講解每一條指令的功能,而是通過關鍵指令的拆解來介紹電腦工作的基本原理,同時恰當地指出 LoongArch 的特殊之處,便於讀者理解、實踐、應用 LoongArch。

本書非常適合基於龍芯架構的工程技術人員學習參考,也可作為從事電腦體系結構或電腦系統設計的工程技術人員的參考書,還可用作大學電腦專業的延伸閱讀資料。本書的讀者應具備以下基礎:具有電腦的使用經驗,具有電腦基礎知識,具有一門高級語言(C、Java、Python 等)的基本編程基礎知識。

作者簡介

孫國雲

龍芯中科技術股份有限公司軟件生態工程師。多年來從事 Linux系統開發、軟件移植,以及消費類產品的軟件方案設計和研發,在 Linux、移動操作系統開發、音視頻編解碼等領域有著豐富的經驗,申請了多項技術專利。

敖琪

博士,畢業於中國科學院計算技術研究所。龍芯 Java 虛擬機團隊負責人,龍芯中科技術股份有限公司工程師,中國科學技術大學碩士研究生實踐導師。主要負責龍芯 JDK 相關工作,參與了龍芯平臺OpenJDK 和 .NET Core 虛擬機的研發和產品化。申請專利十餘項。

王銳

開源愛好者、開發者,十年以上的 Linux用戶,Mozilla 社區的 JavaScript 虛擬機MIPS64 架構的管理員,2011 年加入龍芯中科技術股份有限公司,從事基礎開源軟件研發與生態建設工作。

目錄大綱

目 錄

前言 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.3.2 龍芯自主指令系統 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

3.2 訪存指令 040

3.2.1 普通訪存指令 040

3.2.2 邊界檢查訪存指令 043

3.2.3 柵障指令 045

3.2.4 原子訪存指令 047

3.3 轉移指令 051

3.3.1 有條件的分支指令 051

3.3.2 無條件分支指令和跳轉指令 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.3.2 函數返回值傳遞 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.3.2 匯編宏指令 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