? 两操作数不能同时为存储器操作数。
? 参加运算的数可以是带符号数或无符号数。OF位用来表示带符号数的
溢出,CF位用来表示无符号数的溢出。 ⑷例:
ADD AX,BX ADD AL,CL ADD CX,34 ADD DL,DA_BYTE
2.带进位加法指令。 格式:ADC DST ,SRC 功能:DST←(DST)+(SRC)+CF
用于双精度加法,即低16位向高16位有进位的情况,其余同ADD指令。 3.加“1”指令(Increment) ⑴格式: INC DST ⑵功能: DST←(DST)+1 ⑶说明:
? 操作数可以是8位或16位通用寄存器或存储单元,但不能是立即数。 ? FR:影响PF、AF、ZF、SF、OF;不影响CF
? 这条指令一般用在循环程序中修改指针和循环次数(即用于计数器)。 4.减法指令
⑴格式:SUB DST ,SRC ⑵功能;DST←(DST)-(SRC) ⑶说明:
? DST:通用寄存器,存储器 ? SRC:通用寄存器,存储器,立即数 ? FR:影响CF、DF、AF、ZF、SF、OF ? 两操作数不能同时为存储器操作数。
? 参加运算的数可以是带符号数或无符号数。OF位用来表示带符号数的
溢出,CF位用来表示无符号数的溢出。 ⑷例: SUB BX,CX ; BX←(BX)-(CX) 5.带借位减法
⑴格式: SBB DST,SRC
⑵功能: DST←(DST)-(SRC)-CF ⑶说明:同SUB指令。 6.减“1”指令 ⑴格式: DEC DST ⑵功能: DST←(DST)-1 ⑶说明:
? 操作数可以是8位或16位通用寄存器或存储单元,但不能是立即数。 ? FR:影响PF、AF、ZF、SF、OF;不影响CF。 ? 这条指令一般用在循环程序中修改指针和循环次数。 7.求负数指令(Negative) ⑴格式: NEG DST ⑵功能: DST←0-(DST) ⑶说明:也称取补指令。
? 影响:CF,PF,AF,ZF,SF,OF 8.乘法指令
⑴无符号数乘法指令:MUL SRC 功能:AX←AL*(SRC)(字节乘法) DXAX←AX*(SRC)(字乘法) 说明:
? 操作数可以是通用寄存器、存储器,不能是立即数。 ? 字节乘:若乘积高8位AH≠0,则CF=1,OF=1;
若乘积高8位AH=0,则CF=0,OF=0。 ? 字乘:若乘积高16位DX≠0,则CF=1,OF=1;
若乘积高16位DX=0,则CF=0,OF=0。 ? 例:MUL BX ;DXAX←AX*BX
MUL BYTE PTR [SI];AX←AL*(DS:[SI])
⑵带符号数乘法指令:IMUL SRC 功能:同MUL指令
说明:同MUL指令,但若乘法结果AH或DX(高位部分)只是低(8或16)位部分的符号扩展,则OF=0,CF=0。
9.除法指令
⑴无符号数除法指令: DIV SRC
功能:AL←AX/(SRC),余数在AH中,(字节除) AX←DXAX/(SRC),余数在DX中(字除)
说明:若商超过AL(字节除)或AX(字除)的范围(FFH或FFFFH)时,系统会自动产生0类中断,且商和余数都不确定。其他与乘法指令同。对FR无定义。
⑵带符号数除法指令: IDIV SRC 功能:同上
说明:余数符号和被除数符号相同。 三、 位操作类指令。 1.逻辑运算指令。
⑴格式:逻辑“与”:AND DST,SRC 逻辑“或”:OR DST,SRC
逻辑“异或”:XOR DST, SRC 逻辑“非”:NOT DST
⑵功能:对字节或字进行逻辑运算。主要用于字节或字中某些位的组合,分离或位设置。例:
AND AND OR
⑶说明:
? SRC可以是寄存器,存储器或立即数。而DST只能是通用寄存器或存
储器。且二者不能同为存储器。 ? 运算结果均送回目的操作数。
? FR:NOT指令对FR各位无影响;其它三条指令影响相同,SF、ZF、
PF,另外,CF和OF总是置“0”,AF不确定。 2.测试指令(TEST) 格式:TEST DST,SRC
功能:与AND指令相同,但运算结果不送回DST,只根据运算结果设置FR。该指令主要用来测试一个操作数的某一位或某几位的状态。
AL, 0FH;
分离AL低4位
AL, F0H; 分离AL高4位 AL, 04H; AL第4位置“1”
? 通常将被测试数置于DST,测试用的位模式置于SRC。 例:TEST AL,01H ;测试AL最低位是否为“1” 若AL最低位为“0”,则ZF=1; 若AL最低位为“1, 则ZF=0; 3.移位/循环,移位指令 ⑴ 算术左移 逻辑左移
SAL SHL
DST, COUNT DST, COUNT
CF 功能: ← ←0
SAL指令相当于乘以2n,n为左移位数。
说明:COUNT为移位次数,可以是1,若COUNT大于1时,必须放在CL中,移位结束后,CL值不变。因此移位位数可以是0~255,一般选0~16即可。
⑵算术右移 SAR DST, COUNT 功能: → CF ? 等效于除以2n,n为右移次数。 ⑶逻辑右移
SHR
dst,count
CF 功能: 0→ →
⑷循环左移 功能: CF ← ⑸循环右移
ROL dst ,count
ROR dst, count
CF 功能: → ⑹带进位循环左移 功能: CF ← ⑺带进位循环右移
RCL dst, count
RCT dst count
CF 功能: → △说明:
? 每条指令只需一个操作数,可以是字或字节,也可以是寄存器或存储器
操作数。
? 影响AF以外的各标志位,而AF不定;当Count= 1时,OF才有意义,
当移位前操作数的最高两位相同时,移位后OF=0;当最高两位不同时,OF=1。
四、 串操作指令
串操作指令中源操作数地址由DS:[SI]提供,目的串操作数地址由ES:[DI]提供。每条串操作数指令每次仅对串中一个字或一个字节单元进行查找,且根据DF标志自动修改SI/DI。
为了便于对串中多个字或字节单元进行串操作,指令系统设置有重复前缀,重复次数由CX中的内容确定,每执行一次,CX内容减1,而对CX的检测是在执行指令前进行的,最多64K。 1.重复前缀(Repeat) ⑴REP
功能:若CX≠0,重复执行后缀的串指令,CX←CX-1
若CX=0,重复执行结束。
REP
MOVSB
当相等/为零时重复串操作。
例:
⑵REPE/REPZ
功能:若CX≠0,且ZF=1,重复执行后缀的串指令,CX←CX- 1
若CX=0,或ZF=0,重复停止。
⑶REPNE/REPNZ 当不相等/不为零时重复串操作。
功能:若CX≠0,且ZF=0,重复执行后缀的串指令,CX←CX- 1
若CX=0或ZF=1,重复停止。
△说明;
? LODS、STOS、MOVS不影响FR,所以使用REP。
? CMPS、SCAS,结果要反映在FR上,所以常使用REPE/REPZ和
REPNE/REPNZ。
2.串传送:不影响FR ⑴MOVSB
功能:ES:[DI]←DS:[SI],DI←DI±1,SI←SI±1 ⑵MOVSW
功能:ES:[DI]←DS:[SI],但DI←DI±2,SI←SI±2
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库8086CPU指令系统(3)在线全文阅读。
相关推荐: