微机-7寻址与指令(4逻辑运算与移位类)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 移位类指令
指令格式: 指令格式 SAL src,count;算术左移 , ; SAR src,count;算术右移 , ; SHL src,count;逻辑左移 , ; SHR src,count;逻辑右移 , ;
src可为R/M,操作数长度可为8/16位,count为移位次数,移 位1次的,在指令中直接给出; 移位n次的,则需预先将n送入 CL寄存器中,这样,对8086的移位指令,移位次数的范围可 以是1~255。 对标志位的影响:移出位→CF;按照移位后的结果置/复位 SF、ZF、PF ,AF标志位无定义。对OF的影响:移位次数 =1,则:OF=CF⊕移位后操作数的最高位;移位次数>1, 则:不影响OF。
【例】分析下列语句的功能: 分析下列语句的功能: AND AH,0F0H; , ; 分离出AH中的高 位. 分离出 中的高4位 中的高 AND AH,0FH; , ; 分离出AH中的低 位 中的低4位 分离出 中的低 OR AH,01H; , ; 中最低位置1 将AH中最低位置 中最低位置 AND AL,7FH; , ; 的最高位置0 将AL的最高位置 的最高位置 XOR AX,0FFH; , ; 将AX的低字节变反 的低字节变反 XOR BX,8000H; , ; 将BX的符号位变反 的符号位变反
三、逻辑运算和移位(Logic & Shift)循环指令 逻辑运算和移位( )
逻辑运算指令AND、TEST、OR、XOR、NOT 、 逻辑运算指令 、 、 、 算术移位指令SAL、SAR 、 算术移位指令 逻辑移位指令SHL、SHR 、 逻辑移位指令 不带进位的循环移位指令ROL、ROR 、 不带进位的循环移位指令 带进位的循环移位指令RCL、RCR 、 带进位的循环移位指令
指令AND AX,AX 还有一个另外的作用 它对 还有一个另外的作用:它对 它对AX 指令 , 内容无影响,又可以用来判断 是否为0,因为 内容无影响 又可以用来判断AX是否为 因为 又可以用来判断 是否为 AND指令执行后要影响 。指令 指令执行后要影响ZF。指令AND AX,AX 指令执行后要影响 , 还可用来检查数据的符号、奇偶性等。 还可用来检查数据的符号、奇偶性等。
MSB
LSB 0
算术左移指令SAL 算术左移指令
CF
最高位→CF,0→最低位,其他位左移 , 最低位, 最高位 最低位
MSB LSB CF
算术右移指令SAR 算术右移指令
MSB
新最高位=原最高位,最低位→CF, 新最高位=原最高位,最低位→CF,其他位右移 原最高位
LSB 0
逻辑左移指令SHL 逻辑左移指令
逻辑“ (1) AND 逻辑“与”指令的应用
实现两操作数相与的运算 【例】AND BL,[BX] , 用来屏蔽操作数所指定的字节或字中的某些位; 用来屏蔽操作数所指定的字节或字中的某些位;维 持不变的位跟“ 相 而清0的位跟 持不变的位跟“1”相“与”,而清 的位跟“0”相 而清 的位跟“ 相 “与”。 的低2位清 【例】AND AL,0FCH;AL的低 位清 ,其余 , ; 的低 位清0, 保持不变 在操作数不变的情况下使CF和 清零 清零。 在操作数不变的情况下使 和OF清零。从对标志 的影响可知,AND操作使 清0,故若要清 操作使CF清 故若要清 故若要清CF,可用 的影响可知 操作使 可用 下面的指令: 下面的指令 AND AX,AX; 也可用 AND AX, , , 0FFFFH 来实现。 来实现。
【例】编写程序段将中断标志位IF (标志位寄存器中 编写程序段将中断标志位 标志位寄存器中 第9位)清0,其它标志位保持不变。 位 ,其它标志位保持不变。
PUSHF POP AX 器 AND AX,0FDFFH;标志位第 位清 , 位清0 ;标志位第9位清 PUSH AX POPF 位清0后的标志位放入堆栈区 ;第9位清 后的标志位放入堆栈区 位清 ;把堆栈区的内容读入标志位寄存器 ;把标志位寄存器内容放入堆栈区 ;从堆栈区取出标志位内容,放入累加 从堆栈区取出标志位内容,
【例】检查标志寄存器的PF位(第2为)是否为 检查标志寄存器的 位 为 0,如果为 ,则程序转移到 如果为0,则程序转移到ZERO处执行。 处执行。 如果为 处执行 LAHF TEST AH,04H , JZ ZERO ……. ZERO: …...
【例】从地址为38F0H的端口中读入一个字节数, 如果该数的最低位为1,则可从38FEH端口将 DATA为首地址的一个字输出,否则就不能进行 数据传送。编写相应的程序段。
逻辑“ (2) OR 逻辑“或”指令的应用
实现两操作数相“ 实现两操作数相“或”的运算 【例】OR AX,[DI] , 使某些位不变,某些位置“1” 使某些位不变,某些位置“ ” 【例】OR CL,80H , 在不改变操作数的情况下使OF=CF=0 在不改变操作数的情况下使OF=CF=0 【例】OR AX,AX , 指令OR AX,AX 还有一个另外的作用:它对 内容无 还有一个另外的作用:它对AX内容无 指令 , 影响,又可以用来判断 是否为0,因为 又可以用来判断AX是否为 因为OR指令执行后要 影响 又可以用来判断 是否为 因为 指令执行后要 影响ZF。它还可用来检查数据的符号、奇偶性等。 影响 。它还可用来检查数据的符号、奇偶性等。
CF
最高位→CF,0→最低位,其他位左移 , 最低位, 最高位 最低位
MSB LSB CF
逻辑右移指令SHR 逻辑右移指令
0
0→最高位,最低位→CF,其他位右移 最高位,最低位 最高位 ,
算术左移指令 SAL R/M,1 , 逻辑左移指令 SHL R/M,1 ,
逻辑右移指令 SHR R/M,1 ,
8086/8088指令系统 / 指令系统
8086/8088指令系统包含 / 指令系统包含133条基本指令 这些指 条基本指令,这些指 指令系统包含 条基本指令 令与寻址方式组合,再加上不同的数据形式 再加上不同的数据形式——有 令与寻址方式组合 再加上不同的数据形式 有 的为字处理,有的为字节处理 可构成上千种指令。 有的为字节处理,可构成上千种指令 的为字处理 有的为字节处理 可构成上千种指令 这些指令按功能可分为六类: 这些指令按功能可分为六类 ① ② ③ ④ ⑤ ⑥ 数据传送类; 数据传送类 算术运算类; 算术运算类 逻辑运算与移位类; 逻辑运算与移位类 串操作类; 串操作类 控制转移类; 控制转移类 处理器控制类。 处理器控制类
1. 逻辑运算指令(与、或、非、异或、测试) 逻辑运算指令( 异或、测试)
OF SF ZF AF PF CF AND dst,src ;dst← dst∧src 0 × × u × 0 , ← ∧ OR dst,src ;dst← dst∨src 0 × × u × 0 , ← ∨ XOR dst,src ;dst← dst⊕src 0 × × u × 0 , ← ⊕ NOT src ;src← src ← ‐‐ ‐ ‐ ‐ ‐ TEST dst,src ;dst∧src , ∧ 0 × × u × 0 对标志位寄存器的影响说明:×为影响 为无意 对标志位寄存器的影响说明 ×为影响,u为无意 义,‐为不影响。 ‐为不影响。 src(除NOT外)可为 可为R/M或Im,dst只能为 只能为R/M。 除 外 可为 或 , 只能为 。 NOT指令的 ,只能为 指令的src,只能为R/M。 指令的 。
Fra Baidu bibliotek
(4)NOT取反指令 ) 取反指令
指令格式: 指令格式 NOT src ; src ← src 指令功能: 将源操作数取反,结果回送源操作数 结果回送源操作数,不 指令功能 将源操作数取反 结果回送源操作数 不 影响标志。 影响标志 src可为 可为8/16位的 位的R/M, 不能是立即数。对于 对于M, 可为 位的 对于 要说明其类型是字节还是字。 要说明其类型是字节还是字 【例】 MOV NOT BX,8A51H BX ; (BX)=75AEH
(5)TEST测试指令 ) 测试指令
指令格式: 指令格式 TEST dst,src , ; dst∧src ∧ 指令功能: 指令功能 TEST指令和AND指令执行同样的操作, 对两个操作数进行逻辑“与”操作,但TEST指令不 回送操作结果,仅仅影响标志位,指令执行后,两个 操作数都不变。其后常紧跟条件转移指令以实现判 断分支。 TEST指令一般用来测试指定位是1还是 指令一般用来测试指定位是 还是 指令一般用来测试指定位是 还是0。 TEST AL,80H , TEST [BX],01H ,
开 始 测试bit1位状态 位状态 测试 取待输出数的 偏移地址 取输入口地址 读入状态字 N
Bit1=1? ? Y 取输出口地址 输出一个字
MOV BX,38F0H ;取输入端口地址 LOOP:IN AL,BX ;从38F0H端口读入一个字节 到累加器 TEST AL,01H ;通过测试指令,查看最低位 是否为1 JZ LOOP ;如果最低位是0,则继续从端 口读数,如果是1,则执行下面指令 LEA BX,DATA ; 取存储器DATA单元的偏移地 址 MOV AX,[BX] ;将BX寄存器内偏移地址指向 的一个字的存储单元内容放入累加器 MOV BX,38FEH;取输出端口地址 OUT BX,AX ; 将累加器的内容输出
逻辑与(AND) 逻辑与(AND) / 或(OR) /异或(XOR) /异或 异或(XOR) 指令格式: 指令格式: AND/OR/XOR dst, src 指令说明: AND/OR/XOR指令执行按位的逻辑与 指令说明:①AND/OR/XOR指令执行按位的逻辑与 /或/异或操作。它们均为双操作数指令,两个操作数 异或操作。它们均为双操作数指令, 宽度必须相等,同为字节或字,执行结果存入dst中 宽度必须相等,同为字节或字,执行结果存入dst中 并且是按位进行 按位进行。 CF、OF标志清 标志清0 影响SF、 并且是按位进行。②将CF、OF标志清0;影响SF、 ZF、PF 标志。 ZF、 标志。 具体指令形式: 具体指令形式: AND/OR/XOR R/M,R/M/Im R/M,R/M/Im
【思考】如何将二进制数9变为字符 ‘9’(ASCII码 39H)
“异或 异或” (3) XOR “异或”操作指令
用于将操作数的某些位取反:维持不变的位跟“ 相 用于将操作数的某些位取反:维持不变的位跟“0”相“异 而取反的位跟“ 相 异或” 或”,而取反的位跟“1”相“异或” 而取反的位跟 的低4位取反 【例】 XOR AL,0FH;AL的低 位取反,高4位不变 , ; 的低 位取反, 位不变 指令XOR AX,AX 的一个重要作用:常用来使 清0, 的一个重要作用:常用来使AX清 指令 , 此操作同时使CF清0。 此操作同时使 清 。 逻辑运算(A⊕ ⊕ = ,可用于信息的“加密” 逻辑运算 ⊕B)⊕B=A,可用于信息的“加密”和“解 其中B为密码 为密码,A⊕ 相当于 加密” 将加密所得的 相当于“ 密”。其中 为密码 ⊕B相当于“加密”,将加密所得的 结果再与密码B进行 异或”运算就是“解密” 反之 亦然。 进行“ 反之,亦然 结果再与密码 进行“异或”运算就是“解密”;反之 亦然。
Review:算术运算指令 :
【例】编程实现十进制数4和9的乘法运算,运算结 果用BCD编码指令调整 MOV AL,4 MOV CL,9 MUL CL AAM ;04H×09H=0024H→AX ;(AL)÷10=3→(AH) ;(AL) mod 10=6→(AL)
【例】编程实现BCD编码306H除去十进制数9的运算 。 MOV AX,0306H ;AX中是两个非压缩BCD码 MOV BL,9 AAD ;(AH)×10+(AL)=0024H→(AX) (AH) 10 (AL) 0024H→(AX) ;(SF)=0,(ZF)=0,(PF)=1 DIV BL ;(AL)=4,(AH)=0