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