微型计算机原理及应用-第三章80x86指令系统
(3) 逻辑“或”指令OR (logical inclusive OR) 指令格式及操作:OR dst,src ;(dst)←(dst)∨(src) 目的操作数:寄存器、存储器 源操作数:立即数、寄存器、存储器 OR BL,0F6H;寄存器''或''立即数 OR AX,BX ;寄存器''或''寄存器 OR CL,BETA[BX][DI] ;寄存器''或''存储器 OR GAMMA[SI],DX ;存储器''或''寄存器 OR MEM_BYTE,80H ;存储器''或''立即数 大写、小写英文字母的相互转换! 大 写 字 母 小 写 字 母 'A'=41H=0100 0001B 'B'=42H=0100 0010B … 'Z'=5AH=0101 1010B 'a'=61H=0110 0001B 'b'=62H=0110 0010B … 'z'=7AH=0111 1010B 用AND指令可将 小写字母变为大写字母; 用OR指令可将 大写字母变为小写字母。 MOV AX,DATA;(AX)←DATA OR AX,AX ;影响标志(用AND AX,AX指令亦可) JZZERO ;如为零,转移到ZERO … ;否则,… ZERO: … 不能同时为存储器 (4) 逻辑“异或”指令XOR (logical eXclusive OR) 指令格式及操作:XOR dst,src ;(dst)←(dst)? (src) 目的操作数:寄存器、存储器 源操作数:立即数、寄存器、存储器 将寄存器或存储器中某些特定位“求反” MOV AL,0FH ;(AL) XOR AL,0AAH; (AL)(0A5H) 将寄存器的内容清空 XOR AX,AX;AX清零 XOR CX,CX ;CX清零 LEA BX,TABLE;(BX)←数据表地址指针 MOV CL,100 ;(CL)←数据块长度 XOR AX,AX ;清AL、AH,并清进位CF LOOPER:ADD AL,[BX] ;加一个数到AL JNC GOON;如(CF)=0,转移到GOON INC AH ;否则,AH加1 GOON:INC BX ;地址指针加1 DEC CL ;计数值减1 JNZ LOOPER ;如(CL)≠0,转移到LOOPER MOV SUM,AX ;否则,(SUM)←(AL),(SUM+1)←(AH) HLT ;停止 从偏移地址TABLE开始的内存区中,存放着100个字节型数据,要求将这些数进 行累加,并将累加和的低位存SUM字节单元,高位存SUM+1字节单元 在多字节累加程序中: 将一个累加器清零,同时将进位标志清零! (5) 逻辑“非”运算NOT (logical NOT) 指令格式及操作:NOT dst;(dst)←0FFH?(dst) (字节求反) ;(dst)←0FFFFH? (dst)(字求反) 操作数可以是8位或16位寄存器或存储器,但不可以是立即数! NOT AH;8位寄存器操作数求反 NOT CX;16位寄存器操作数求反 NOT BYTE PTR[BP] ;8位存储器操作数求反 NOTWORD PTR COUNT ;16位存储器操作数求反 不影响状态标志位! 2)移位指令 逻辑左移SHL 算术左移SAL 逻辑右移SHR 算术右移SAR 移位操作可以一次移动移位,也可以一次移动多位(必须存放在CL中) (1) 逻辑左移/算术左移指令SHL/SAL (SHift logical Left/Shift Arithmetic Left) 指令格式:SHL dst,1/SAL dst,1 或 SHL dst,CL/SAL dst,CL CF dst 0 若移位次数等于1,且移位以后目的操作数新的最高位与CF不相等,则OF=1,否则,OF=0;若移位次数不为1,则OF值不确定。 OF表示移位操作是否改变了符号位! SHL AH,1;寄存器左移1位 SAL SI,CL ;寄存器左移(CL)位 S