and指令:逻辑与指令,按位进行与运算
mov al,01100011B
and al,00111011B
执行后al=00100011B,两个为1才为1,所以通过该指令可将操作数对象的相应位设为0,其他位不变
or指令:逻辑或指令,按位进行或运算
mov al,01100011B
or al,00111011B
执行后:al=01111011B。有1为1,所以通过该指令可将操作数的相应位设为1,其他为不变
实际应用:
通过and和or指令进行大小写字母转换
assume cs:code,ds:data
data segment
db 'BaSiC'
db 'iNFOrMaTion'
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov cx,5
;将Basic变成大写
s: mov al,[bx]
and al,11011111B
mov [bx],al
inc bx
loop s
mov bx,5
mov cx,11
;将iNFOrMaTion字母变成小写
s0: mov al,[bx]
or al,00100000B
mov [bx],al
inc bx
loop s0
mov ax,4c00h
int 21h
code ends
end start
为什么可以用and和or进行大小写字母转换呢?
我们可以发现,大写字母第6位都是0,小写字母都是1,其他都相同,所以用and或者or进行大写字母转换,大写字母的第6位变成1,小写字母的变成0就行了