1. 程式人生 > >學習linux環境下彙編的好書《組合語言程式設計》

學習linux環境下彙編的好書《組合語言程式設計》

.2.2 ia-32的高階特性
2.2.1 x87浮點單元
2.2.2 多媒體擴充套件
2.2.3 流化simd擴充套件
2.2.4 超執行緒
2.3 ia-32處理器系列
2.3.1 intel處理器
2.3.2 非intel處理器
2.4 小結
第3章 相關的工具
3.1 開發工具
3.1.1 彙編器
3.1.2 聯結器
3.1.3 偵錯程式
3.1.4 編譯器
3.1.5 目的碼反彙編器
3.1.6 簡檔器
3.2 gnu彙編器
3.2.1 安裝彙編器
3.2.2 使用匯編器
3.2.3 關於操作碼語法
3.3 gnu聯結器
3.4 gnu編譯器
3.4.1 下載和安裝gcc
3.4.2 使用gcc
3.5 gnu偵錯程式程式
3.5.1 下載和安裝gdb
3.5.2 使用gdb
3.6 kde偵錯程式
3.6.1 下載和安裝kdbg
3.6.2 使用kdbg
3.7 gnu objdump程式
3.7.1使用objdump
3.7.2 objdump範例
3.8 gnu簡檔器程式’
3.8.1 使用簡檔器
3.8.2 簡檔範例
3.9 完整的彙編開發系統
3.9.1 linux基礎
3.9.2 下載和執行mepis
3.9.3 新的開發系統
3.10 小結
第4章 組合語言程式範例
4.1 程式的組成
4.1.1 定義段
4.1.2 定義起始點
4.2 建立簡單程式
4.2.1 cpuid指令
4.2.2 範例程式
4.2.3 構建可執行程式
4.2.4 執行可執行程式
4.2.5 使用編譯器進行彙編
4.3 除錯程式
4.4 在組合語言中使用c庫函式
4.4.1 使用printf
4.4.2 連線c庫函式
4.5 小結
第二部分 組合語言程式設計基礎
第5章 傳送資料
5.1 定義資料元素
5.1.1 資料段
5.1.2 定義靜態符號
5.1.3 bss段
5.2 傳送資料元素
5.2.1 mov指令格式
5.2.2 把立即數傳送到暫存器和記憶體
5.2.3 在暫存器之間傳送資料
5.2.4 在記憶體和暫存器之間傳送資料
5.3 條件傳送指令
5.3.1 cmov指令
5.3.2 使用cmov指令
5.4 交換資料
5.4.1 資料交換指令
5.4.2 使用資料交換指令
5.5 堆疊
5.5.1 堆疊如何工作
5.5.2 壓入和彈出資料
5.5.3 壓入和彈出所有暫存器
5.5.4 手動使用esp和ebp暫存器
5.6 優化記憶體訪問
5.7 小結
第6章 控制執行流程
6.1 指令指標
6.2 無條件分支
6.2.1 跳轉
6.2.2 呼叫
6.2.3 中斷
6.3 條件分支
6.3.1 條件跳轉指令
6.3.2 比較指令
6.3.3 使用標誌位的範例
6.4 迴圈
6.4.1 迴圈指令
6.4.2 迴圈範例
6.4.3 防止loop災難
6.5 模仿高階條件分支
6.5.1 if語句
6.5.2 for迴圈
6.6 優化分支指令
6.6.1 分支預測
6.6.2 優化技巧
6.7 小結
第7章 使用數字
7.1 數字資料型別
7.2 整數
7.2.1 標準整數長度
7.2.2 無符號整數
7.2.3 帶符號整數
7.2.4 使用帶符號整數
7.2.5 擴充套件整數
7.2.6 在gnu彙編器中定義整數
7.3 simd整數
7.3.1 mmx整數
7.3.2 傳送mmx整數
7.3.3 sse整數
7.3.4 傳送sse整數
7.4 二進位制編碼的十進位制
7.4.1 bcd是什麼
7.4.2 fpubcd值
7.4.3 傳送bcd值
7.5 浮點數
7.5.1 浮點數是什麼
7.5.2 標準浮點資料型別
7.5.3 ia-32浮點值
7.5.4 在gnu彙編器中定義浮點值
7.5.5 傳送浮點值
7.5.6 使用預置的浮點值
7.5.7 sse浮點資料型別
7.5.8 傳送sse浮點值
7.6 轉換
7.6.1 轉換指令
7.6.2 轉換範例
7.7 小結
第8章 基本數學功能
8.1 整數運算
8.1.1 加法
8.1.2 減法
8.1.3 遞增和遞減
8.1.4 乘法
8.1.5 除法
8.2 移位指令
8.2.1 移位乘法
8.2.2 移位除法
8.2.3 迴圈移位
8.3 十進位制運算
8.3.1 不打包bcd的運算
8.3.2 打包bcd的運算
8.4 邏輯操作
8.4.1 布林邏輯
8.4.2 位測試
8.5 小結
第9章 高階數學功能
9.1 fpu環境
9.1.1 fpu暫存器堆疊
9.1.2 fpu狀態、控制和標記暫存器
9.1.3 使用fpu堆疊
9.2 基本浮點運算
9.3 高階浮點運算
9.3.1 浮點功能
9.3.2 部分餘數
9.3.3 三角函式
9.3.4 對數函式
9.4 浮點條件分支
9.4.1 fcom指令系列
9.4.2 fcomi指令系列
9.4.3 fcmov指令系列
9.5 儲存和恢復fpu狀態
9.5.1 儲存和恢復fpu環境
9.5.2 儲存和恢復fpu狀態
9.6 等待和非等待指令
9.7 優化浮點運算
9.8 小結
第10章 處理字串
10.1 傳送字串
10.1.1 movs指令
10.1.2 rep字首
10.1.3 其他rep指令
10.2 儲存和載入字串
10.2.1 lods指令
10.2.2 stos指令
10.2.3 構建自己的字串函式
10.3 比較字串
10.3.1 cmps指令
10.3.2 cmps和rep一起使用
10.3.3 字串不等
10.4 掃描字串
10.4.1 scas指令
10.4.2 搜尋多個字元
10.4.3 計算字串長度
10.5 小結
第11章 使用函式
11.1 定義函式
11.2 彙編函式
11.2.1 編寫函式
11.2.2 訪問函式
11.2.3 函式的放置
11.2.4 使用暫存器
11.2.5 使用全域性資料
11.3 按照c樣式傳遞資料值
11.3.1 回顧堆疊
11.3.2 在堆疊之中傳遞函式引數
11.3.3 函式開頭和結尾
11.3.4 定義區域性函式資料
11.3.5 清空堆疊
11.3.6 範例
11.3.7 在操作之中監視堆疊
11.4 使用獨立的函式檔案
11.4.1 建立獨立的函式檔案
11.4.2 建立可執行檔案
11.4.3 除錯獨立的函式檔案
11.5 使用命令列引數
11.5.1 程式剖析
11.5.2 分析堆疊
11.5.3 檢視命令列引數
11.5.4 檢視環境變數
11.5.5 使用命令列引數的範例
11.6 小結
第12章 使用linux系統呼叫
12.1 linux核心
12.1.1 核心組成
12.1.2 linux核心版本
12.2 系統呼叫
12.2.1 查詢系統呼叫
12.2.2 查詢系統呼叫定義
12.2.3 常用系統呼叫
12.3 使用系統呼叫
12.4 複雜的系統呼叫返回值
12.4.1 sysinfo系統呼叫
12.4.2 使用返回結構
12.4.3 檢視結果
12.5 跟蹤系統呼叫
12.5.1 strace程式
12.5.2 高階strace引數
12.5.3 監視程式系統呼叫
12.5.4 附加到正在執行的程式
12.6 系統呼叫和c庫
12.6.1 c庫
12.6.2 跟蹤c函式
12.6.3 系統呼叫和c庫的比較
12.7小結
第三部分 高階組合語言技術
第13章 使用內聯彙編
13.1 什麼是內聯彙編
13.2 基本的內聯彙編程式碼
13.2.1 asm格式
13.2.2 使用全域性c變數
13.2.3 使用volatile修飾符
13.2.4 使用替換的關鍵字
13.3 擴充套件asm
13.3.1 擴充套件asm格式
13.3.2 指定輸入值和輸出值
13.3.3 使用暫存器
13.3.4 使用佔位符
13.3.5 引用佔位符
13.3.6 替換的佔位符
13.3.7 改動的暫存器列表
13.3.8 使用記憶體位置
13.3.9 使用浮點值
13.3.10 處理跳轉
13.4 使用內聯彙編程式碼
13.4.1 什麼是巨集
13.4.2 c巨集函式
13.4.3 建立內聯彙編巨集函式
13.5 小結
笫14章 調用匯編庫
14.1 建立彙編函式
14.2 編譯c和彙編程式
14.2.1 編譯彙編原始碼檔案
14.2.2 使用匯編目的碼檔案
14.2.3 可執行檔案
14.3 在c程式中使用匯編函式
14.3.1 使用整數返回值
14.3.2 使用字串返回值
14.3.3 使用浮點返回值
14.3.4 使用多個輸入值
14.3.5 使用混合資料型別的輸入值
14.4 在c++程式中使用匯編函式
14.5 建立靜態庫
14.5.1 什麼是靜態庫
14.5.2 ar命令
14.5.3 建立靜態庫檔案
14.5.4 編譯靜態庫
14.6 使用共享庫
14.6.1 什麼是共享庫
14.6.2 建立共享庫
14.6.3 編譯共享庫
14.6.4 執行使用共享庫的程式
14.7 除錯彙編函式
14.7.1 除錯c程式
14.7.2 除錯彙編函式
14.8 小結
第15章 優化例程
15.1 優化編譯器程式碼
15.1.1 編譯器優化級別1
15.1.2 編譯器優化級別2
15.1.3 編譯器優化級別3
15.2 建立優化的程式碼
15.2.1 生成組合語言程式碼
15.2.2 檢視優化的程式碼
15.2.3 重新編譯優化的程式碼
15.3 優化技巧
15.3.1 優化運算
15.3.2 優化變數
15.3.3 優化迴圈
15.3.4 優化條件分支
15.3.5 通用子表示式消除
15.4 小結
第16章 使用檔案
16.1 檔案處理順序
16.2 開啟和關閉檔案
16.2.1 訪問型別
16.2.2 unix許可權
16.2.3 開啟檔案程式碼
16.2.4 開啟錯誤返回程式碼
16.2.5 關閉檔案
16.3 寫入檔案
16.3.1 簡單的寫入範例
16.3.2 改變檔案訪問模式
16.3.3 處理檔案錯誤
16.4 讀取檔案
16.4.1 簡單的讀取範例
16.4.2 更加複雜的讀取範例
16.5 讀取、處理和寫入資料
16.6 記憶體對映檔案
16.6.1 什麼是記憶體對映檔案
16.6.2 mmap系統呼叫
16.6.3 mmap組合語言格式
16.6.4 mmap範例
16.7 小結
第17章 使用高階ia-32特性
17.1 simd簡介
17.1.1 mmx
17.1.2 sse
17.1.3 sse2
17.2 檢測支援的simd操作
17.2.1 檢測支援
17.2.2 simd特性程式
17.3 使用mmx指令
17.3.1 載入和獲得打包的整數值
17.3.2 執行mmx操作
17.4 使用sse指令
17.4.1 傳送資料
17.4.2 處理資料
17.5 使用sse2指令
17.5.1 傳送資料
17.5.2 處理資料
17.6 sse3指令
17.7 小結

相關推薦

學習linux環境彙編好書組合語言程式設計

.2.2 ia-32的高階特性 2.2.1 x87浮點單元 2.2.2 多媒體擴充套件 2.2.3 流化simd擴充套件 2.2.4 超執行緒 2.3 ia-32處理器系列 2.3.1 intel處理器 2.3.2 非intel處理器 2.4 小結 第3章 相關的工具 3.1 開發工具 3.1.1 彙編器 3

學習DB2之Linux環境下載

文件的 express linux環境 兩個 下載地址 lan linu size SM 一 下載前的註冊IBM地址:https://www-01.ibm.com/marketing/iwm/iwm/web/pick.do?source=swg-db2expressc&am

[原始碼和文件分享]基於C語言的Linux環境socket程式設計

一 需求分析 柏克萊套接字,又稱為BSD 套接字是一種應用程式介面,用於網際插座與Unix域套接字,包括了一個用C語言寫成的應用程式開發庫,主要用於實現程序間通訊,在計算機網路通訊方面被廣泛使用。 使用Berkeley套接字的系統有很多,本系統是在Ubuntu下用C語言進行socket程式設

linux環境開發 學習之旅一

今天是在學習的第一天,雖然教的內容並不難,但是在沒有任何基礎下的學習並不會顯得輕鬆,之前大學都是蜻蜓點水一樣的學習知識,但是今天的學習有一半是需要我們自己動手去做的,一開始老師在上面飛快的敲,作為一張白紙只能看見飛快的程式碼行在冒出,但是經過一會的適應和老師的磨

