8086指令系統(tǒng)---控制轉(zhuǎn)移指令(一)
條件轉(zhuǎn)移指令是在滿足了規(guī)定的條件后才控制程序轉(zhuǎn)移的一類指令,8086的條件轉(zhuǎn)移指令總結(jié)在表3.4中。
所有條件轉(zhuǎn)移指令都是短轉(zhuǎn)移指令,轉(zhuǎn)移的目標(biāo)地址必須在當(dāng)前IP地址的-128至+127字節(jié)范圍之內(nèi),因此條件轉(zhuǎn)移指令是2字節(jié)指令。
計(jì)算轉(zhuǎn)向地址的方法和無條件短轉(zhuǎn)移指令是一樣的,看例3.40的反匯編代碼。
例3.40程序中的"JNZ AGAIN"匯編成"JNZ 000D",000D是標(biāo)號AGAIN的地址,指令"JNZ 000D"的機(jī)器代碼是75FA,75是操作碼,F(xiàn)A是位移量。當(dāng)CPU讀取JNZ指令后,IP寄存器自動加2(JNZ的指令長度)指向了下一條指令(MOV),此時(shí)IP的當(dāng)前值是0013。計(jì)算轉(zhuǎn)向地址時(shí),(IP)當(dāng)前+位移量 = 0013+FA = 0013+FFFA = 000D,這正是AGAIN的偏移地址。實(shí)際上FA是-6的補(bǔ)碼,8位的FA與16位的0013相加時(shí),F(xiàn)A符號擴(kuò)展成為FFFA,相加的加結(jié)果為000D。
分類 | 指 令 | 轉(zhuǎn) 移 條 件 | 說 明 |
(Ⅰ) | JZ/JE | ZF=1 | 為零/相等, 則轉(zhuǎn)移 |
JNZ/JNE | ZF=0 | 不為零/不相等, 則轉(zhuǎn)移 | |
JS | SF=1 | 為負(fù), 則轉(zhuǎn)移 | |
JNS | SF=0 | 為正, 則轉(zhuǎn)移 | |
JO | OF=1 | 溢出, 則轉(zhuǎn)移 | |
JNO | OF=0 | 不溢出, 則轉(zhuǎn)移 | |
JP | PF=1 | 奇偶位為1, 則轉(zhuǎn)移 | |
JNP | PF=0 | 奇偶位為0, 則轉(zhuǎn)移 | |
JC | CF=1 | 進(jìn)位位為1, 則轉(zhuǎn)移 | |
JNC | CF=0 | 進(jìn)位位為0, 則轉(zhuǎn)移 | |
(Ⅱ) | JB/JNAE/JC | CF=1 | 低于/不高于等于, 則轉(zhuǎn)移 |
JNB/JAE/JNC | CF=0 | 不低于/高于等于, 則轉(zhuǎn)移 | |
JBE/JNA | (CFZF)=1 | 低于等于/不高于, 則轉(zhuǎn)移 | |
JNBE/JA | (CFZF)=0 | 不低于等于/高于, 則轉(zhuǎn)移 | |
(Ⅲ) | JL/JNGE | (SFOF)=1 | 小于/不大于等于, 則轉(zhuǎn)移 |
JNL/JGE | (SFOF)=0 | 不小于/大于等于, 則轉(zhuǎn)移 | |
JLE/JNG | ((SFOF)ZF)=1 | 小于等于/不大于, 則轉(zhuǎn)移 | |
JNLE/JG | ((SFOF)ZF)=0 | 不小于等于/大于, 則轉(zhuǎn)移 | |
(Ⅳ) | JCXZ | (CX)=0 | CX的內(nèi)容為0, 則轉(zhuǎn)移 |
注:(Ⅰ)根據(jù)條件碼的值轉(zhuǎn)移 (Ⅱ)比較兩個(gè)無符號數(shù),根據(jù)比較的結(jié)果轉(zhuǎn)移
(Ⅲ)比較兩個(gè)帶符號數(shù),根據(jù)比較的結(jié)果轉(zhuǎn)移 (Ⅳ)根據(jù)CX寄存器的值轉(zhuǎn)移
1050:0003 8ED8 MOV DS,AX
1050:0005 B90500 MOV CX,0005
1050:0008 BB0000 MOV BX,0000
1050:000D 0207 AGAIN: ADD AL,[BX]
1050:000F 43 INC BX
1050:0010 49 DEC CX
1050:0011 75FA JNZ 000D
1050:0013 A20500 MOV [0005],AL
1050:0016 B44C MOV AH,4C
1050:0018 CD21 INT 21
例假設(shè)程序進(jìn)行兩個(gè)帶符號數(shù)的比較,并根據(jù)比較結(jié)果轉(zhuǎn)移,其中(AL)=80H,(BL)=01,請指出下面 兩組指令的轉(zhuǎn)向地址。
?、?CMP AL,BL ?、?CMP AL,BL
JL XY JB XY
答:⑴ 轉(zhuǎn)向目標(biāo)地址XY;⑵不能實(shí)現(xiàn)轉(zhuǎn)移。
執(zhí)行CMP指令時(shí),(AL)-(BL)=80-01=7F,條件碼設(shè)置為:SF=0,OF=1,CF=0。執(zhí)行JL指令時(shí),測試轉(zhuǎn)移條件:SFOF = 01 =1,說明滿足(AL)<(BL)的轉(zhuǎn)移條件,因此,(IP)←XY的偏移地址,程序即轉(zhuǎn)移到XY單元執(zhí)行新的指令。
JB指令的轉(zhuǎn)移條件為CF=1,而CMP的執(zhí)行結(jié)果使CF=0,所以不能引起轉(zhuǎn)移。
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號放大器
評論