汇编基础笔记

二进制:         0000   0001   0010   0011   0100   0101   0110   0111   
十六进制:       0      1      2      3      4      5      6      7
十进制:         1      2      3      4      5      6      7      8  

               1000   1001   1010   1011   1100   1101   1110   1111
               8      9      A      B      C      D      E      F
               9      10     11     12     13     14     15     16

第一节:数据宽度

位:1个0或1 字节:8个0或1 字:16个0或1 双字:32个0或1

存储范围:
字节:0~0xFF 字:0~0xFFFF 双字:0~0xFFFFFFFF
如果要储存的数据超过最大宽度,那么多余的数据将被丢弃

第二节:无符号数有符号数

无符号数:无符号数没有符号,不存在负数,所以它的绝对值就是解析出来的值
有符号数:有正负数之分,如果最高位的是1,则为负数,
如果最高位的是0,则为正数,如果为0,则编码规则与无符号数一样

第三节:编码规则(原码反码补码)

原码:最高位为符号位,其余各位为数值本身的绝对值

反码
正数:反码与原码相同
负数:符号位为1,其余位对原码相反

补码
正数:补码与原码相同
负数:符号位为1,其余位对原码取法加1

总结
1.正数原码存储
2.负数补码存储

第四节:计算机只会做位运算

1.与运算
两个位都为1时,结果才为1

比如:

                        1011 0001
and(&)                1101 1000
----------------------------------------
                        1001 0000

2.或运算
只要有一个为1就是1

比如:

                        1011 0001
or(|)                   1001 1000
-----------------------------------------
                        1111 1001

3.异或运算
不一样的时候是1

比如:

                       1011 0001
xor(^)                 1001 1000
-----------------------------------------
                       0110 1001

4.非运算
0就是1,1就是0

比如:

not(~)              1101 1000
-----------------------------------------
                    0010 0111

5.左移
各二进位全部左移若干位,高位丢弃,低位补0

比如:
shl(<<) 1101 1000 左移2位为 0110 0000

6.右移
各二进位全部右移若干位,低位丢弃,高位补0或者补符号位

比如:

shr 1101 0101 0011 0101
对应C语言(>>)
unsigned int a=10;//10为十进制,自动转换为2进制 unsigned的意思为32位
printf(“%d\n,a>>2”);

sar 1101 0101 1111 0101
对应C语言(>>)
int a=10;
printf(“%d\n”,a>>2);

第五节

计算机做加法过程:
4+5=?的运算过程

正常加法运算:

              0000 0100                                  0000 0100 
              0000 0101                                  0000 0101----------------------------           异或----------------------------
              0000 1001                                  0000 0001

计算机执行的加法过程

1)异或                                         3)继续异或 

                 0000 0100                                  0000 0001 
                 0000 0101                                  0000 1000
异或------------------------------              异或------------------------------
                 0000 0001                                  0000 1001


2)判断是否有进位(与)                         4)判断是否有进位(与)

              0000 0100                                   0000 0001 
              0000 0101                                   0000 1000------------------------------------------------------------
              0000 1000                                   0000 0000

最终结果:0000 1000->9

计算机做减法过程:
4-5=?的运算过程

减法的实质:4-5=4+(-5)

1)异或

                       0000 0100
                       1111 1011
异或-------------------------------------------
                       1111 1111

2)判断是否有进位(与)

                       0000 0100
                       1111 1011---------------------------------------------
                       0000 0000

最终答案:1111 1111 转换为十六进制:FF,转为十进制:-1

乘法的运算过程:

X+Y 的本质就是加法, Y个X相加,得到的结果就为乘法的值

除法的运算过程:

X/Y 的本质就是减法,X能减去多少个Y,得到的结果就为除法的值

推论:所有的复杂运算都是建立在加法和减法之上来完成的。

第六节:

1.寄存器

寄存器:CPU中用来存储数据的地方

存储数据:

CPU>内存>硬盘

如果计算机为32位,CPU能提供三种类型:8 16 32

如果计算机为64位,CPU能提供三种类型:8 16 32 64

2.通用寄存器

32位通用寄存器(下面这些超过32位的0和1将被舍弃):

EAX ESP

ECX EBP

EDX ESI

EBX EDI

第七节:内存

1.每个应用程序都会有自己的独立的4GB内存空间(并不是真在的物理内存)

进程A
4G
———— 物理内存————内存条其他硬件设备
/
进程B /
4G

1Byte = 8Bit 1KB = 1024Byte 1MB =1024KB 1GB = 1024MB

2.内存地址
<1>内存太大没法起名字,所以只能用编号。当我们想向内存中存储数据,或
者从内存中读取数据时,必须用到这个编号,就像写信必须要写收信人地址一样。

<2>这个编号又称为内存地址(32位,前面0可以有省略)。

7             0 
|————|  [0x00000000]
|————|
|————|
|————|
|————|
|————|
|————|
 ————   [0xFFFFFFFF]

每一个编号,每一个地址对应的1个字节,8位,8个0和1

FFFFFFFF+1(0也是1个)= 100000000(十六进制)
100000000x8=800000000(十六进制)
800000000转为十进制=34359738368(十进制)
34359738368/8 = 4294967296(表示整个内存可以有多少个字节)
4294967296/1024 = 4194304(表示整个内存能够寻找的一共有多少KB)
4194304/1024 = 4096(表示整个内存能够寻找的一共有多少MB)
4096/1024 = 4(表示整个内存能够寻找的一共有多少GB)
正好是4GB,对应上面说的每个应用程序都会有自己的独立的4GB内存空间

第九节:小端存储模式

1.存储模式

           7             0|     |————|  [0x00000000]      <1>mov byte ptr ds:[0x00000000],0x1A
    |     |————|  [0x00000001]      <2>mov byte ptr ds:[0x00000000],0x1A2C
    |     |————|  [0x00000002]      <3>mov byte ptr ds:[0x00000000],0x1A2C3E4F
    |     |————|  [0x00000003]      
    |     |————|  [0x....]            大端模式:数据高位在低位,数据低位在高位
 大 |     |————| 
           ————   [0xFFFFFFFF]        小端模式:数据低位在低位,数据高位在高位

第十节:常用汇编指令

回顾:
1.数据可以存在哪:寄存器、内存
2.数据是如何存放的:小端存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值