linux環境網路程式設計

  參考 https://www.cnblogs.com/diligenceday/p/6241021.html https://blog.csdn.net/baidu_36649389/article/details/79081770 http://www.cnblogs

Linux學習Linux環境利用wget下載https連結內容時報錯:無法本地校驗頒發者的許可權。 要以不安全的方式連線至 ,使用“--no-check-certificate”

一、問題描述 今天在CenterOS系統上使用wget命令下載一個https連結的內容時報錯,如下所示: [[email protected] /]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-

【Redis學習】:Linux環境的Redis安裝與配置

安裝環境 redis是C語言開發的,安裝redis需要先將官網上下載的原始碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc。這個最好使用yum安裝,因為依賴關係比較多,自己不好找

多執行緒程式設計Linux環境的多執行緒(一)——好文

一、Linux環境下的執行緒   相對於其他作業系統,Linux系統核心只提供了輕量級程序的支援,並未實現執行緒模型。Linux是一種“多程序單執行緒”的作業系統,Linux本身只有程序的概念,而其所謂的“執行緒”本質上在核心裡仍然是程序。      程序是資源分配的單位,同一程序中的多個執行緒共享該程序的

linux環境ssl多執行緒程式設計例項(整理)

服務端: #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <errno.h> #ifndef    _WIN32 #include <

