8086指令系統(tǒng)---算術(shù)指令(一)
ADD 加法 SUB 減法
ADC 帶進(jìn)位加 DEC 減1
INC 加1 NEG 求補(bǔ)
CMP 比較
⑶ 乘法指令 ?、?除法指令
MUL 無(wú)符號(hào)數(shù)乘法 DIV 無(wú)符號(hào)數(shù)除法
IMUL 帶符號(hào)數(shù)乘法 IDIV 帶符號(hào)數(shù)除法
?、?符號(hào)擴(kuò)展指令 ?、?十進(jìn)制調(diào)整指令
CBW 字節(jié)轉(zhuǎn)換為字 DAA 加法的十進(jìn)制調(diào)整
CWD 字轉(zhuǎn)換為雙字 DAS 減法的十進(jìn)制調(diào)整
AAA 加法的ASCII調(diào)整
AAS 減法的ASCII調(diào)整
AAM 乘法的ASCII調(diào)整
AAD 除法的ASCII調(diào)整
ADD dst,src加法指令(addition)
執(zhí)行操作: (dst) ← (src)+(dst)
ADC dst,src帶進(jìn)位加指令(add with carry)
執(zhí)行操作: (dst) ← (src)+(dst)+CF
INC opr加1指令(increment)
執(zhí)行操作: (opr) ← (opr)+1
ADD和ADC指令是雙操作數(shù)指令,它們的兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器尋址方式,也就是說(shuō),除源操作數(shù)為立即數(shù)的情況外,源和目的操作數(shù)必須有一個(gè)是寄存器尋址方式。INC指令是單操作數(shù)指令,它可以使用除立即數(shù)方式外的任何尋址方式。
ADD和ADC指令影響條件標(biāo)志位(也稱條件碼),INC指令影響除CF外的其它條件碼。條件碼中最主要的是SF、ZF、CF和OF,加法運(yùn)算對(duì)這四個(gè)條件碼的設(shè)置方法如下:
SF=1 加法結(jié)果為負(fù)數(shù)(符號(hào)位為1)
SF=0 加法結(jié)果為正數(shù)(符號(hào)位為0)
ZF=1 加法結(jié)果為零
ZF=0 加法結(jié)果不為零
CF=1 最高有效位向高位有進(jìn)位
CF=0 最高有效位向高位無(wú)進(jìn)位
OF=1 兩個(gè)同符號(hào)數(shù)相加(正數(shù)+正數(shù),或負(fù)數(shù)加負(fù)數(shù)),結(jié)果符號(hào)與其相反
OF=0 不同符號(hào)數(shù)相加時(shí),或同符號(hào)數(shù)相加,結(jié)果符號(hào)與其相同
計(jì)算機(jī)在執(zhí)行運(yùn)算時(shí),并不區(qū)別操作數(shù)是帶符號(hào)數(shù)還是無(wú)符號(hào)數(shù),一律按上述規(guī)則設(shè)置條件碼,因此,程序員要清楚當(dāng)時(shí)處理的是什么類型的數(shù)據(jù)。例如,當(dāng)加法運(yùn)算結(jié)果的最高有效位為1時(shí),機(jī)器將SF置1。如果參加運(yùn)算的是兩個(gè)帶符號(hào)數(shù),那么和的最高有效位是符號(hào)位,SF置1說(shuō)明結(jié)果是一個(gè)負(fù)數(shù)。如果參加運(yùn)算的是兩個(gè)無(wú)符號(hào)數(shù),那么和的最高有效位也是數(shù)值位,此時(shí)SF置0或置1都失去了表示正負(fù)數(shù)的意義。
對(duì)帶符號(hào)數(shù)和無(wú)符號(hào)數(shù),它們表示結(jié)果溢出的條件標(biāo)志位也是不同的。上述OF位的設(shè)置條件顯然只符合帶符號(hào)數(shù)的溢出情況,OF=1表示運(yùn)算結(jié)果是錯(cuò)誤的。而無(wú)符號(hào)數(shù)溢出(運(yùn)算結(jié)果超出了有限位的表示范圍)時(shí),表現(xiàn)為最高有效位產(chǎn)生進(jìn)位,因此,CF=1是無(wú)符號(hào)數(shù)溢出的標(biāo)志。另外,在雙字長(zhǎng)數(shù)運(yùn)算時(shí),低位字相加設(shè)置的CF,說(shuō)明低位字向高位字有無(wú)進(jìn)位的情況。
例MOV BX,9B8CH ; (BX)=9B8CH
ADD BX,6478H ; now (BX)=0000H
9B8A 1001 1011 1000 1010
+ 6476 + 0110 0100 0111 0110
----------- --------------------------
1← 0000 1← 0000 0000 0000 0000
條件碼設(shè)置: SF=0 最高有效位(D15)為0
ZF=1 結(jié)果為0
CF=1 最高有效位向高位有進(jìn)位
OF=0 不同符號(hào)數(shù)相加,不產(chǎn)生溢出
例編寫(xiě)執(zhí)行雙精度數(shù)(DX,CX)和(BX,AX)相加的指令序列,DX是目的操作數(shù)的高位字,BX是源操作數(shù)的高位字。指令執(zhí)行前:
?。―X,CX)= A248 2AC0H,(BX,AX)= 088A E25BH。
指令序列: ADD CX, AX ;(CX)= 0D1BH
ADC DX, BX ; now,(DX)=0AAD3H
執(zhí)行ADD指令:
2AC0 0010 1010 1100 0000
+ E25B + 1110 0010 0101 1011
--------- ------------------------
1← 0D1B 1← 0000 1101 0001 1011
條件碼設(shè)置: SF=0 最高有效位(D15)為0,無(wú)符號(hào)位意義
F=0 結(jié)果不為0
CF=1 最高有效位向高位有進(jìn)位
OF=0 加數(shù)最高位分別為0、1,溢出位置0,OF對(duì)低位字無(wú)溢出意義
執(zhí)行ADC指令:
A248 1010 0010 0100 1000
088A 0000 1000 1000 1011
+ 1 + 1←CF
---------- ----------------------------
AAD3 1010 1010 1101 0011
條件碼設(shè)置: SF=1 最高有效位(D31)為1,對(duì)帶符號(hào)數(shù)運(yùn)算表示結(jié)果為負(fù)
ZF=0 結(jié)果不為0
CF=0 最高有效位向高位無(wú)進(jìn)位
OF=0 結(jié)果符號(hào)與操作數(shù)相同,未產(chǎn)生溢出
2 減法指令
SUB dst,src減法指令(subtract)
執(zhí)行操作: (dst) ← (dst)-(src)
SBB dst,src帶借位減法指令(subtract with borrow)
執(zhí)行操作: (dst) ← (dst)-(src)-CF
DEC opr減1指令(decrement)
執(zhí)行操作: (opr) ← (opr)-1
CMP opr1,opr2比較指令(compare)
執(zhí)行操作: (opr1)-(opr2),根據(jù)相減結(jié)果設(shè)置條件碼,但不回送結(jié)果
以上指令除DEC指令不影響CF外,其他都影響條件碼。與加法類似,SF和ZF分別表示減法結(jié)果的符號(hào)以及為零的情況;CF表明無(wú)符號(hào)數(shù)相減結(jié)果溢出與否;OF表明帶符號(hào)數(shù)相減結(jié)果溢出與否。但在對(duì)CF和OF位的設(shè)置方法上減法和加法有所不同,下面對(duì)此做進(jìn)一步說(shuō)明:
CF=1 二進(jìn)制減法運(yùn)算中最高有效位向高位有借位(被減數(shù)<減數(shù),不夠減的情況)
CF=0 二進(jìn)制減法運(yùn)算中最高有效位向高位無(wú)借位(被減數(shù)≥減數(shù),夠減的情況)
OF=1 兩數(shù)符號(hào)相反(正數(shù)-負(fù)數(shù),或負(fù)數(shù)-正數(shù)),而結(jié)果符號(hào)與減數(shù)相同
OF=0 同符號(hào)數(shù)相減時(shí),或不同符號(hào)數(shù)相減,其結(jié)果符號(hào)與減數(shù)不同
NEG opr求補(bǔ)指令(negate)
執(zhí)行操作: (opr) ← -(opr),
求補(bǔ)操作即把操作數(shù)變?yōu)榕c其符號(hào)相反的數(shù):。
機(jī)器在執(zhí)行求補(bǔ)指令時(shí),把操作數(shù)各位求反后末位加1,因此執(zhí)行的操作也可表示為:
(opr) ← 0FFFFH-(opr)+1
NEG指令的條件碼設(shè)置方法為:
CF=1 不為0的操作數(shù)求補(bǔ)時(shí)
CF=0 為0的操作數(shù)求補(bǔ)時(shí)
OF=1 當(dāng)求補(bǔ)運(yùn)算的操作數(shù)為-128(字節(jié))或-32768(字)時(shí)
OF=0 當(dāng)求補(bǔ)運(yùn)算的操作數(shù)不為-128(字節(jié))或-32768(字)時(shí)
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論