title: 数据的宽度和逻辑运算
date: 2018-12-10
tags:
- 滴水逆向
- 汇编
- 逻辑运算
categories:
- 滴水逆向三期视频教程
数据的宽度
我们需要知道,无论是我们平时看到的视频(avi,mp4),还是图片png,jpg,在计算机中存储的时候,都是存储为0,1这个符号。
在之前我们的学习中,我们经常会听到原码、反码、补码等消息,这都是后人总结出来的一些概念,计算机本质是没有这些的。
就比如说有符号整型和无符号整型,计算机只知道自己存储的是0和1,是使用它的人自己规定这个是有符号还是无符号的。
我们先把存储比作是容器,如果容器只能装4bit,比如我们存了一个数
ffff
,我们再给这个数加1,会变成什么?
答案是0.计算机和真实的世界是不一样的,存不下的时候,直接抛弃。
在有符号数据中,为什么用1表示负数?
几个重要的计量单位(数据宽度)
1 byte = 8 bit
1 word = 16 bit
1 dword = 32 bit
二进制的逻辑运算
逻辑运算就是CPU计算的本质,汇编语言并不是cpu计算的本质。(这块就设计到了电路的知识)
或 or |
与 and &
异或 xor ^
非 not !
or,and,xor,not就是汇编语言的表示
CPU是如何计算2+3=?
先用一个容器X:存放二进制的2:0010
在用一个容器Y:存放二进制的3:0011
image.png
然后再用一个容器R:存放0010和0011异或的结果。
CPU需要判断容器R中是否是最终的结果,是否还需要继续运算。怎么判断呢?
image.png
让0010和0011进行与运算,与运算的结果向左移一位,<<1
,如果结果是0,那说明上面容器R中的就是真正的结果。
如果不是0,就是容器R中的值放到X中,把刚才判断得到的结果放到Y中,重复上面的操作。
image.png逻辑运算的两个应用
image.png判断某个值第N位的值是多少?
比如我们要判断第四位的值是多少,我们就构造一个第四位是1的数,然后与这个数进行与运算。如果结果>0
,表明第四位是1,不然第四位是0.
因为我们构造的数除了第四位是1,其他都是0.与运算的话,除了第四位,其他的肯定都是0.
网友评论