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:datadata segmentdb 'BaSiC'db 'iNFOrMaTion'
data endscode segmentstart: mov ax,datamov ds,axmov bx,0mov cx,5;将Basic变成大写s: mov al,[bx]and al,11011111Bmov [bx],alinc bxloop smov bx,5mov cx,11;将iNFOrMaTion字母变成小写s0: mov al,[bx]or al,00100000Bmov [bx],alinc bxloop s0mov ax,4c00hint 21hcode ends
end start
为什么可以用and和or进行大小写字母转换呢?
我们可以发现,大写字母第6位都是0,小写字母都是1,其他都相同,所以用and或者or进行大写字母转换,大写字母的第6位变成1,小写字母的变成0就行了