組合語言第三版(王爽著) 第九章 轉移指令的原理

2021-10-01 07:59:44 字數 2386 閱讀 4795

可以修改ip或同時修改ip和cs的指令統稱為轉移指令。概括地講,轉移指令就是可以控制cpu執行記憶體中某處**的指令。

只修改ip是段內轉移,jmp ax;同時修改cs和ip是段間轉移,jmp 1000:0

由於轉移指令對ip的修改範圍不同,段內轉移又分為短轉移近轉移

短轉移ip的修改範圍 -128~127

近轉移ip的修改範圍 -32768~32767

8086cpu的轉移指令分為以下幾類。

1.無條件轉移指令(如:jmp)

2.條件轉移指令

3.迴圈指令(如:loop)

4.過程

5.中斷

將s處的一條指令複製到s0處

assume cs:codesg

codesg segment

s:mov ax,bx

mov si,offset s

mov di,offset s0

mov ax,cs:[si]

mov cs:[di],ax

codesg ends

end s

jmp short 標號 短轉移

jmp near ptr 標號 近轉移

這種格式實現的是段內短轉移。-128-127

轉移指令結束後,cs:ip指向標號處的指令

assume cs:codesg

codesg segment

start:mov ax,0

mov bx,0

jmp short s

add ax,1

s:inc ax

code ends

end start

jmp short s指令的讀取和執行

1.cs和ip指向jmp short s所對應的的機器碼 eb03

2.讀取指令eb03進入指令緩衝區

3.cs和ip指向jmp short s 的下一條指令 add ax,1

4.cpu執行指令eb03

5.csip指向inc ax

jmp far ptr 標號指令格式:jmp 16位的reg

功能 :(ip)= 16位reg

1.jmp word ptr 記憶體單元位址段內轉移

偏移位址

2.jmp dword ptr 記憶體單元位址段間轉移

功能:從記憶體單元位址處開始存放著兩個字,高位址處的字是目的位址段位址

低位址是目的偏移位址

db 0,0,0,0,0,0

bx,cs

段位址 0006

偏移位址 00be

jcxz 標號

jcxz是有條件轉移指令,所有的有條件轉移指令都是短轉移。包含的是轉移的位移,而不是目的位址

補全程式設計,利用jcxz指令,實現在記憶體2000h段中查詢第乙個值為0的位元組,找到後,將它的偏移位址儲存在dx中

assume cs:code

code segment

start:mov ax,2000h

mov ds,ax

mov bx,0

s:mov cl,[bx]

mov,ch,0

jcxz ok

inc bx

jmp short s

ok:dx,bx

mov 4c00h

int 21h

code ends

end start

loop 標號 ((cx)=(cx)-1,如果(cx)≠0,轉移到標號處執行

assume cs:code

code segment

start:mov ax,2000h

mov ds,ax

mov bx,0

s:mov cl,[bx]

mov,ch,0

inc cx

inc bx

loop s

ok:dec bx

mov dx,bx

mov 4c00h

int 21h

code ends

end start

為了方便程式在記憶體中的浮動裝配

段間:修改cs和ip

段內:修改ip 短轉移**-128~127** 近轉移-32768~32767

《組合語言》(第三版)王爽著 預備

預備 1.2.十進位制 位的概念 數軸表示數字的方式 3.二進位制 4.十進位制轉換成二進位制 5.十進位制快速轉換成二進位制 6.十六進製制 7.十進位制轉換成十六進製制 8.十進位制快速轉換成十六進製制 9.十六進製制和二進位制之間快速互相轉換 10.反過來思考的方式 組合語言是一門低階語言,與...

《組合語言(第三版)》王爽,實驗九

不知道為什麼,在win7下用的emu8086,顯示會錯位,到不了中間位置 在網上找了下別人的 發現即使是在別人那裡能正常顯示在中間位置,複製到我這裡都會顯示為上圖所示的樣子。下面是 定義資料段的時候為了後面不用將ascii碼和屬性分開讀取,就定義成如下這樣比較繁瑣的形式了。其實做的時候第一時間沒想到...

組合語言 (王爽著第三版)實驗二

實驗前要求我們將書本p74的程式段按理論分析,將結果進行填空。之後用debug,將該程式段寫入記憶體,逐條執行之後,根據指令執行後的實際執行的結果填空如下。mov ax,0021 mov ax ffff mov ds ax mov ax 2200 mov ss ax mov sp 0100 mov ...