Linux環境C程式設計指南---gcc 編譯器常用的命令列引數一覽

1. gcc -E source_file.c-E,只執行到預編譯。直接輸出預編譯結果。2. gcc -S source_file.c -S,只執行到原始碼到彙編程式碼的轉換,輸出彙編程式碼。3. gcc -c source_file.c-c,只執行到編譯,輸出目標檔案。4. gcc (-E/S/c/) so

linux環境的多人聊天程式設計

STEP 1:老師給出了原始的程式,是功能不完善的,也就是讓我們把發信息的使用者名稱和時間啥的顯示出來,這樣不是比較合理嘛;原程式是可以實現傳text的,就是沒有使用者名稱而已。 先跑一下(切換到你放這三檔案的目錄哦~):gcc -o chat chat.c 回車 然後:.

Linux環境Python學習(1)

1.終端輸入python即可開啟Python直譯器,結束時可按 Ctrl+D或exit()關閉編輯器。(Linux一般自帶python) 2.Python定義或使用變數的規則: (1)變

linux環境的時間程式設計

Linux下提供了豐富的api以供開發者們處理和時間相關的問題。然而這些介面看似各自為政實則有有著千絲萬縷的聯絡,在學習和時間中引發了各種各樣的混亂。因此時間處理成為了許多Linux開發者的夢魘,遇到時間處理往往避之不及。不過只要你稍微花費一點點精力,學會在Linux上優雅的處理時間和日期也並不是什麼難事。

Linux環境的 pyenv的安裝

pyenvCentOS上安裝pyenv:在安裝pyenv前,需要先安裝如下的依賴包:在 CentOS/RHEL/Fedora 下:yum install readline readline-devel readline-static yum install openssl openssl-devel open

linux環境部署zabbix3.2、模板、郵件告警詳細過程

-1 ice erer without zlib zip ever native item 服務端部署: 系統環境及軟件版本: Linux:release 6.3 zabbix:zabbix-3.2.5.tar.gz nginx:nginx-1.12.0.tar.gz ph

2.Linux環境配置Solr4.10.3

margin 內容 src source -type alt 技術 tgz 安裝包 1.準備階段 操作系統:CentOS 6.8 安裝包:/home/test solr-4.10.3.tgz.tar IK Analyzer 2012FF_hf1.zip jdk-8u12

由一個簡單需求到Linux環境的syslog、unix domain socket

message python domain 服務器 import 需求:回到頂部  工作中有一個在Linux(debian8)環境下運行的服務器程序,用python語言實現,代碼中有不同優先級的日誌需要記錄,開發的時候都是使用python的logging模塊輸出到文件,示例代碼如下:  

(1)Jenkins Linux環境的簡單搭建

linux java jenkins安裝部署 jdk apache-maven (1)Jenkins Linux環境下的簡單搭建 Jenkins是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。----百度百科 這是一款基於Java開發的工具。種種

linux 環境備份oracle 數據庫

備份 命令 目錄 lin 安裝目錄 su - linux 輸出 所有者 登陸linux後,進入oracle的安裝目錄下,找到bin那個目錄,進入bin目錄ls -l 看這些命令的所有者: su - oracle這時會進入這個用戶的主目錄/home/oracle,此時,可以用

將windows上面的項目拷貝到Linux環境報錯不能夠找到對應的表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'puyang.ServiceType' doesn't exist

exce 服務 inux 區分 大小 blog alt logs 就會 將一模一樣的項目從win遷移到到linux上報錯: 一開始還是以為是linux不能識別hql語句,查找資料發現是因為Liunx服務器上mysql是區分大小寫的,而本地是不區分的如:代碼是這樣寫的@En