程式的機器級表示

2021-07-14 06:19:58 字數 3076 閱讀 6097

32位和64位

instruction system architecture

程式計數器pc %eip

整數暫存器 8個每個32位

有的用來記錄狀態,有的用來儲存臨時資料,區域性變數,返回值

3.條件碼暫存器

指標都是雙字

char short long 其他4位元組

movb movw movl

%al %ah -> %ax -> %eax

%eax %ebx %ecx %edx %edi %esi %esp %ebp

imm(ea,eb,s) -> m[imm + r[ea] + r[eb] * s]

只有完整的暫存器可以()

運算元值

%eax

0x100

0x104

0x104 -> 0xab

$0x108

0x108

(%eax)

0xff

4(%eax)

0xab

9(%eax,%edx)

0x11

260(%ecx,%edx)

->0x13

0xfc(,%ecx,4)

0xff

(%eax,%edx,4)

0x11

分為mov,movs(sign),movz(zero)

然後ia32規定不能直接儲存器到儲存器,中間必須經過乙個暫存器。

1.載入有效位址 2.一元操作和二元操作 3.移位操作

1. load effective address = lea 就是取位址 第二個位置必須是暫存器

2. inc x x可以是暫存器也可以是儲存器

3. sub s,d d <- d-s d是暫存器或者儲存器

imull s r[%edx]:r[%eax] <- s * r[%eax] 有符號的

divl s r[%edx] <- r[%edx]:r[%eax] mod s

r[%eax] <- r[%edx]:r[%eax] / s

movl

%eax, (%esp)

movw

(%eax),%dx

movb

$0xff, %bl

movb

(%esp,%edx,4),%dh

pushb->pushl$0xff 棧只能4個位元組4個位元組存放

movw

%dx, (%eax)

popl

%edi

movb $0xf, (%bl)

不完整不能暫存器

movl %ax,(%esp)

l是4, %ax是2

movw (%eax),4(%esp)

不能都是記憶體位址

movb %ah,%sh

沒有%sh

movl %eax, $0x123

不可以吧

movl %eax,%dx

dx是2,l是4

movb %si,8(%ebp)

b是1,%si是4

src_t

dest_t

指令int

intmovl %eax, (%edx)

char

intmovzbl %eax, (%edx) -> ?

char

unsigned

movzbl %eax, (%edx) -> ?

unsigned char

intmovzbw %eax, (%edx)->movzbl %eax, (%edx)

intchar

movb %al,(%edx)

unsigned

unsigned char

movb %al, (%edx)

unsigned

intmovl %eax, (%edx)

void f(int *xp,int *yp,int *zp) {

int tx = *xp;

int ty = *yp;

int tz = *zp;

*yp = tx;

*zp = ty;

*xp = tz;

指令

效果leal 6(%eax),%edx

6 + x

leal (%eax,%ecx),%edx

x + y

leal (%eax,%ecx,4),%edx

x + 4 * y

leal 7(%eax,%eax,8),%edx

9 * x + 7

leal 0xa(,%ecx,4),%edx

4 * y + 0xa

leal 9(%eax,%ecx,2),%edx

x + 2 * y + 9

指令目的

值addl %ecx,(%eax)

0x100

0x100

subl %edx,4(%eax)

0x104

0xa8

imull $16,(%eax,%edx,4)

0x10c

0x101->0x110

incl 8(%eax)

0x108

0x14

decl %ecx

%ecx

0x0subl %edx,%eax

%eax

0xfd

shll 2,

eaxsarl%cl,%eax

int t1 = y ^ x;

int t2 = (y ^ x) * 8;

int t3 = ~t3;

int t4 = ~(y^x * 8) - z

清零movl $0,%edx

movl 8(%ebp) %eax

movl 0 %edx

divl 12(%ebp)

movl %eax 4(%esp)

movl %edx (%esp)

程式的機器級表示

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

程式的機器級表示

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

程式的機器級表示(二)

以上操作,我們只考慮了直線 的行為,即指令按順序執行。但是還有一些 比如條件語句 迴圈語句和分支語句,要求有條件的執行,這時需要根據資料測試的結果來改變條件碼,結合跳轉指令決定操作執行的順序。條件傳送指令 實現條件操作的傳統方法是利用控制的條件轉移。當條件滿足時,程式沿著一條執行路徑進行,而當條件不...