汇编笔记一计算机数据宽度与逻辑运算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编笔记一计算机数据宽度与逻辑运算相关的知识,希望对你有一定的参考价值。

一、进制的定义

  由N个符号组成,满N则向上进位1.

 

二、常用的数据类型

  1BYTE(字节)=8BIT(位)

  1WORD(字)=2BYTE(字节)=16BIT(位)

  1DWORD(双字)=2WORD(字)=4BYTE(字节)=32BIT(位)

 

三、二进制的逻辑运算符

  A、逻辑运算符or(中文名:或运算 C对应符号:|)

    定义:两个数只要有一个为1,结果就是1.

    例子:

  技术分享

 

  B、逻辑运算符and(中文名:与运算 c对应符号:&)

    定义:两个数都是1,结果才是1

    例子:

  技术分享

 

  C、异或运算符xor(中文名:异或运算 c对应符号:^)

    定义:两个数不相同,结果才是1

    例子:

  技术分享

 

  D、非运算符not(中文名:非运算 c对应符号:!)

    定义:当被此运算符修饰时,每位取反

    例子:

  技术分享

 

四、CPU如何计算2+3的结果?

  1.第一步,先将十进制转二进制(2=0010,3=0011)

  2.第二步,将上面两个二进制进行异或运算,并将计算结果存放到寄存器中。

  技术分享

  3.第三步,计算机为了判断第二步是否已经计算完毕,他会将上面两个二进制数做与运算,也就是0010和0011,并将将计算结果左移一位,如果左移后结果每位都是0,证明计算完成。

  技术分享

  4.第四步,由于刚才0100每位不全是0,证明计算并未完成。计算机继续拿第二步的结果和第三步的结果做异或运算,并把结果存放到寄存器中。

  技术分享

 

  5.第五步,继续拿0001和0100做与运算。并将结果左移一位,如果左移后结果每位都是0,证明计算完成。

  技术分享

  6.第六步,由于第五步的结果每位都是0,证明计算完毕。计算机就会将第四步的结果作为本次运算的最终结果,也就是0101=5,所以2+3=5

 

五、如果想获取某个值二进制中第N位是0还是1,该如何计算?

  例子:求8F,第5位是0还是1

  1.首先将8F转为二进制:10001111

  2.创建一个和上面一样长度,全是0的二进制数据:00000000

  3.因为求第5位,我们将上一步的第5位变成1:00001000

  4.将第一步的二进制,第三步的二进制做与运算,取运算结果第五位,如果是1,证明8F第五位是1,如果是0,证明8F第五位是0

  技术分享

 

 

 六、最简单的加密算法(原理就是利用xor指令,当对某个数用指定的密钥异或后,再将异或的结果与密钥做异或运算,最后的结果是其本身。就好比1+5=6,再用6-5,那么就能知道加密前的数是1)

  要加密的数据:2015

  密钥:54

  因为密钥是两位数,我们就要把2015以两位为一组拆分来加密

  1.第一步:首先求得2015前两位的二进制 20=00100000

  2.第二步:54=01010100

  3.第三步:将一、二步的值异或,结果为01110100=74

  技术分享

  4.第四步:求得2015后两位的二进制 15=00010101

  5.第五步:将第二、四步的值异或,结果为01000001=41

  技术分享

 

  6.第六步:最后就是将7441发送给对方。对方接收到7441这串密文后,利用预先定义好的密钥54=01010100,分两位为一组,对7441进行异或解密

  技术分享

  7.第七步:解密结果为00100000=20  00010101=15,所以明文数据为:2015

以上是关于汇编笔记一计算机数据宽度与逻辑运算的主要内容,如果未能解决你的问题,请参考以下文章

汇编 学习笔记2

贺利坚汇编语言课程笔记 绪论

linux私房菜-读书笔记

汇编语言与计算机系统组成笔记

汇编语言-寻址和处理数据

GNU ARM 汇编基础笔记