第3章-5逻辑移位
- 格式:ppt
- 大小:665.00 KB
- 文档页数:22
寻址方式指令系统
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
通用传送指令
累加器专用传送指令
地址传送指令
标志传送指令
对标志位的影响: 除SAHF和POPF指令外,其余的所有数据传送类指令
格式:
功能:
操作数类型:
DS,100H
用
堆栈:执行
PUSH
POP
SS指向堆栈段的起始位置SP指定栈顶
PUSH AX PUSH DS POP DS POP AX
格式:
oprd1,
立即数、段寄存器和
不影响
通用传送指令
累加器专用传送指令地址传送指令
标志传送指令
LEA (Load Effective Address)
LDS (Load pointer into register and DS) LES (Load pointer into register and ES)
LEA LEA
LEA
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
实现二进制
所有算术运算指令均所有算术运算指令均
四则运算是计算机经常进行的一种操作。
请注意算术运算指令对
只有一个操作数:寄存器或存储单元对操作数加
用于计数器和地址指针的调整
不影响进位
对操作数减
用于计数器和地址指针的调整不影响进位。
逻辑位移是C语言中的一种位运算符,用于将一个整数的二进制表示向左或向右移动指定的位数。
逻辑位移操作符有两种:左移(<<)和右移(>>)。
1. 左移(<<):将一个整数的二进制表示向左移动指定的位数,右边用0填充。
例如,将数字5(二进制表示为101)左移2位,得到的结果为20(二进制表示为10100)。
```c
#include <stdio.h>
int main() {
int num = 5;
int result = num << 2;
printf("左移结果:%d
", result);
return 0;
}
```
2. 右移(>>):将一个整数的二进制表示向右移动指定的位数,左边用符号位填充。
例如,将数字-5(二进制表示为11111111111111111111111111111011)右移3位,得到的结果为-16(二进制表示为11111111111111110000000000000000)。
```c
#include <stdio.h>
int main() {
int num = -5;
int result = num >> 3;
printf("右移结果:%d
", result);
return 0;
}
```。
实验三
实验目的(要求):巩固练习逻辑移位指令,及串操作指令
实验原理:
实验仪器:DEBUG、微型计算机
实验要求:所有实验内容均需抓图说明。
实验内容:
1.练习逻辑及移位指令
2.练习串操作相关指令,掌握指令及重复前缀的使用规则
3.完成课后习题3-13(编写出程序片段)
(附加阅读)写出完整汇编源程序,对字符串进行操作时,确定它的长度。
要求以或$作为字符串结束标志。
(提示)-----计算串长的子程序-----
STRLEN PROC
LEA DI,STRING
MOV CX,0FFFFH ;(CX)=-1
MOV AL,CR ;(AL)=0DH
MOV AH,’$’;(AH)=24H
CLD ;DF=0
AGAIN: INC CX ;串长加1,初始值(CX)=0 CMP CX,100H
JAE DONE ;串长>255,则结束
CMP [DI],AH ;本字符是’$’?
JE DONE ;是,则结束
SCASB;本字符是CR?
JNE AGAIN ;未找到,返回继续
DONE: MOV LENGTH1,CX ;找到,LENGTH1←串长RET ;返回主程序
STRLEN ENDP。
三、逻辑运算和移位指令逻辑运算和移位指令逻辑运算指令AND DST,SRC 逻辑与指令OR DST,SRC 逻辑或指令XOR DST,SRC 逻辑异或指令TEST DST,SRC 测试指令NOT OPR 逻辑非指令移位指令SHL OPR,CNT 逻辑左移指令SAL OPR,CNT 算术左移指令SHR OPR,CNT 逻辑右移指令SAR OPR,CNT 算术右移指令ROL OPR,CNT 左循环移位指令ROR OPR,CNT 右循环移位指令RCL OPR,CNT 带进位左循环移位指令RCR OPR,CNT 带进位右循环移位指令SHLD DST,REG,CNTSHRD DST,REG,CNT逻辑运算指令(1)AND 逻辑与指令格式:AND DST ,SRC功能:(DST)←(DST)∧(SRC)(按位与)操作数:通用寄存器立即数存储器AND MEM , IDATAAND REG , IDATAAND REG , MEMAND MEM , REGAND REG , REG对标志寄存器的影响:1)CF=OF=0;2)根据运算结果设置SF、ZF、PF标志;3)AF无定义。
说明:1)利用AND指令,可以保留特定位(与1),同时屏蔽掉其它位(与0),以检测特定位。
2)利用AND指令,可以将某些特定位设置为0(与0),同时使其余位保持原值不变化(与1)。
3)一个寄存器和自身进行逻辑与运算,该寄存器内容不变。
但该运算影响了SF、ZF、PF三个标志位,并使OF和CF清零。
利用该特性,可以判断一个数据的正负、是否为零、以及数据的奇偶性。
格式:OR DST ,SRC功能:(DST)←(DST)∨(SRC)(按位或)操作数:通用寄存器立即数存储器OR MEM , IDATAOR REG , IDATAOR REG , MEMOR MEM , REGOR REG , REG对标志寄存器的影响:1)CF=OF=0;2)根据运算结果设置SF、ZF、PF标志;3)AF无定义。
微机原理第3章习题(答案)1. 下列各条指令是否有错?如果有,请指出错误之处并改正(1)MOV DS,1000H(2)MOV [100],23H(3)ADD AX,[BX+BP+6](4)PUSH DL(5)IN AX,[3FH](6)OUT 3FFH,AL(7)LES SS,[SI](8)POP [AX](9)IMUL 4CH(10)SHL BX,5(11)INT 300(12)XCHG DX,0FFFH答:(1)错误。
不允许直接向段寄存器送立即数,可改为:MOV AX,1000HMOVDS,AX(2)错误。
该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上BYTE PTR 或WORD PTR 说明,否则汇编程序会因不能确定操作数长度而指示出错。
可改为:MOV BYTE PTR [100],23H(3)错误。
不能同时使用两个基址寄存器BX、BP 进行间接寻址,可改为:ADD AX,[BX+DI+6] (4)错误。
堆栈操作应以字为单位进行,而DL 是一个字节。
可改为:PUSH DX(5)错误。
在输入/输出指令中,8 位端口地址应直接写在操作数处。
可改为:IN AX,3FH(6)错误。
端口地址3FFH 已超出8 位二进制表示范围,16 位端口地址应用DX。
可改为:MOV DX,3FFH OUT DX,AL(7)错误。
LES 指令的目操作数应该是通用寄存器,不能是段寄存器。
可改为:LES BX,[SI](8)错误。
AX 不能用于间接寻址,间接寻址只能用BX、BP、SI、DI 四个寄存器之一。
可改为:POP [BX](9)错误。
立即数不能做乘法指令的操作数,可改为:MOV BL,4CH IMUL BL(10)错误。
当逻辑移位的次数大于1时,应该用CL指示次数。
可改为MOV CL,5 SHL BX,CL (11)错误。
操作数300 > 255,已超出有效的中断类型码范围。