彙編指令——轉移指令

可以修改IP或同時修改IP和CS的指令統稱爲轉移指令

1 只修改IP    段內跳轉

2 同時修改 CS和IP 段間跳轉


段內轉移:1短轉移(-128——127)   2近轉移 (-32768——32767)

8086cpu轉移指令分爲一下幾種

1 無條件轉移

2 條件轉移

3循環指令

4 過程

5 中斷


實際上 “jmp short 標號” 的功能爲 (IP) = (IP) + 8位位移

jmp near ptr 標號     的功能爲 (IP) = (IP) + 16位位移


1  16位位移=標號處的地址-jmp指令後的第一個字節的地址

2  near ptr 指明此處的位移爲16位位移,進行的段內近轉移

3  16位位移範圍爲 -32768——32767   用補碼錶示

4 16位位移由編譯程序在編譯時給出


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

指令格式   jcxz 標號 (如果(CX)=0,轉移到標號處執行,否則,什麼也不做,程序向下執行)



call和ret指令都是轉移指令


ret指令用棧中的數據修改IP的內容,從而實現近轉移

retf指令用棧中的數據修改CS和IP的內容,從而實現遠轉移


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

1  (IP) = ((SS)×16+(SP))

2  (SP)=(SP)+2

相當與  pop IP

CPU執行retf指令時,進行下面四步操作:

1  (IP) = ((SS)×16+(SP))

2  (SP)=(SP)+2

3  (CS)=((SS)×16+(SP))

4  (SP)=(SP)+2

相當於 POP  IP     POP    CS


CPU執行call指令時,進行兩步操作:

1 將當前的IP或CS和IP壓入棧中

2轉移

call指令不能實現短轉移,除此之外,call指令實現轉移的方法和jmp指令的原理相同


cal  標號   (將當前的IP壓棧後,轉到標號處執行指令)

CPU執行call指令時,

1  (SP) = (SP)-2

    ((SS)×16 +(SP))= (IP)

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


相當於  push ip    jmp near ptr  標號


call  far ptr 標號  實現是段間轉移

CPU執行此格式的call指令時,

1  (SP) = (SP)-2

    ((SS)×16 +(SP))= (CS)

  (SP) = (SP)-2

    ((SS)×16 +(SP))= (IP)

2  (CS)=標號所在的段的段地址

    (IP)=標號在段中的偏移地址

相當於

push  CS

push  IP

JMP  far  ptr  標號




MUL指令


1 相乘的兩個數 要麼都是8位,默認放在AL中,另一個放在8位reg或者內存單元中。如果都是16位,一個默認放在ax中,另一個放在16位reg或者內存中

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