能夠使程式的執行流程發生改變的指令
1)無條件轉移jmp
有以下幾種型別操作:
⑴ 段內直接短轉移
格式:jmp short opr
操作: (ip)←(ip) + data8 //data8是乙個位元組的補碼數 範圍:-128+127
⑵ 段內直接近轉移
格式: jmp near ptr opr
操作:(ip)←(ip)+data16 //data16是兩個位元組的補碼數 範圍:-32768 +32767
⑶ 段內間接轉移
格式: jmp word ptr opr
操作: (ip)←暫存器或儲存器運算元
⑷ 段間直接轉移
格式:jmp far ptr opr
⑸ 段間間接轉移
格式: jmp dword ptr opr
說明:
① 在組合語言中通常使用標號表示要轉移到的位置。
② 使用該指令,可以使程式流程改變到任何目標位置。
2)條件轉移jcc
根據判斷條件是否成立決定是否轉移。按照判斷條件的不同分為以下型別:單個標誌、無符號數判斷、有符號數判斷、cx暫存器。
條件轉移都是段內直接短轉移,即(ip)=(ip)+data8型別的轉移。
指令格式:jcc short_label
「cc」表示條件
⑴ 判斷單個標誌
zf: jz(je),jnz(jne)
sf: js,jns
of: jo,jno
pf: jp,jnp
cf: jc,jnc
⑵ 判斷無符號數的大小
助記符中的意義: a:大於,b:小於,e:等於
jb(jnae),jnb(jae)同jc,jnc,
jbe(jna),jnbe(ja): 判斷cf and zf
⑶ 判斷有符號數的大小
助記符中的意義: g:大於,l:小於,e:等於
jl(jnge): (sf) (of) 且 (zf)=0
jnl(jge): (sf)= (of)
jle(jng): (sf) (of) 或 (zf)=1
jnle(jg): (sf)= (of) 且 (zf)=0
使用比較大小的指令時,必須區分是有符號數還是無符號數。
⑷ 判斷cx暫存器
2,迴圈控制指令
迴圈指令的轉移也都是段內直接短轉移,即(ip)←(ip)+data8型別的轉移。
loop 迴圈
判斷cx是否等於零,不等於零則迴圈
loopz(loope) 當為零或相等時迴圈
判斷cx是否等於零,不等於零且zf=1則迴圈
loopnz(loopne) 當不為零或不相等時迴圈
判斷cx是否等於零,不等於零且zf=0則迴圈
說明:
① 迴圈指令不影響狀態標誌。
② 如果目標位置的位移量超出data8所能夠表示的範圍,則需要用jmp輔助來完成迴圈。
3,過程呼叫與返回指令
如果有一段程式在不同的地方反覆出現,則可以將這些程式設計稱為過程,相當於子程式,當需要時即可呼叫。
1)過程呼叫指令call(call a procedure)
說明:由匯程式設計序自動匹配為某種定址方式。
ret 子程式返回指令
用法:ret
段內返回:(ip)←((sp)+1:(sp)),(sp)←(sp)+2
段間返回:(ip)←((sp)+1:(sp)),(sp)←(sp)+2,
(cs)←((sp)+1:(sp)),(sp)←(sp)+2
匯程式設計序自動匹配為段內或段間的返回
注意:
一般data16應該是乙個偶數,表示堆疊指標向下移動的位元組數。這是因為堆疊操作都是字操作。
4,中斷指令
將在第七章中進行討論。
8086 8088指令系統詳解之(4)串操作
串操作指令的特徵是對資料塊 字串或數值串 進行操作,並且其中部分指令可以兩個運算元同時是儲存器運算元。movs move string 串傳送 cmps compare string 串比較 scas scan string 串掃瞄 lods load from string 從串中取資料 stos...
八 指令系統
1,指令系統和指令格式 1 指令是要求計算機執行特定操作的命令,一條指令對應一種特定操作,比如加,減,轉移,位移等 2 指令系統是計算機所能執行的全部指令的集合,是計算機硬體和軟體之間的橋梁,是組合語言程式設計的基礎 3 計算機指令以二進位制的形式存放在儲存器中,用二進位制編碼形式表示的指令成為機器...
8086指令系統資料傳送指令
1.一般傳送指令mov 格式 mov 目標運算元 源運算元 功能 mov主要實現內容就是各種傳送 目標運算元可以為暫存器運算元 儲存器運算元 源運算元可以為立即數運算元 暫存器運算元 儲存器運算元 根據彙編規定指令的兩個運算元不能同時為儲存器運算元所以有共有5種傳送操作 1 立即數到暫存器 例 mo...