微机原理教案 联系客服

发布时间 : 星期日 文章微机原理教案更新完毕开始阅读96294b92b0717fd5370cdc0e

微机原理及接口技术

②加1指令INC

INC只有1个操作数,指令在执行时,将操作数的内容加1。一般用在循环程序中修改指针和循环次数。它不影响进位标志CF。

2、减法指令

SUB SBB DEC NEG CMP

①不带借位的减法指令SUB;带借位的减法指令SBB 格式:SUB DST,SRC; SBB DST,SRC

功能:(DST)←(DST)-(SRC);(DST)←(DST)-(SRC)-CF 说明:这两条指令的执行都会影响条件码标志。

溢出(OF)的判断:若两个操作数符号相反,而结果的符号与减数相同,则溢出(OF=1)。

②比较指令CMP 格式:CMP OPR1,OPR2 功能:(OPR1)-(OPR2)

说明:执行减法操作,但不保存结果,只根据结果设置相应的条件码标志。CMP指令后面往往跟着一条条件转移指令,根据比较结果产生不同的分支。

例:已知数组首地址为1000H,段地址已放在DS中,末字为0FFFFH,试统计其中0的个数放在末字单元。

MOV DX,0 LEA SI,[1000H]

LOP:CMP WORD PTR [SI],FFFFH JZ END0

CMP WORD PTR [SI],0 JNZ NEXT INC DX NEXT:ADD SI,2 JMP LOP END0:MOV [SI],DX

17

微机原理及接口技术

BEGIN 0→(DX) 1000H→(SI) [SI]=FFFFH? N N [SI]=0? Y (DX)←(DX)+1 保存结果 END (SI)←(SI)+2

3、乘法指令

无符号数乘法指令MUL 带符号数乘法指令IMUL 格式:MUL SRC;IMUL SRC

功能:(AX)←(AL)×(SRC);(DX,AX)←(AX)×(SRC)

说明:进行乘法运算时,如果两个8位数据相乘,会得到一个16位的乘积;如果两个16位数相乘,会得到一个32位的乘积。8086在执行乘法指令时,有一个乘数总是放在AL或者AX中。当得到16位积时,结果放在AX中;而得到32位积时,结果放在DX和AX两个寄存器中,DX中为乘积的高16位,AX中为乘积的低16位。

4、除法指令

无符号数除法指令DIV 带符号数除法指令IDIV 格式:DIV SRC;IDIV SRC

说明:8086执行除法运算时,规定除数必须为被除数的一半长度。即被除数为16位时,除数为8位,被除数为32位时,除数为16位。16位的被除数放在AX中,32位的被除数放在DX和AX中。当被除数为16位,除数为8位时,得到8位的商

18

微机原理及接口技术

放在AL中,8位的余数放在AH中。当被除数为32位,除数为16位时,得到16位的商放在AX中,16位的余数放在DX中。 四、逻辑运算及移位指令

1、逻辑运算指令 AND OR NOT XOR TEST

NOT为单操作数指令,不允许使用立即数,不影响标志位。其它四条指令为双操作数指令,使CF和OF为0,AF无定义,而SF、ZF和PF则根据运算结果设置。

①AND

格式:AND DST,SRC 功能:操作数某位清0。 ②OR 操作数某位置1。 ③XOR 对操作数清0。

④TEST 执行AND运算,不保存结果,一般用来检测指定位是1还是0 2、移位指令

SHL SHR SAL SAR ROL ROR RCL RCR 说明:格式相同,双操作数指令

无符号数使用逻辑移位指令,带符号数使用算术移位指令 左移一次相当于乘2,右移一次相当于除2 移位次数n>1时,n必须预先存入CL中 移位指令影响SF、ZF、PF 五、串操作指令

MOVS CMPS SCAS LODS STOS 1、串传送MOVSB MOVSW

功能:把SI指向的数据段中的一个字节或字传送到由DI指向的附加段中的一个字节或字中去,同时根据方向标志及数据格式修改SI和DI。

例:试将字符串MESS1传送到MESS2区域,设MESS1和MESS2的段地址已分别存入DS和ES中。

方法1:LEA SI,MESS1 LEA DI,MESS2

19

微机原理及接口技术

MOV CX,8 NEXT:MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ NEXT

方法2:使用串传送指令。在使用该指令之前,必须先做四件事:

a.设置方向标志

b.源串起始地址→DS:SI c.目的串起始地址→ES:DI d.数据个数→CX CLD

LEA SI,MESS1 LEA DI,MESS2 MOV CX,8 REP MOVSB

2、串比较指令CMPSB CMPSW 使用前缀REPE和REPNE

REPE/REPZ:两数相等就可以继续比较;如遇到两数不相等可提前结束。 REPNE/REPNZ:两数比较不相等,就可以继续串比较指令;如遇到某此比较相等,则可提前结束。

例:编写一个程序段,比较5个字节字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串则NEW_LESS程序;否则顺序执行程序。假设在数据段和附加段中定义了两个字符串。

CLD

LEA SI,MESS1 LEA DI,MESS2 MOV CX,8

20