通用暫存器
eax,ebx,ecx,edx,esi,edi,esp,ebp, 它 們 的低 16 位就是 8086 的
ax,bx,cx,dx,si,di,sp,bp,它們的含義如下:
eax:累加器
ebx:基址暫存器(base)
ecx:計數器
edx:資料暫存器(data)
ebp:基址指標暫存器(base)
esp:堆疊指標暫存器(stack)
32位系統前面多了『e』,16位系統沒有『e』。
ax的高8位ah,低8位al
dx的高8位dh,低8位dl
2.pushf及popf
pushf壓入標誌暫存器,popf彈出並存入標誌暫存器
pusha及popa
pusha壓入所有一般用途暫存器,popa彈出並存入所有一般用途暫存器
pushad及popad
pushad壓入所有擴充套件暫存器,popad彈出並存入所有擴充套件暫存器
3.mov ax,[1234h] 表示將0x1234位址處的內容存入ax暫存器
mov [1234h],word 2*33 將2*33存入記憶體0x1234位址處
lea ax, total 將total的偏移位址傳送到ax
4.push ax 壓入16位的暫存器ax
push eax 壓入32位的暫存器eax
push word [total] 壓入16位的記憶體total內容
push dword [total] 壓入32位的記憶體total內容
push byte 12 壓入8位的立即數12
push word 1234h 壓入16位的立即數1234h
push dword 12345678h 壓入32位的立即數12345678h
5.int 8位立即數 int指令執行軟體中斷
依標誌及cx的條件轉移指令表:
jz 當zf=1時轉移
jnz 當zf=0時轉移
js 當sf=1時轉移
jns 當sf=0時轉移
jo 當of=1時轉移
jno 當of=0時轉移
jc 當cf=1時轉移
jnc 當cf=0時轉移
jp(jpe) 當pf=1時轉移
jnp(jpo) 當pf=0時轉移
jcxz 當cx=0時轉移
6.cmp命令:
cmp ax, bx 暫存器ax與暫存器bx比較
cmp ax, [total] 暫存器ax與變數total比較
cmp ax, 0 暫存器ax與立即數0比較
cmp [total], dx 變數total與暫存器dx比較
cmp [total], 0 變數total與立即數0比較
有符號整數比較的條件轉移指令表:
jl(jnge) 小於時轉移
jg(jnle) 大於時轉移
jle(jng) 小於或等於時轉移
jge(jnl) 大於或等於時轉移
je 等於時轉移
jne 不等於時轉移
無符號整數比較的條件轉移指令表:
jb(jnae) 低於時轉移
ja(jnbe) 高於時轉移
jbe(jna) 低於或等於時轉移
jae(jnb) 高於或等於時轉移
je 等於時轉移
jne 不等於時轉移
7.無條件轉移指令jmp
jmp label
jmp short label
跳至指定位址開始執行程式
迴圈指令loop:
label:
;需要迴圈執行的指令
loop label
8.label:
dec cx
jg label
將cx的值減去1,如果cx的值大於0,則跳轉到label執行
9.加減法:
add 第一運算元,第二運算元 加法
sub 第一運算元, 第二運算元 減法
add al, byte[b] 將變數b的內容加入暫存器al
sub al, byte[b] 將暫存器al減去變數b的值
dec 運算元 對運算元減一
inc 運算元 對運算元加一
乘法:mul 運算元 mul針對無符號整數的相乘
imul運算元 imul針對帶符號整數的相乘
8位運算元的值與al相乘後其乘積存入ax中。
16位運算元的值與ax相乘後其乘積存入dx:ax中。
32位運算元的值與eax相乘後其乘積存入edx:eax中。
除法:div 運算元
idiv運算元
ax的值除以8位運算元的值,其商存在al上,其餘數存於ah中。
dx:ax的值除以16位運算元的值,其商存於ax中,其餘數存於dx中。
edx:eax的值除以32位運算元的值,其商存於eax,其餘數存於edx中。
10. 每次cpu執行都要先讀取eip暫存器的值,然後定位eip指向的記憶體位址,並且讀取彙編指令,最後執行。執行後 eip的值=後面要跳轉的位址。
11. 彙編過程引數傳遞的方式:暫存器,變數,堆疊,利用call後續區四種方式傳參。
test eax, eax
je 00401083
test指令操作是目的運算元和源運算元按位邏輯「與「
運算結果不送回目的運算元
然後根據結果設定sf、zf、和pf標誌位,並將cf和of
標誌位清零。
而je是當zf=1時跳轉。
即,當eax的值等於0時跳轉。
因此說,這裡的test就是檢測eax的值是不是0
12. xor eax,eax和mov eax,0兩者的作用沒有區別,都是讓eax的值為0,但是xor eax,eax 指令為2位元組,mov eax,0 指令為5個位元組。相比而言,前面指令更能節省空間。
xor eax,eax是讓eax與eax進行異或操作。
13.彙編過程末尾ret 4*n的含義:先執行ret,將堆疊頂函式返回位址取出存入eip,執行函式返回操作,然後將過程的n個引數彈出堆疊,esp=esp+4*n,堆疊指標恢復到呼叫call之前的狀態。
14.位運算:
and 第一運算元,第二運算元
or 第一運算元,第二運算元
xor 第一運算元,第二運算元
not 運算元
test第一運算元,第二運算元
test指令檢查第一運算元,看看某個指定的位是否被開啟。test的結果不會改變任何運算元的值,與and的操作結果相同,只是沒有將結果存回第一運算元而已。
15.改變位位置:
shl 左移
shr 右移
sal 算術左移
sar 算術右移
rol 迴圈左移
ror 迴圈右移
rcl 帶進製迴圈左移
rcr 帶進製迴圈右移
彙編學習記錄之六
1.源程式例子 assume cs codesg codesg segment start mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21h codesg ends end start在組合語言源程式中,包含兩種指令...
彙編學習記錄之八
1.機器指令處理的資料所在位置 絕大部分機器指令都是進行資料處理的指令,處理大致可以分為三類 讀取 寫入 運算。在機器指令這一層來講,並不關心資料的值是多少,而關心指令執行前一刻,它將要處理的資料的所在位置。指令執行前,所要處理的資料可以在三個地方 cpu內部 記憶體 埠。2.組合語言中資料位置的表...
彙編學習記錄之十
1.轉移指令的原理 可以修改ip,或者同時修改cs和ip的指令統稱為轉移指令。概括地講,轉移指令就是可以控制cpu執行記憶體中某處的 的指令。8086cpu的轉移行為有以下幾類 1.1 只修改ip時,稱為段內轉移,比如 jmp ax 1.2 同時修改cs和ip時,稱為段間轉移,比如 jmp 1000...