匯編語言編程基礎 基於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