彙編學習記錄之十一

資料來源:彙編語言第二版-王爽

1.轉移的目的地址在指令中的jmp指令

前面講的jmp指令,其對應的機器指令中並沒有轉移的目的地址,而是相對於當前ip的轉移位移。

指令'jmp far ptr 標號'實現的是段間轉移,又稱爲遠轉移。功能如下:

(cs)=標號所在段的段地址;(ip)=標號在段中的偏移地址。

far ptr 指明瞭指令用標號的段地址和偏移地址修改cs和ip。

2.轉移地址在寄存器中的jmp指令

指令格式:jmp 16 位寄存器

功能:(ip)=(16位寄存器)

3.轉移地址在內存中的jmp指令

轉移地址在內存中的jmp指令有兩種格式:

(3.1)jmp word ptr 內存單元地址(段內轉移)

功能:從內存單元地址處開始存放着一個字,是轉移的目的地址的偏移位移。

內存單元地址可用尋址方式的任一格式給出。

比如,下面的指令:

mov ax, 0123H
mov ds:[0], ax
jmp word ptr ds:[0]

執行後,(ip)=0123H。

又比如,下面的指令:

mov ax, 0123H
mov [bx], ax
jmp word ptr [bx]

執行後,(ip)=0123H。

(3.2)jmp dword ptr 內存單元地址(段間轉移)

功能:從內存單元地址開始處存放着兩個字,高地址處的字是轉移的目的段地址,低地址處的字是轉移的目的偏移地址。

(cs)=(內存單元地址+2)

(ip)=(內存單元地址)

內存單元地址可用尋址方式任一格式給出。

比如,下面的指令:

mov ax, 0123H
mov ds:[0], ax
mov word ptr ds:[2], 0
jmp dword ptr ds:[0]

執行後,(cs)=0,(ip)=0123H,cs:ip指向0000:0123。

又比如,下面的指令:

mov ax, 0123H
mov [bx], ax
mov word ptr [bx+2], 0
jmp dword ptr [bx]

執行後,(cs)=0,(ip)=0123H,cs:ip指向0000:0123。

4.jcxz指令

jcxz指令爲有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的地址。

對ip的修改範圍都爲:-128~127。

指令格式:jcxz 標號(如果(cx)=0,轉移到標號處執行。)

操作:當(cx)=0時,(ip)=(ip)+8位位移:

8位位移='標號'處的地址-jcxz指令後的第一個字節的地址;

8位位移的範圍爲-128~127,用補碼錶示;

8位位移由編譯程序在編譯時算出。

當(cx)≠0時,什麼也不做(程序向下繼續執行)。

我們從jcxz的功能可以看出,指令'jcxz 標號'的功能相當於:if((cx)==0) jmp short 標號。

 

 

有錯誤請指正,謝謝!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章