微机原理 第三章5

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[例] 实现32位数的联合左移1位:高16位在DX中,低16位在 实现32位数的联合左移1 16位在DX中 16位在 32位数的联合左移 位在DX AX中 DX:AX)× AX中。(相当于 (DX:AX)×2 ) AX,1 SAL AX,1 DX,1 RCL DX,1 [例] 将DB_BCD开始的两个字节2位非压缩BCD码合并到DL中。 DB_BCD开始的两个字节2位非压缩BCD码合并到DL中 开始的两个字节 BCD码合并到DL 04H,08H H,08 DB_BCD DB 04H,08H …… MOV DL,DB_BCD ;取低字节 DL,0 屏蔽高四位, AND DL,0FH ;屏蔽高四位,保留低四位 MOV DH,DB_BCD+1 ;取高字节 DH,DB_BCD+1 CL,4 MOV CL,4 ;设置循环移位次数 移到高4 或用ROL SHL DH,CL ;移到高4位,或用ROL DH,CL 合并,或使用ADD OR DL,DH ;合并,或使用ADD DL,DH
3、 循环移位指令
循环移位指令类似移位指令, 循环移位指令类似移位指令 , 但要求将一端移出的位返回 到另一端形成循环。 到另一端形成循环。可分为不带进位循环移位和带进位循环移 位指令,分别具有左移和右移操作。 位指令,分别具有左移和右移操作。 ROL ROR RCL RCR reg/mem ,1/CL reg/mem ,1/CL reg/mem ,1/CL reg/mem ,1/CL ;不带进位循环左移 ;不带进位循环右移 ;带进位循环左移 ;带进位循环右移
逻辑运算指令用来对字节或字数据按位进行逻辑运算。 逻辑运算指令用来对字节或字数据按位进行逻辑运算。 AND: 只有相“与”的两个位都为1,结果才是1;否则结果为0; 只有相“ 的两个位都为 ,结果才是 ;否则结果为 ; OR: 只要相“或”的两位有一个为 ,结果是 ;否则结果为 ; 只要相“ 的两位有一个为1,结果是1;否则结果为0; NOT: 原来为 的位置为 ;原来为 的位置为 ; 原来为0的位置为 的位置为1;原来为1的位置为 的位置为0; XOR: 相“异或”的两位不相同时结果为 ,相同时结果为 ; 异或”的两位不相同时结果为1,相同时结果为0;
逻辑运算与移位类指令
当需要对字节或字数据中的各个二进制位进行操作时 当需要对字节或字数据中的各个 二进制位进行操作时 , 可 二进制位 进行操作时, 以考虑采用逻辑运算与移位类指令。 以考虑采用逻辑运算与移位类指令。 ADD、ADC、SUB、SBB、CMP和 AND、OR、XOR、TEST具有相同 ADD、ADC、SUB、SBB、CMP 和 AND、OR、XOR、TEST 具有相同 的指令格式: 的指令格式: 运算指令助记符 运算指令助记符 reg,imm/reg/mem mem,imm/reg
[例] 编写程序段,将DX:AX中的双字右移4位。 编写程序段, DX:AX中的双字右移4 中的双字右移 MOV SHR MOV SHR SHL OR CL, CL,4 AX, AX,CL BL, BL,DL DX,CL DX, BL, BL,CL AH, AH,BL
AL寄存器的无符号数乘以10。 寄存器的无符号数乘以10 [例] 将AL寄存器的无符号数乘以10。 利用异或运算,实现AH= 同时CF= AH=0 CF=0 XOR AH,AH ;利用异或运算,实现AH=0,同时CF=0 AX,1 SHL AX,1 ;AX 2*AL 保存BX AX=2 MOV BX,AX ;保存BX AX=2*AL SHL AX,1 AX,1 ;AX 4*AL AX,1 SHL AX,1 ;AX 8*AL *AL+2*AL=10 10*AL ADD AX,BX ;AX 8*AL+2*AL=10*AL
练习: 练习:
寄存器。 1、用一条逻辑运算指令 清除 BX 寄存器。 的高3位为1 2、用一条逻辑运算指令 使 DX 的高3位为1, 其余的位保持不变。 其余的位保持不变。 3、用一条逻辑运算指令使 BL 的低4位为0, 的低4位为0 其余的位保持不变。 其余的位保持不变。 4、用一条逻辑运算指令使AX中和BX中的对应位 用一条逻辑运算指令使AX中和BX中的对应位 AX中和BX 不相同的位均置位 为1。
符号位
注意: 注意:
四条(实际为三条) ① 四条(实际为三条)移位指令的目的操作数可以是寄存器 或存储单元,后一个操作数表示移位的位数, 表示移动一 或存储单元,后一个操作数表示移位的位数,为1表示移动一 移位位数大于1,则由CL寄存器的值表示 寄存器的值表示。 位;移位位数大于 ,则由 寄存器的值表示。 移位指令按照移入的位来设置CF, ② 移位指令按照移入的位来设置 ,根据移位后的结果影响 SF、ZF和PF,对AF没有定义;如果进行一位移动,则按照操 没有定义; 、 和 , 没有定义 如果进行一位移动, 作数的最高符号位是否改变来确定OF,有改变, 作数的最高符号位是否改变来确定 ,有改变,OF=1;否则, ;否则, OF=0。移位次数大于 ,OF不确定。 不确定。 。移位次数大于1, 不确定 ③ 逻辑移位指令和算术移位指令可以实现无符号数和有符号 数的乘或除2、 、 数的乘或除 、4、8……。左移相当于乘 ,右移相当于除 , 。左移相当于乘2,右移相当于除2, 商在操作数中,余数由CF标志反映 标志反映。 商在操作数中,余数由 标志反映。
循环移位指令的操作数形式(寻址方式) 循环移位指令的操作数形式 ( 寻址方式 ) 和移位指令相同 按指令功能设置进位标志CF, 不影响AF、 、 、 标 , 按指令功能设置进位标志 , 不影响 、Z来自百度文库、PF、SF标 的影响, 志。对OF的影响,循环移位指令同移位指令是一样的。 的影响 循环移位指令同移位指令是一样的。
TEST指令对两个操作数执行按位逻辑与的运算, 但结果不 TEST指令对两个操作数执行按位逻辑与的运算, 指令对两个操作数执行按位逻辑与 的运算 送目的操作数,只根据结果设置状态标志位。TEST指令通常用 送目的操作数,只根据结果设置状态标志位。TEST指令通常用 于检测操作数中某些位的状态, 于检测操作数中某些位的状态,但又不希望改变原操作数的情 这条指令之后,一般都是条件转移指令 条件转移指令, 况。这条指令之后,一般都是条件转移指令,目的是利用测试 结果对状态标志位的影响作为判断条件转向不同的程序段。 结果对状态标志位的影响作为判断条件转向不同的程序段。 [例] TEST AL,80H AL,80H 80
①双操作数逻辑运算指令均设置CF=OF=0,根据结果设置SF、ZF 双操作数逻辑运算指令均设置CF=OF=0 根据结果设置SF、 CF=OF= SF PF, AF未定义 NOT指令不影响状态标志位 未定义。 指令不影响状态标志位。 和PF,对AF未定义。NOT指令不影响状态标志位。 [例] AL,75 75H 75H MOV AL,75H ;AL 75H AL,32 32H 30H,CF=OF= H,CF=OF=0 SF=0 ZF=0 PF=1 AND AL,32H ;AL 30H,CF=OF=0、SF=0、ZF=0、PF=1 AL,71 71H 71H,CF=OF= H,CF=OF=0 SF=0 ZF=0 PF=1 OR AL,71H ;AL 71H,CF=OF=0、SF=0、ZF=0、PF=1 AL,0 80H,CF=OF= H,CF=OF=0 SF=1 ZF=0 PF=0 XOR AL,0F1H ;AL 80H,CF=OF=0、SF=1、ZF=0、PF=0 FH,不改变状态标志位 NOT AL ;AL 7FH,不改变状态标志位 逻辑运算指令除了可以进行逻辑运算以外, ②逻辑运算指令除了可以进行逻辑运算以外,经常用来处理操 作数的某些位,例如可屏蔽某些位(将这些位置0 作数的某些位 , 例如可屏蔽某些位 ( 将这些位置 0 ) , 或使某 些位置1 或将某些位取反,或使用TEST指令测试某些位。 TEST指令测试某些位 些位置1,或将某些位取反,或使用TEST指令测试某些位。 [例] AL,01011111 01011111B MOV AL,01011111B 01011100,屏蔽AL的第0 AL的第 AL,11111100B 11111100 AND AL,11111100B;AL 01011100,屏蔽AL的第0、1两位 AL,00 00000B 001 01111100, AL的第 位置1 的第5 OR AL,00100000B;AL 01111100,将AL的第5位置1 AL,00110000 00110000B 01001100, AL的第 001100 的第4 XOR AL,00110000B;AL 01001100,将AL的第4、5位取反 作用? XOR AX,AX ;作用?
以上格式表明了操作数的寻址方式。也可统一表示为: 以上格式表明了操作数的寻址方式。也可统一表示为: 运算指令助记符 dst, src
1、 逻辑运算指令
AND OR XOR TEST NOT dst,src dst,src dst,src dst,src reg/mem ;逻辑与指令:dst dst∧src 逻辑与指令: 逻辑或指令: ;逻辑或指令:dst dst∨src 逻辑异或指令: ;逻辑异或指令:dst dst⊕src 测试指令: ;测试指令:dst∧src 逻辑非指令reg/mem ;逻辑非指令reg/mem ~reg/mem
1、XOR AND 2、OR 3、AND 4、XOR
BX,BX 或 BX,0 DX, DX,1110000000000000B BL, BL,11110000B AX,BX AX,
2、 移位指令 SHL(shift logical left) SHL(shift 逻辑左移 SAL(shift SAL(shift arithmetic left) 算术左移 SHR(shift SHR(shift logical right) 逻辑右移 SAR(shift SAR(shift arithmetic right) 算术右移 ROL(rotate ROL(rotate left) 循环左移 ROR(rotate right) ROR(rotate 循环右移 RCL(rotate RCL(rotate left through carry) 带进位循环左移 RCR(rotate carry)带进位循环右移 RCR(rotate right through carry)带进位循环右移
指令用来测试AL的最高位为 还是1 相与结果为0 ZF=1 指令用来测试 AL的最高位为0 还是 1。 相与结果为0 , ZF=1, AL 的最高位为0 表示AL的最高位为0 表示AL符号位为0 否则为1 ZF=0 AL的最高位为 AL符号位为 表示AL的最高位为0,表示AL符号位为0;否则为1,ZF=0,可以 表明AL是有符号数的负数。 表明AL是有符号数的负数。 AL是有符号数的负数
移位指令助记符 opr, count 为1或CL
mem/reg
reg/mem,1 SHL reg/mem,1/CL 逻辑左移:reg/mem左移 CL位 左移1 ;逻辑左移:reg/mem左移1/CL位,最低位补 ;零,最高位进入CF 最高位进入CF reg/mem,1 SHR reg/mem,1/CL 逻辑右移: reg/mem右移 CL位 最高位补0 右移1 ; 逻辑右移 : reg/mem 右移 1 / CL 位 , 最高位补 0 , 最低位进入CF ;最低位进入CF reg/mem,1 SAL reg/mem,1/CL 算术左移: SHL是同一条指令 ;算术左移:与SHL是同一条指令 reg/mem,1 SAR reg/mem,1/CL ; 算术右移: reg/mem右移 1 / CL位 , 最高位不变, 算术右移 : reg/mem 右移1 CL 位 最高位不变, 右移 最低位进入CF ;最低位进入CF
相关文档
最新文档