63.一般來說,需要暫存的資料,我們都應該使用棧.
64.offset是由編譯器處理的符號,它的功能是取得標號的偏移位址.
65.ret和retf指令
ret指令用棧中的資料,修改ip的內容,從而實現近遷移
retf指令用棧中的資料,修改cs和ip的內容,從而實現遠遷移.實際上乙個是段內遷移,乙個則可用於段之間的遷移.
66.cpu執行ret指令時,會進行下面的操作:
a) (ip)=((ss)*16+sp)
(sp)=(sp)+2
67.cpu執行retf指令時,進行下面的操作:
a) (ip)=((ss)*16+sp)
b) (sp)=(sp)+2
c) (cs)=((ss)*16+(sp))
d) (sp)=(sp)+2
68.call指令:cpu執行call指令時進行兩步操作:
a) 將當前的ip或cs和ip壓入棧中.
b) 轉移
69.div除法和mul乘法
adc:帶進製的加法指令
sbb:帶進製的減法指令
cmp:比較指令,相當於減法,不儲存結果,但是影響標誌位.
70.最後乙個知識點.包含多個段的程式.
end:除了通知編譯器結束外,還可以通知編譯程式的入口在什麼地方.
資料,棧和**放到不同的段中.
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh
data ends
stack segment
dw 0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16 //設定棧頂
mov ax,data
mov ds,ax //ds指向data段
mov bx,0 //ds:bx指向第乙個單元
mov cx,8
s: push [bx]
add bx,2
loop s //所有資料入棧
mov bx,0
mov cx,8
s0: pop [bx]
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
注釋:a)定義多個段的方法:和普通的定義段沒有區別,只是不同的段需要取不同的名字.
b)對段位址的引用,在程式中,段名就相當於乙個標號,它代表了段位址.
mov ax,data
乙個段中的段位址可由段名代表,偏移位址就要看在段中的位置.
c)**段,資料段和棧段完全是自己設定的,即設定相應的暫存器.
想更深入的學習就需要繼續研究...over...!
組合語言學習筆記
學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...
組合語言學習筆記
cs ip是指向程式執行的位置 code segment ds 儲存記憶體中取資料的位址,data segment ss sp是指向堆疊的位置 stack segment cx 裡儲存的是loop執行的標誌 loop執行時,cx cx 1,若此時cx裡值為0,則跳出loop,否則繼續loop 初始 ...
組合語言學習筆記
編譯下面的程式,生成列表檔案,觀察標號在機器碼中變成了什麼?小組中的同學都說一說,說出你看到了什麼,說出你的疑問,讓小夥伴們一起解決。下面是程式 這個程式的功能沒有意義,只用於觀察程式中的標號 assume cs codesg,ds datasg datasg segment a db 1,2,3,...