一,基本语法
;基本格式 add 寄存器,二进制数 or 寄存器,二进制数 ;add与or通常用于改变寄存器中的值 ;add按位与运算 ;or按位或运算
二,实例
add按位与
mov al,01100011b
and al,00100011b
执行结果:(al)=00100011b
解释,只有对应位全是1的时候运算结果是1
or按位或
mov al,01100011b
or al, 00100011b
执行结果:(al)=01100011b
解释,对应位有一个是1,运算结果就是1
三,debug中的and与or指令
问题:前面我们说过可以通过and改变al里面的值,现在如果我想改变数据段中的一个数据,并且不想借助寄存器来实现,可行吗?
答案是可以的,也就是and不仅可以改变寄存器中的值,还可以直接改变某一地址存储的数据,但是这个过程需要添加一个指定操作长度的指令
比如下面一段,想要将dataa中第一个数据变为零
string segment
db 1,2,3
string ends
code segment
start: mov ax,string
mov ds,ax
mov bx,0
and byte ptr ds:[0],00000000b
mov ax,4c00h
int 21h
code ends
end start
运行结果:
你会发现在使用and时我们添加了byte ptr,它的作用是指定操作的大小是字节,在使用它后debug中and这一段指令的机器码是
可以看到这是对字节操作
如果不使用byte ptr来指定大小,and ds:[0],00000000b在debug中形式是
会使操作出现问题