大工20春《汇编语言程序设计》考前辅导
发布时间:2023-12-24 10:12:54浏览次数:25汇编语言程序设计辅导资料五第三章第 3 节 概述 这周我们继续学习第三章中的第 3 节,指令系统。上周课程我们学习了寻址方式和六大类指令系统中的数据传送指令和算术指令,本节课程我们学习逻辑指令、串处理指令、控制转移指令等几类指令系统。这些指令整体构成了 80x86 指令系统的集合。因此学好这些指令将为学好汇编语言打下坚实的基础。第 3 节 几类指令系统1、逻辑指令1)逻辑运算指令:AND、OR、NOT、XOR、TEST说明:这几种逻辑运算指令比较容易理解,需要注意的是测试指令 TEST 是将两个操作数进行与操作,只是与的结果并不保存,只设置条件码;NOT 指令不影响标志位,NOT 指令不允许使用立即数寻址方式。2)位测试并修改指令: BT DST,SRC 执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位 CF BTS DST,SRC 执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位 CF,并把目的操作数该位置 1 BTR DST,SRC 执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位 CF,并把目的操作数该位置 0 BTC DST,SRC 执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位 CF,并把目的操作数该位变反 说明:本组指令除影响 CF 位的值,其他标志位无定义,源操作数可以使用寄存器方式或
立即数方式。3)位扫描指令: BSF 正向位扫描 BSR 负向位扫描4)移位指令: SHL 逻辑左移 SAL 算术左移 SHR 逻辑右移 SAR 算术右移 ROL 循环左移 ROR 循环右移 RCL 带进位循环左移 RCR 带进位循环右移 说明:逻辑左移和算术左移指令功能是等效的,但是逻辑右移指令和算术右移指令是不同的,逻辑右移,只需要在最高位补 0 即可,而算术右移需要使用最高位的符号位进行补充,比如最高位为 0 则移位后最高位补 0,最高位为 1 则移位后最高位补 1;一般逻辑移位指令用于无符号数移位, 而算术移位指令多用于带符号数移位 ;一位移位情况时,SHR 相当于除2,SHL 相当于乘 2,,SAR 相当于除 2,SAL 相当于乘 2;多位移位指令在有进位或溢出情况时,这种乘除 2 关系不正确;移位指令移出位存放于 CF 标志位中,因此也多用于位检测,这时只需要检测 CF 内容即可。 移位指令对 CF 和 OF 位有影响,其中 OF 位只有在一位移位时才有效,移位后最高有效位发生变化则 OF 置 1,否则置 0。 循环移位指令可以改变操作数中所有位的位置,在程序中很有用。
2、串处理指令: MOVS 串传送 CMPS 串比较 SCAS 串扫描 LODS 从串取 STOS 存入串 INS 串输入 OUTS 串输出说明:串扫描指令格式如下 SCAS DST 参与比较的目的串都在附加段中,而被比较的数在 AL(字节操作)AX(字操作)EAX(双字操作)中。以上串处理指令都可以和前缀 REP/REPE/REPNE 配合使用,只需要注意一个典型的重复串处理指令的操作过程其他类似重复串指令即可对比理解了,如下指令: REPNE SCASB 不等重复字节串扫描指令执行的操作过程如下:计数器内容是 0 或 ZF=1 退出指令,否则往下执行CX-1 CX, DI 与 AL 内容比较DI 1 DI重复第一步 串处理指令中可以使用 REP MOVS 指令将数据段中的数据(源串)传送到附加段(目的串)中去。还需要注意方向标志位 DF 以及两条指令 CLD 和 STD 的作用,STD 使 DF 置 1,串处理指令可使地址自动减量,CLD 使 DF 置 0,串处理指令可使地址自动增量。 3、控制转移指令
1)无条件转移指令:又分为段内直接短转移,段内直接近转移,段内间接近转移,段间直接远转移,段间间接远转移。无条件地转移到指令指定的地址去执行指令 2)条件转移指令:又分为 3 种转移指令,包括单个标志位状态转移指令、无符号数间比较结果转移指令、带符号数间比较结果转移指令 JZ/JNZ ZF 位跳转 JS/JNS SF 位跳转 JO/JNO OF 位跳转 JP/JNP PF 位跳转 JB/JNB CF 位跳转 JB/JNB 小于转移 JBE/JNBE 小于等于转移JL/JNL 大于转移 JLE/JNLE 大于等于转移3)条件设置指令: 4)循环指令: LOOP 循环指令 LOOPZ/LOOPNZ 指令 执行的过程:(CX) (CX)-1 检查是否满足条件,如满足,则 (IP) (IP)+8 位位移量,实行循环 不满足则 IP 不变,退出循环 说明:循环程序不可能太多,因此循环指令跳转偏移量不应太大(-128 到+128 字节范围内)。
本周要求掌握的内容如下:基本概念:逻辑运算指令、位扫描指令、移位指令、控制转移指令、循环指令 基本理论:了解 5 种逻辑运算指令,熟练使用 8 种移位指令,熟悉几种控制转移指令,会用循环指令,熟悉几种串处理指令操作过程,注意指令禁用寻址方式和寻址范围情况以及默认寄存器操作数情况。习题: 1、:SCASW DX 执行的过程描述正确的是(DF=1):(1)(AL)-(DX) (2)(AX)-(DX) (3) (DX) (DX)-2 (DX) (DX)-1(4)(DX) (DX)+1 (5)(DX) (DX)-2 ( (2)(5))2、指令 SAL 51H 3 执行后的结果是: (A) 88H (B) 648D (C)44H (D)A2H (A)3、上例指令执行后 CF 寄存器内容为: (0)4、判断:一条循环指令可以代替修改计数器和判断转移条件两条指令。 (对) 5、下列指令不正确的是: (A)SCAS DX,AX (B) REPNE MOVS (C) ROR 21H (D)NOT 5CH (ACD)