三 程式的轉換及機器級表示

2021-10-10 11:43:40 字數 2163 閱讀 9272

2.ia-32常用指令

三、ia-32下 c語言程式的機器級表示

ia-32是intel的32位指令集體系結構(ia32 isa).

(1)資料型別

資料型別與長度利用彙編指令助記符字尾區分,以下為整數的ia-32運算元型別對照表:

c語言型別

intel運算元型別與字尾

儲存長度(位)

(unsigned)char

位元組/b

8(unsigned)short

字/w16

(unsigned)int

雙字/l

32(unsigned)long int

雙字/l

32(2)暫存器

暫存器主要用來暫時存放運算中的資料,這裡主要介紹定點暫存器.

[1] 8個通用暫存器: 主要用來存放運算元

作用暫存器

31 ------ 16

15 -----7----- 0

累加器寄存

eaxah-(ax)-al

基址寄存

ebxbh-(bx)-bl

計數寄存

ecxch-(cx)-cl

資料寄存

edxdh-(dx)-dl

棧指標esp

sp棧基址指標

ebpbp

源變址暫存器

esisi

目標變址暫存器

edidi

[2] 2個專用暫存器(32位或16位):

條件標誌

含義說明

of溢位標誌(帶符號)

高位相同且與結果不同則溢位,of=1

sf符號標誌(帶符號)

負數時,sf=1

zf零標誌

結果為0,zf=1

cf進/借位標誌(不帶符號)

cf=sub⊕c , 有進(借)位則cf=1

[3] 6個段暫存器(16位)

(3)定址方式

定址方式就是得到運算元或者運算元位址的方式.

(1)傳送指令

[1] 通用資料傳送指令

[2] 位址傳送指令

[3] 輸入輸出指令:累加器與i/o端將資料傳送(in,out).

[4] 標誌傳送指令:專門對標誌暫存器操作.

(2)定點算術運算指令

[1] 加/減運算指令

[2] 增/減運算指令

[3] 取負運算指令

[4] 比較運算指令

[5] 乘/除運算指令

乘運算指令:

運算過程:

mul/imul:只給出乙個運算元src(儲存器或者暫存器運算元),另乙個源運算元在累加器al/ax/eax中,相乘結果存放在ax(ah-al)/dx-ax/edx-eax中–>兩個n位相乘,結果取2n位

imul:給出兩個運算元dst(暫存器運算元)、src(儲存器或者暫存器運算元),結果存放在dst中–>兩個n位相乘,結果取n位

imul:給出三個運算元reg(暫存器運算元)、src(儲存器或者暫存器運算元)、imm(立即數),src和imm相乘,結果存在reg中–>兩個n位相乘,結果取n位

標誌位取值:

對於mul指令:高n位全0則of=cf=0,否則of=cf=1。

對於imul指令:高n+1位全0(乘積正數)或全1(乘積負數)則of=cf=0,否則of=cf=1(cpu能處理截斷前的2n位)。

除運算指令:

(3)按位運算指令

[1]邏輯運算指令

[2]移位指令

(4)控制轉移指令

ia-32中指令執行順序由cs和eip確定,可以改變cs和eip或僅僅改變eip來實現控制程式執行的轉移

[1]無條件轉移指令

[2]條件轉移指令

[3]條件設定指令

[4]條件傳送指令

[5]呼叫和轉移指令(用於過程呼叫)

跳轉方式與jmp指令類似。

[6]中斷指令(具體在7、8章)

(1)過程呼叫的步驟(過程p呼叫過程q)

p過程

q過程

原理同上

程式的機器級表示

三種 立即數 常數值,在att格式的彙編 中,書寫格式是 整數,如 123 0x12 暫存器 如 32位的 eax 16位的 ax 8位的 al 儲存器引用 mov 同等傳送,即倆者的大小一致 如 movb byte,movew word,movel longword dw movs movz 不同...

程式的機器級表示

32位和64位 instruction system architecture 程式計數器pc eip 整數暫存器 8個每個32位 有的用來記錄狀態,有的用來儲存臨時資料,區域性變數,返回值 3.條件碼暫存器 指標都是雙字 char short long 其他4位元組 movb movw movl ...

程式的機器級表示

本文對 深入理解計算機系統 第三版 中第三章 程式的機器級表示 中的部分內容進行了整理,以方便日後查閱。目錄 1.整數暫存器 2.運算元 3.資料傳送指令 mov類。4.壓入和彈出棧資料 push操作和pop操作 5.算術和邏輯操作 6.條件碼 7.比較和測試指令 cmp和test 8.set指令 ...