彙編學習 NO5

2021-05-23 05:12:52 字數 1396 閱讀 5127

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

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

3.可以修改ip,或同時修改cs和ip的指令統稱為轉移指令

4.只修改ip時,稱為段內轉移;同時修改cs和ip時.稱為段間轉移

5.由於轉移指令對ip修改範圍不同,段內轉移又分為:①短轉移 ②.近轉移

6.8086cpu的轉移指令分為:     ①.無條件轉移指令

②.條件轉移指令

③.迴圈指令

④.過程

⑤.中斷

7.offset:取得標號的偏移位址

8.jmp為無條件轉移指令,可以修改ip,也可以同時修改cs和ip,jmp指令要給出兩個資訊:

①.轉移的目的位址

②.轉移的距離

9.jmp short 標號(轉到標號處執行指令) :段內短轉移,它對ip的修改範圍為-128~127,轉移指令結束後,cs:ip應該向指向標號處的指令

10.cpu在執行jmp指令的時候並不需要轉移的目的位址,cpu不需要目的位址就可以對ip的修改.

11."jmp short 標號"的功能為:(ip)=(ip)+8;執行過程:

①.8位位移=標號處的位址-jmp指令後的第乙個位元組的位址

②.short表明此處的位移是8位移

③.8位位移的範圍是-128~127

④.8位位移由編譯程式在編譯時算出

12."jmp near ptr 標號":表示的段內近轉移

13."jmp far ptr 標號":表示的是段間轉移,又稱為遠轉移,段內轉移稱為近轉移

14."jmp word ptr 記憶體單元位址":段內轉移,功能:從記憶體單元位址處開始存放著乙個字,是轉移目的偏移位址

15."jmp dword ptr 記憶體單元位址":段間轉移,從記憶體單元位址處開始存放著兩個字,高位址處的字是轉移的目的段位址,位址處是轉移的目的偏移位址

16.jcxz : 為有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址,對ip的修改範圍是-128~127

if((cx)==0)  jmp short 標號

17.loop指令為迴圈指令,所有的迴圈指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址,對ip的修改範圍為:-128~127,具體操作: ①.(cx)=(cx)-1

②.如果(cx)!=0,(ip)=(ip)+8位位移

loop的標號即為:(cx)--  if ((cx)!=0) jmp short 標號

18.       jmp short 標號 / jmp near ptr 標號 / jcxz 標號  /loop 標號等幾種彙編指令,它們對ip的修改是根據轉移目的位址和轉移起始位址之間的位移來進行的,在它們對應的機器碼中不包含轉移的目的位址,而包含的是到目的位址的位移.

彙編學習 5

1.統計字串長度,將結果按十六進製制字串格式輸出 要求 使用重複字首和條件設定指令 char s 23 81 char len 81 printf s scanf s s 23 asm printf s的長度為 十六進製制 s h n len 子程式s len 功能 獲取字串長度 返回值 eax 字...

golang開發筆記No 5

下面這段 能否編譯通過?如果可以,輸出什麼?package main import fmt const x iota y z zz k p iota func main 結果 0 2 zz zz 5 解析 iota是golang語言的常量計數器,只能在常量的表示式中使用。iota在const關鍵字出...

彙編基礎學習5

文章 http www.mcany.cn article 280.htm 博主 沒落的殘陽 今天我給大家來講解下我們記憶體中資料的儲存以及訪問。這節課的基礎也是非常重要的。因為80386的資料位址線是32根,所以它一次可以傳送資料是4個位元組。所以我們記憶體單元是按照4個位元組來對齊的。用高階語言的...