《北航微机原理课件第七讲 逻辑运算指令.》由会员分享,可在线阅读,更多相关《北航微机原理课件第七讲 逻辑运算指令.(47页珍藏版)》请在金锄头文库上搜索。
1、课前复习指令系统: 1 .MOV DS,2010H ;错 不能将立即直接给段寄存器 2 .PUSH AL ;错 不能对字节进行堆栈操作 3 .MOV DX, SP ;错 无SP寻址方式,存储器地址 只能通过BX,BP,SI,DI寻址 4 .IN AL,0A00H ;错 端口地址大于FFH 应用DX寻址端口 5 .XCHG CL,CH ;对 第六讲第六讲8086/80888086/8088指令系统(续)指令系统(续) 20092009年年3 3月月3131号(星期二)号(星期二) 6 .AAA CX ;错 AAA为无操作数指令,默认操作数AL 7 .ADD BP+DI,1000H ;错 两个操作
2、数不能均为存储器 8 .OUT DX,CL ;错 端口只能通过AL或AX传送数据 9.CBW BH ;错 符号扩展命令为无操作数指令, 默认操作数AL 10.ADD 03ECH,AX ;错 目的操作数不能为立即数 11.MOV BX,SP+DI;错 无SP+DI寻址,必须是基址 (BX或BP)+变址(SI或DI) 12.MOV DI,AX ;错 无AX寻址 13.LDS CH,DI ;错 LDS指令目的操作数应为一个16为寄存器 14.LEA BX,1000H ;错 LEA源操作数应为一个存储器操作数, 不能是立即数 15.DIV 0010H ;错 单操作数不能是立即数 16.LEA DX,D
3、I ;错 LEA源操作数应为一个存储器操作数, 不能是寄存器 17.MUL AX,200H ;错 MUL为单操作数指令, 且源操作数不能为立即数,AX隐含 18.MOV AX,BX+BP;错 无BP+BX寻址,理由同第12题 19.CMP BX,SI ;错 双操作数不能均为存储器 21.OUT DX,BX ;错 端口只能通过AL或AX传送数据 22.AND 0FH,AL ;错 目的操作数不能为立即数 23.JNZ AAA ;错 AAA十一条指令.不能作为符号地址 例1 复习求补指令: MOV AH, 80H NEG AH 00 H 0000 0000 B - 80 H - 1000 0000
4、B 1 1 80H 1000 0000B 执行后: (AL)=80H , CF=1,OF=1,ZF=0,SF=1,AF0,PF=0 CMP oprd1, oprd2 ; (oprd1) - (oprd2) CMP A, B l 利用CMP执行后的标志值,比较两操作数之间的关系 l 比较指令CMP,进行两操作数相减操作, 但只影响标志值,不影响操作数(减的结果不保存) 例2:复习比较指令: 条件转移指令判断条件 低于 JB next CF = 1 低于或等于 JBE next CF = 1 或 ZF = 1 高于 JA next CF = 0 且 ZF = 0 高于或等于 JAE next CF
5、 = 0 有符号数小于用JL,大于用JG 例 将AX和BX中较大的带符号数,存于AX中 CMP AX, BX ;比较 JGE great ;大于或等于则跳转 XCHG AX, BX ;小于则交换 great: 、 CMP A,B CMP指令应用举例:带符号数找最大值带符号数找最大值 若自BLOCK开始的内存缓冲区中,有100个带符号数。 找出最大值。并存放到MAX单元中。 思路思路: 第一个数取出 ( AX), 取出第二个数(第二个字单元内容)与(AX)比较 : (AX)第二个数,不做交换, 否则,(第二个字单元内容) (AX)。 再取第三个数, 经过99次比较,在(AX)中得到最大数。 编程
6、: MOV BX,OFFSET BLOCK MOV AX,BX INC BX INC BX MOV CX,99 AGAIN:CMP AXCMP AX,BXBX JG NEXTJG NEXT ;(AX) 大,转NEXT MOV AX,BX NEXT: INC BX INC BX DEC CX JNZ AGAIN MOV MAX,AX;MAX单元存放最大值 8086/8088指令系统(续) 8086/8088指令系统可以分成6个功能组 : 1 数据传送(Data transfer) 2 算术运算(Arithmetic) 3 逻辑运算和移位指令(Logic (AL)=03H, (AL)(AL)03
7、03不变 不变; ;( (AL)AL)47 47=00H, =00H,屏蔽高屏蔽高4 4位位。 2. 移位指令 SHL oprd, 1 CL SAL oprd, 1 CL SHR oprd, 1 CL SAR oprd, 1 CL 0CF 0CF CF0 CF 执行操作指令格式 左移部分逻辑移位与算术移位 3. 循环移位指令 指令格式执行操作 CF CF CF CF ROL oprd, 1 CL ROR oprd, 1 CL RCL oprd, 1 CL RCR oprd, 1 CL 循环移位分带进位与不带进位两种 共同点: 所有移位指令都可以作B/W操作。 指令中的 destdest : :
8、 寄存器、存储器寻址方式。寄存器、存储器寻址方式。 cnt : 表示移位次数 cnt=1,1可写在指令中,不能是1以外的常数。 cnt1,用CL存放移位次数 ,不能是其他寄存器。 如:SAL AX,1 MOV CL,4 SAL AX,CL 注意事项: SHL AL, 1 SHR AL, CL ROL BX, 1 RCR AL, CL l源操作数为移位的次数 为1可在指令中直接给出 大于1时,移位次数需由CL给出 RCR AX,5 SHL BL, AL l 目的操作数类型决定操作类型 SAL BL,CL 字节操作 ROL BX,CL 字操作 当移位次数 l oprd可以是reg/mem l 可进
9、行字节或字操作 循环移位指令循环移位指令(Rotate)与移位指令与移位指令(Shift)不同点不同点: 移位指令执行后,移出的位可能丢失; 循环移位指令移 位后,操作数中原来各数位的信息不会丢失,这是移动了位 置,必要时可以恢复。 循环移位指令可以对操作数进行测试。 例:测试(AL)5 =? 0 MOV CL , 3 ROL AL , CLROL AL , CL JNC ZERO ZERO: 利用带进位循环移位指令将两个寄存器或存储器单元利用带进位循环移位指令将两个寄存器或存储器单元 组合起来一起移位组合起来一起移位。 例: 将DX、AX组合起来构成32位寄存器向左移一位。 如下图所示: 程
10、序: SHL AX , 1 RCL DX , 1 32位寄存器向左移一位 四、串操作指令(String manipulation ) “串”就是内存中一段地址相连的字节或字。 串操作串操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作。 串操作指令是8088实现内存之间数据传送的一组指令 8088有5种基本操作: 1、 MOVS(Move string) 串传送指令 2、CMPS(Compare string) 串比较指令 3、SCAS(Scan string) 串扫描指令 4、LODS(Load from string) 串取数指令 5、STOS (Store in t
11、o string) 存入串数据指令 共同点:共同点: 可以只有源操作数,可以只有目标操作数,可能二者都有。 源操作数用SI 寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段 。 目标操作数用DI寻址,隐含ES为段地址。 每次操作对SI、DI 调整: DF=1DF=1,DIDI、SISI自动自动-1 (-1 (字节)或字节)或-2-2(字);(字); DF=0DF=0,DIDI、SISI自动自动+1+1(字节)或(字节)或+2+2(字)。(字)。 与上述指令基本配合使用前缀有: REPREP(Repeat)重复。重复。 REPE/REPZREPE/REPZ(Repeat while equa
12、l/zero) 相等 相等/ /为零则重复。为零则重复。 REPNE/REPNZREPNE/REPNZ(Repeat while not equal/not zero)不相等 不相等/ /不为零则重复不为零则重复。 下面分二种情况来讨论: (一) 与REP相配合工作的MOVS、STOS指令 REP 重复串操作直到(CX)=0为止 LODS指令一般不直接与REP联合使用,但其操作与STOS 相关,因而放在这里。 (二) 与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令 REPE/REPZ 当相等/为零时重复串操作 REPNE/REPNZ 当不相等/不为零时重复串操作
13、( (一一) ) 与与REPREP相配合工作的相配合工作的MOVSMOVS、STOSSTOS指令指令 REP REP 重复串操作直到(重复串操作直到(CXCX)=0=0为止为止 格式:REP String Primitive 串指令 String Primitive 可为:MOVS、STOS。 1. MOVS(Move String) 串传送 2. LODS(Load from String) 读串指令 3. STOS(Store into String) 写串指令 REP REP 重复串操作执行过程重复串操作执行过程: : (1)当(CX)= 0 ,结束REP, 执行REP后的下一条指令 。
14、 (2) 当(CX)0, (CX) (CX) -1 , (3) 执行REP后的串指令, (4) 重复(1)(3)。 REP 执行流程图 1. 1. MOVSMOVS(Move stringMove string)串传送串传送 2. 2. 串传送有串传送有3 3种格式:种格式: (1) MOVS dest,src;(ES):(DI)(DS):(SI) (2) MOVSB (字节);(SI)(SI)1,(DI)(DI) 1 (3) MOVSW (字);(SI)(SI)2,(DI)(DI)2 当方向标志当方向标志 CLD , DF=0CLD , DF=0时时 用用“ “+” +” STD , DF=1STD , DF=1时时 用用“ “-”-” 该指令不影响条件码 。 *如: MOVS ES:BYTE PTR DI,DS