組合語言學習筆記(十)call和ret指令配合使用

2021-06-22 19:27:56 字數 889 閱讀 2489

1.ret和retf

ret:指令用棧中的資料,修改ip的內容,從而實現了近轉移

cpu執行ret指令時,進行下面兩步操作:

1)(ip)=((ss)*16+(sp))

2)(sp)=(sp)+2

相當於pop ip

retf:用棧中的資料,修改cs和ip的內容,從而實現遠轉移

1)(ip)=((ss)*16+(sp))

2)(sp)=(sp)+2

3)(cs)=((ss)*16+(sp))

4)(sp)=(sp)+2

相當於pop ip pop cs

call 標號:(相比jmp只是將當前的的位置儲存到棧)

操作如下:

1)(sp)=(sp)-2

((ss)*16+(sp))=(ip)

2)(ip)=(ip)+16位位移

call far ptr 標號:遠轉移

1)(sp)=(sp)-2

((ss)*16+(sp))=(cs)

(sp)=(sp)-2

((ss)*16+(sp))=(ip)

2)(cs)=標號所在的段位址

(ip)=標號所在的偏移位址

call 16位暫存器

(sp)=(sp)-2

((ss)*16+(sp))=(ip)

(ip)=(16位暫存器)

相當於:

push ip

jmp 16位暫存器

call word ptr 記憶體單元位址    近轉移

call dword ptr 記憶體單元位址    遠轉移

mul指令:乘法指令

注意:相乘兩數要麼都是8位,要麼都是16位

8位結果:ax中

16位結果:dx高位和ax地位中

組合語言學習筆記

學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了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,...