計算機系統 csapp 彙編總結

2021-10-21 16:52:58 字數 3671 閱讀 1033

整數暫存器:

c語言資料型別在x86-64中的大小:

c宣告intel資料型別

彙編**字尾

大小(位元組)

char位元組b

1short字w

2int雙字l

4long四字q

8char*四字q

8float

單精度s

4double

雙精度l

8條件碼:

條件碼解釋

cf進製標誌。最近的操作使最高位產生了進製。可用來檢測無符號操作的溢位。

zf零標誌。最近的操作得出的結果為0。

sf符號標誌。最近的操作得到的結果為負數。

of溢位標誌。最近的操作導致乙個補碼溢位-正溢位或負溢位。

彙編指令:

指令同義名

效果描述

mov     s,d

d 傳送資料(複製值的形式)

movz   s,r

r 以零擴充套件進行傳送

movs   s,r

r 以符號擴充套件進行傳送

push

壓入棧pop

彈出棧lea       s,d

d 傳送資料(複製位址的形式)

inc      d

d 加1dec     d

d 減1neg     d

d 取負not      d

d 取補add      s,d

d 加sub      s,d

d 減imul     s,d

d 乘xor      s,d

d 異或or        s,d

d 或and      s,d

d 與sal       k,d

d 左移

shl       k,d

d 左移(等同於sal)

sar       k,d

d >ak

算術右移

shr       k,d

d >lk

邏輯右移

imul        s

r[%rdx]:r[%rax]

有符號全乘法

mul         s

r[%rdx]:r[%rax]

無符號全乘法

cqto        

r[%rdx]:r[%rax]

轉換為八字

idiv         s

r[%rdx]

有符號除法

div          s

r[%rdx]

無符號除法

cmp       s1,s2

比較test        s1,s2

測試賦值指令

sete         d

setz

d 相等/零

setne       d

setnz

d 不等/非零

sets         d

d 負數setns       d

d 非負數setg         d

setnle

d 大於(有符號》)

setge       d

setnl

d 大於等於(有符號》=)

setl          d

setnge

d 小於(有符號

setle        d

setng

d 小於等於(有符號<=)

seta         d

setnbe

d 超過(無符號》)

setae       d

setnb

d c超過或相等(無符號》=)

setb          d

setnae

d 低於(無符號

setbe        d

setna

d 低於或相等(有符號<=)

跳轉指令

jmp           label

1直接跳轉

jmp           *operand

1間接跳轉

je              label

jzzf

相等/零

jne            label

jnz~zf

不相等/非零

js              label

sf負數

jns            label

~sf非負數

jg              label

jnle

~(sf^of)&~zf

大於(有符號》)

jge            label

jnl~(sf^of)

大於或等於(有符號》=)

jl               label

jnge

sf^of

小於(有符號

jle             label

jng(sf^of)|zf

小於或等於(有符號<=)

ja              label

jnbe

~cf&~zf

超過(無符號》)

jae            label

jnb~cf

超過或相等(無符號》=)

jb              label

jnae

cf低於(無符號

jbe            label

jnacf|zf

低於或相等(無符號<=)

條件傳送指令

cmove      s,r

cmovz

zf相等/零

cmovne    s,r

cmovnz

~zf不相等/非零

cmovs      s,r

sf負數

cmovns    s,r

~sf非負數

cmovg      s,r

cmovnle

~(sf^of)&~zf

大於(有符號》)

cmovge    s,r

cmovnl

~(sf^of)

大於或等於(有符號》=)

cmovl      s,r

cmovnge

sf^of

小於(有符號

cmovle     s,r

cmovng

(sf^of)|zf

小於或等於(<=)

cmova      s,r

cmovnbe

~cf&~zf

超過(無符號》)

cmovae    s,r

cmovnb

~cf超過或相等(無符號》=)

cmovb      s,r

cmovnae

cf低於(無符號

cmovbe    s,r

cmovna

cf|zf

低於或相等(無符號<=)

轉移控制

call           label

過程呼叫

call           *operand

過程呼叫

ret從過程呼叫中返回

資料《深入理解計算機系統》

CSAPP 計算機系統漫遊

資訊 位 上下文 include int main 在linux中可以通過hexdump c hello.c的ascii碼表示 由於書中顯示的是十進位制,故轉換成十進位制與書中一致,例如 n 十六進製制0a 對應的10進製 10 高階語言 機器語言 為了能讓hello.c執行,每條c語言 高階語言 ...

CSAPP 1 計算機系統的漫遊

首先,儲存與計算機上的資訊都是位,計算機通過上下文判斷儲存資訊的型別 文字檔案 二進位制檔案 1.c程式格式的流轉 0 hello.c 通過預處理器 cpp 增加標頭檔案後得到hello.i 0 hello.i通過編譯器編譯 ccl 得到hello.s 匯程式設計序 0 hello.s通過彙編器 a...

計算機系統知識總結

軟考第一章講了計算機系統知識,學習到了一些和硬體相關的知識,對計算機體系結構有了乙個大概的了解。讓我認識了cpu的具體結構,大致的工作流程,了解了資料在計算機內部的表現形式。尤其是機器數,反碼補碼的創造,是靈活與智慧型的表現。下面是思維導圖 根據不同的層次定了多個系統,本節介紹了指令系統,儲存系統,...