1. 按位与/或指令:
1) and指令表示按位与,or指令表示按位或;
2) 两条指令的参数完全相同,都是将第一个参数和第二个参数进行按位运算,并将结果保存在第一个参数中;
3) 两个操作数的类型和前面讲过的mov指令差不多,并且这里先不提两个操作数都是内存单元的情况;
4) 操作数中不能有段寄存器,其余寄存器可以随便用,只要出现段寄存器就会报错!
5) 一般用途就是利用and将某些位置0,利用or将某些位置1;
3. 大小写转换问题:
1) 大小写字母之间的关系就是小写字母的ASCII码要比相应的大写字母要大20H;
2) 从二进制位上来看,所有小写字母的ASCII码的第三高位恒为1,而大写字母恒为0;
3) 因此可以通过按位与或置0置1的方式来转换大小写;
4) 示例:
assume cs:codesg, ds:datasg
datasg segment
db 'abcdefg'
db 'HIJKLMN'
datasg ends
codesg segment
start:
mov ax, datasg
mov ds, ax
mov bx, 0
mov al, 11011111B
mov cx, 7
lp1:
and [bx], al
inc bx
loop lp1
mov al, 00100000B
mov cx, 7
lp2:
or [bx], al
inc bx
loop lp2
mov ax, 4C00H
int 21H
codesg ends
end start
运行结果: