- 16
- 0
- 约 74页
- 2017-09-26 发布于重庆
- 举报
指令系统 三、逻辑运算和移位类 逻辑运算 移位操作 1.逻辑运算 逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数; 除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0 “与”指令: 格式: AND OPRD1,OPRD2 操作: 两操作数相“与”,结果送目标地址 “与”指令的应用 实现两操作数相与的运算; 使目标操作数的某些位不变,某些位清零; 在操作数不变的情况下使CF和OF清零。 实现手段: “与”指令应用例 AND BL,[BX] AND AL,0FH AND AX,AX “或”运算指令 格式: OR OPRD1,OPRD2 操作: 两操作数相“或”,结果送目标地 址 “或”指令的应用 实现两操作数相“或”的运算; 使某些位不变,某些位置“1” 在不改变操作数的情况下使OF=CF=0 “或”指令的应用例 OR AX,[DI] OR CL,0FH OR AX,AX “非”运算指令 格式:NOT OPRD 操作:操作数按位取反再送回原地址 指令中的操作数不能是立即数 指令的执行对标志位无影响 例:NOT BYTE PTR[BX] “异或”运算指令 格式: XOR OPRD1,OPRD2 操作: 两操作数相“异或”,结果送目标 地址 两操作数自身相异或,结果 XOR AX,AX “测试”指令 格式: TEST OPRD1,OPRD2 操作: 执行“与”运算,但运算的结果不 送回目标地址。 应用:常用于测试某些位的状态 “测试”指令例 从地址为38F0H的端口中读入一个字节数,如果该数的bit1位为1,则可从38FEH端口将DATA为首地址的一个字输出,否则就不能进行数据传送。 编写相应的程序段。 “测试”指令例 “测试”指令例 2. 移位指令 非循环移位指令 循环移位指令 移动一位时由指令直接给出;移动两位及以上,则移位次数由CL指定。 非循环移位指令 逻辑左移 算术左移 逻辑右移 算术右移 算术左移和逻辑左移 格式: SAL OPRD,1 SAL OPRD,CL SHL OPRD,1 SHL OPRD,CL 逻辑右移 格式: SHR OPRD,I SHR OPRD,CL 算术右移 格式: SAR OPRD,I SAR OPRD,CL 非循环移位指令的应用 左移可实现乘法运算 右移可实现除法运算 例: 教材p130 循环移位指令 不带进位位的循环移位 带进位位的循环移位 循环移位指令的格式、对操作数的要求与非循环移位指令相同 不带进位位的循环移位 带进位位的循环移位 循环移位指令的应用 用于对某些位状态的测试; 高位部分和低位部分的交换; 与非循环移位指令一起组成32位或更长字长数的移位。 程序例 MOV SI,1000H MOV DI,3000H MOV CX,4 BBB:MOV AL,[SI] MOV BL,AL AND AL,0FH OR AL,30H MOV [DI],AL INC DI MOV AL,BL 程序例 将1000H开始存放的四个压缩BCD码转换为ASCII码存放在3000H开始的单元中去。 四、串操作指令 针对数据块或字符串的操作; 可实现存储器到存储器的数据传送; 待操作的数据串称为源串,目标地址称为目标串。 串操作指令的特点 源串一般存放在数据段,偏移地址由SI指定。允许段重设; 目标串必须在附加段,偏移地址由DI指定; 指令自动修改地址指针,修改方向由DF决定。DF=0 增地址方向;DF=1 减地址方向; 数据块长度值由CX指定 可增加自动重复前缀以实现自动修改CX内容。 串操作指令流程 重复前缀 REP 无条件重复 REPE 相等重复 REPZ 为零重复 REPNE 不相等重复 REPNZ 不为零重复 串操作指令 串传送 MOVS 串比较 CMPS 串扫描 SCAS 串装入 LODS 串送存 STOS 串传送指令 格式: MOVS OPRD1,OPRD2 MOVSB MOVSW 串传送指令常与无条件重复前缀连用 串传送指令 对比用MOV指令和MOVS指令实现将200个字节数据从内存的一个区域送到另一个区域的程序段。 串传送指令例 用串
原创力文档

文档评论(0)