組合語言學習筆記 6

2021-05-10 18:52:46 字數 1654 閱讀 4365

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,...