汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-07-17 13:07] 逻辑运算指令:and/or/xor/not/neg/test

基本的逻辑指令包括:and,or,xor,not。test是and的另外一种形式。而neg是类似于not指令。
逻辑操作提供了低级语言中对二进制位的控制。逻辑指令允许对位置位清除或取反。全部的逻辑指令都影响标志位。逻辑指令总是清除CF位和OF位。 其他标志位的变化取决于结果的调节。
当操作寄存器或存储单元中的二进制数据时,整数的最高位总是零。字节中位的位置序号是从位0向左递增到位7,而字是到位15,双字32位是用位31的位置标示它的最高位。

and指令:
and 对两个操作数进行按位与操作。简单的说, 和0相与结果总是零,1和1相与结果总是1。
and操作也可用于清除二进制数的位, 清除二进制位的操作叫做屏蔽。下图说明了屏蔽处理。注意最左位清0, 因为0和任何数相与都为0,和1相与的位不变。
------------------------------------------------------
xxxx xxxx       
0000 1111   ;屏蔽最左4位
------------
0000 xxxx   ;结果
------------------------------------------------------

or指令;
偶然操作实现的逻辑加,通常叫做或运算。 如果它的任何输入都为1,则or结果为1。只有当全部输入都为0时,结果才为0。
下图演示了如果设置二进制的任何位置1.已知xxxxxxxx与00001111进行或运算, 产生结果xxxx1111。最右4位置1,而最左边4位不变。
或操作置任何位1;与操作清任何位0
------------------------------------------------------
xxxx xxxx
0000 1111 ;屏蔽
---------------
xxxx 1111 ;结果
------------------------------------------------------

xor指令;
异或指令和或指令不同。 在1和1或操作产生1,而1和1异或操作产生0。
如果异或输入是两个0或两个1,结果都是0。如果输入不同,则产生1。 基于这个原因, 异或也叫比较器。
异或指令常用来清除寄存器为零。
------------------------------------------------------
xxxx xxxx
0000 1111 ;屏蔽
---------------
xxxx xxxx ;结果
------------------------------------------------------

test指令;
test实现and相同操作,区别就是test不改变目标操作数。test指令只影响标志寄存器的状态,指示测试的结果。
-------------------------------------------------------
test al,1  ;测试最右一位是否为1
jnz right  ;如果置位则。。
test al,128;测试最左一位是否为1
jnz left   ;如果置位则。。。
-------------------------------------------------------

not/neg
not指令对一个操作数的所有位取反。得到的结果叫该操作数的反码。
neg指令用于求相反数。例如:
mov dl,1
neg dl
;结果,-1。
评论次数(0)  |  浏览次数(357)  |  类型(汇编语言笔记) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码