免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1494 | 回复: 0
打印 上一主题 下一主题

汇编-位运算指令 [复制链接]

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-07 13:16 |只看该作者 |倒序浏览
本帖最后由 _nosay 于 2016-01-07 14:41 编辑

1. sal,shl

功能:
sal oprd1[, oprd2],将oprd1向左移动“1”或oprd2位(算术左移);
shl oprd1[, oprd2],将oprd1向左移动“1”或oprd2位(逻辑左移)。
它们分别期望在不溢出时,分别对有符号、无符号数翻倍,都是只需要向左移,最高位送入CF低位补0即可,所以这两条指令其实是等价的,只不过为了与sar/shr对称。


标志寄存器影响:

“OF、CF”迷雾:
OF将参与运算的数当作有符号数,关注计算结果有没有超过范围;CF将参与运算的数当作无符号数,关注计算结果有没有溢出(最高位有没有产生进/借位)。
而一个二进制数是作为正数还是负数,是根据程序的上下文含义来的,比如“1100 0000”,计算机并不知道它是192还是-64,所以就提供了OF、CF两种标志位。
CF可以直接通过最高位得到,是因为1+1肯定会进位,0+0不可能进位,仍然是CF的本质。

使用注意:
Nx2 = N+N,所以sal/shl对OF、CF标志位的影响,可以参考“add指令”,但毕竟是不同的指令,有些区别,可能要通过硬件的实现才能知道。

sar

功能:


标志寄存器影响:


使用注意:
最低位送入CF,可以看出余数的值,最高位维持不变,用于有符号的减番运算。

shr

功能:


标志寄存器影响:


使用注意:
最低位送入CF,可以看出余数的值,最高位补0,用于无符号的减番运算。

opcode:



2. ROL、ROR、RCL、RCR


标志寄存器影响:


使用注意:
据说实际运用于加密算法,或对一些运算过程进行优化,比如写了好几个指令,结果其实就是左循环移位,则可用ROL一条指令替换。

opcode:



3. or、and、xor、test、not

功能:
or oprd1, oprd2,oprd1←oprd1|oprd2;
and oprd1, oprd2,oprd1←oprd1&oprd2;
xor oprd1, oprd2,oprd1←oprd1^oprd2;
test oprd1, oprd2,oprd1&oprd2(与“and指令”区别);
not oprd,oprd←~oprd。

标志寄存器影响:
not:无
or、and、xor、test:


使用注意:
注意对操作数的要求。

opcode:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP